diff --git a/examples/virtual_sites/thumbnail.png b/examples/virtual_sites/thumbnail.png new file mode 100644 index 000000000..d6daf1272 Binary files /dev/null and b/examples/virtual_sites/thumbnail.png differ diff --git a/examples/virtual_sites/vsite_showcase.ipynb b/examples/virtual_sites/vsite_showcase.ipynb index 4937809b7..4a24de795 100644 --- a/examples/virtual_sites/vsite_showcase.ipynb +++ b/examples/virtual_sites/vsite_showcase.ipynb @@ -7,6 +7,20 @@ "# Virtual Sites Showcase" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The OpenFF Toolkit supports specifying virtual sites in a SMIRNOFF force field. This approach treats virtual sites as a feature of the potential energy function, rather than of the chemical system, cleanly seperating the system being modelled from the model itself. This notebook demonstrates the specification and use of virtual sites and compares a SMIRNOFF implementation of TIP5P water to the implementation distributed with OpenMM." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setup" + ] + }, { "cell_type": "code", "execution_count": 1, @@ -19,7 +33,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ba621889dffa475e80a6a6b5f8f476e5", + "model_id": "7f4e1ebf5c0641b8b890abb69aea3289", "version_major": 2, "version_minor": 0 }, @@ -60,7 +74,7 @@ " simulation = interchange.to_openmm_simulation(integrator=integrator)\n", "\n", " # It's important to run energy minimization before computing velocities; otherwise the initial\n", - " # velocities may be too high as a result of high initial forces, causing a crash\n", + " # velocities of virtual sites may be too high as a result of high initial forces, causing a crash\n", " # See https://github.com/openmm/openmm/issues/3736#issuecomment-1217250635\n", " simulation.minimizeEnergy()\n", "\n", @@ -106,6 +120,17 @@ "## Part 1: Run a short simulation with a virtual sites on sulfur lone pair and chloride groups" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This part demonstrates the specification of virtual sites in the SMIRNOFF format.\n", + "\n", + "First, we write the definition of a SMIRNOFF force field with virtual sites in OFFXML format. We will append this force field to the OpenFF Sage small molecule force field, so it only needs to specify the virtual sites we want to supplement Sage with. For details, see the [SMIRNOFF specification].\n", + "\n", + "[SMIRNOFF specification]: https://openforcefield.github.io/standards/standards/smirnoff/#virtualsites-virtual-sites-for-off-atom-charges" + ] + }, { "cell_type": "code", "execution_count": 3, @@ -157,9 +182,18 @@ " \n", "\n", "\"\"\"\n", + "\n", + "# Load Sage and append our virtual sites\n", "force_field = ForceField(\"openff-2.1.0.offxml\", vsite_offxml)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Load a molecule including a divalent sulfur atom:" + ] + }, { "cell_type": "code", "execution_count": 4, @@ -175,70 +209,70 @@ "\n", "\n", " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "" ], "text/plain": [ @@ -256,6 +290,13 @@ "molecule.visualize()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Create an Interchange object, which parametrizes the molecule and stores information needed for OpenMM (and other engines) to understand virtual sites as applied by a force field:" + ] + }, { "cell_type": "code", "execution_count": 5, @@ -274,9 +315,6 @@ } ], "source": [ - "# Create an Interchange object, which stores information needed for OpenMM (and other engines)\n", - "# to understand virtual sites as applied by a force field\n", - "\n", "interchange = force_field.create_interchange(topology=molecule.to_topology())\n", "\n", "assert \"VirtualSites\" in interchange.collections.keys()\n", @@ -286,6 +324,13 @@ "print(f\"There are {n_virtual_sites} virtual particles in this topology.\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*This may take a moment, as it must compute partial charges for the molecule*" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -296,7 +341,7 @@ "* `openmm.app.Topology`: `Interchange.to_openmm_topology()`\n", "* `openmm.app.Simulation`: `Interchange.to_openmm_simulation()`\n", "\n", - "For simplicity, we'll just create a `Simulation` object with the function we defined above since that's all we need to run a simulation in OpenMM." + "For simplicity, we'll just create a `Simulation` object with the function we defined above since that's all we need to run a simulation in OpenMM:" ] }, { @@ -314,7 +359,7 @@ "output_type": "stream", "text": [ "Starting simulation\n", - "Elapsed time 0.96 seconds\n", + "Elapsed time 0.37 seconds\n", "Done!\n" ] } @@ -325,6 +370,13 @@ "run_simulation(simulation, 10000)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can visualize the resulting trajectory:" + ] + }, { "cell_type": "code", "execution_count": 7, @@ -335,7 +387,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c05515b6f75647ed89ebf066d9f99c48", + "model_id": "2622bad435364326acbe4c1749101b81", "version_major": 2, "version_minor": 0 }, @@ -375,49 +427,31 @@ } }, "source": [ - "Parameterizes a water box with OpenFF/SMIRNOFF and OpenMM implementations of TIP5P.\n", + "We will now parametrize a water box with OpenFF/SMIRNOFF and OpenMM implementations of TIP5P water.\n", "\n", "This code examines the geometry and energy between the two, and examines cases where minimization is performed.\n", "\n", - "The virtual site definitions give rise to small differences in geometry in due to to how they are defined relative to their parent atoms.\n", - "OpenMM's force field produces `openmm.OutOfPlaneSite`s whereas OpenFF's force field produces in `openmm.LocalCoordinatesSite`s.\n", - "(In each case, these objects are OpenMM objects to be used in OpenMM simulations; implementations in other engines are not covered here.)\n", - "`OutOfPlaneSite` virtual sites' positions are are determined based on the positions of the orientation atoms.\n", - "(In water models, the \"parent\" atom is oxygen and the \"orientation\" atoms are the oxygen and hydrogens; in other chemistries virtual sites may be definited differently.)\n", - "`LocalCoordinatesSite` virtual sites' positions relative to orientation atoms are fixed to a constant value in order to adhere to the SMIRNOFF specification.\n", - "A consequence of this difference is that tiny fluctuations in the molecular geometry cause slightly different coordinates and, therefore, energy evaluations.\n", - "This can arise from marginally different initial positions or from the dynamics of a simulation, but the descriptions at equilibrium should match.\n", - "Further nuance is described in the [OpenMM User Guide](http://docs.openmm.org/8.0.0/userguide/theory/05_other_features.html#virtual-sites) and API docs.\n", + "The virtual site definitions give rise to small differences in geometry due to how they are defined relative to their parent atoms. OpenMM's force field uses the `openmm.OutOfPlaneSite` class whereas OpenFF's force field uses `openmm.LocalCoordinatesSite`. In each case, these objects are OpenMM objects for use in OpenMM simulations; implementations in other engines are not covered here.\n", + "\n", + "Virtual sites are defined geometrically in terms of a single *parent* atom and multiple *orientation* atoms. In water models, the parent atom is oxygen and the orientation atoms are the oxygen and hydrogens; in other chemistries virtual sites may be definited differently. `OutOfPlaneSite` virtual sites' positions are determined based on the positions of the orientation atoms. `LocalCoordinatesSite` virtual sites' positions relative to orientation atoms are fixed in order to adhere to the SMIRNOFF specification.\n", "\n", - "This example uses water molecules, but both OpenFF and OpenMM infrastructure support a variety of other virtual site definitions for use in other chemistries.\n", + "A consequence of this difference is that tiny fluctuations in the molecular geometry cause slightly different coordinates and, therefore, energy evaluations. This can arise from marginally different initial positions or from the dynamics of a simulation, but when averaged over a large number of configurations at equilibrium the descriptions should match. Further nuance is described in the [OpenMM User Guide] and API docs.\n", "\n", - "One key difference between OpenFF and OpenMM code paths is the bookkeepping of virtual sites relative to atomistic particles.\n", - "OpenMM interleaves the virtual site particles at the end of _each molecule_ whereas OpenFF places all all virtual sites at the end of the `openmm.System`, topology, and related objects." + "This example uses water molecules, but both OpenFF and OpenMM infrastructure support a variety of other virtual site definitions for use in other chemistries. One key difference between OpenFF and OpenMM code paths is the bookkeepping of virtual sites relative to atomistic particles. OpenMM interleaves the virtual site particles at the end of _each molecule_, whereas OpenFF places all virtual sites at the end of the `openmm.System`, topology, and related objects.\n", + "\n", + "[OpenMM User Guide]: http://docs.openmm.org/8.0.0/userguide/theory/05_other_features.html#virtual-sites" ] }, { - "cell_type": "code", - "execution_count": 8, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "def _collate_virtual_site_positions(atom_positions: numpy.ndarray) -> numpy.ndarray:\n", - " \"\"\"Given an array of atomic positions of water, collate virtual particles between molecules.\"\"\"\n", - " padded_positions = numpy.zeros(shape=(2, 3))\n", - " num_atoms_per_mol = 3\n", - "\n", - " def mol_positions(i, atom_positions):\n", - " this_mol_atom_coordinates = atom_positions[\n", - " i * num_atoms_per_mol : (i + 1) * num_atoms_per_mol\n", - " ]\n", - " return numpy.vstack([this_mol_atom_coordinates, padded_positions])\n", - "\n", - " return numpy.vstack([mol_positions(i, atom_positions) for i in range(2)])" + "First, define some supporting functions:" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": { "pycharm": { "name": "#%%\n" @@ -478,7 +512,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": { "pycharm": { "name": "#%%\n" @@ -562,7 +596,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": { "pycharm": { "name": "#%%\n" @@ -613,9 +647,7 @@ " )\n", "\n", " # Add positions of virtual particles now that the topology includes them\n", - " particle_positions = openmm.unit.Quantity(\n", - " _collate_virtual_site_positions(atom_positions), openmm.unit.nanometer\n", - " )\n", + " particle_positions = modeller.getPositions()\n", "\n", " return _evaluate_positions_and_energy(\n", " topology, system, particle_positions, minimize=minimize\n", @@ -624,7 +656,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": { "pycharm": { "name": "#%%\n" @@ -665,36 +697,15 @@ ] }, { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], + "cell_type": "markdown", + "metadata": {}, "source": [ - "def print_info(\n", - " coordinate_difference: Quantity,\n", - " energy_difference: openmm.unit.Quantity,\n", - " name: str,\n", - "):\n", - " from openff.units.openmm import from_openmm\n", - "\n", - " _energy_difference = from_openmm(energy_difference)\n", - "\n", - " print(\n", - " f\"Results for: {name}\\n\"\n", - " f\"Energy difference ({_energy_difference.units}):\\n\\t\"\n", - " f\"{_energy_difference.m:0.3e}\\n\"\n", - " f\"Coordinates difference ({coordinate_difference.units}), norm):\\n\\t\"\n", - " f\"{coordinate_difference.m:0.3e}\\n\"\n", - " )" + "Next, construct TIP5P force fields from each software project:" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 12, "metadata": { "pycharm": { "name": "#%%\n" @@ -709,54 +720,86 @@ "openmm_force_field = openmm.app.ForceField(\"tip5p.xml\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, compare them:" + ] + }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 13, "metadata": { "pycharm": { "name": "#%%\n" }, "scrolled": true }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Results for: OpenFF - OpenMM comparison (per molecule)\n", - "Energy difference (kilojoule / mole):\n", - "\t1.907e-06\n", - "Coordinates difference (angstrom), norm):\n", - "\t1.624e-07\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "minimize = False\n", "\n", - "num_duplicates = (2, 1, 1) # 2x2x2 = 8 water molecules\n", + "num_duplicates = (2, 2, 2) # 2x2x2 = 8 water molecules\n", "spacing = (3.0, 3.0, 3.0) # water spaced 3A apart in each direction\n", "\n", "waters = build_water_lattice(num_duplicates, spacing)\n", "\n", + "# Generate OpenFF coordinates and energies\n", "off_crds, off_ene = evaluate_openff(waters, openff_force_field, minimize=minimize)\n", "off_crds = numpy.array(off_crds.value_in_unit(openmm.unit.angstrom))\n", "\n", + "# Generate OpenMM coordinates and energies\n", "omm_crds, omm_ene = evaluate_openmm(waters, openmm_force_field, minimize=minimize)\n", "omm_crds = numpy.array(omm_crds.value_in_unit(openmm.unit.angstrom))\n", "\n", + "# Compute the RMS difference in atom positions per molecule, reordering\n", + "# OpenMM coordinates to match OpenFF.\n", "coordinate_difference = Quantity(\n", " numpy.linalg.norm(off_crds - omm_crds[reorder(numpy.prod(num_duplicates)), :]),\n", " unit.angstrom,\n", ")\n", "coordinate_difference /= numpy.prod(num_duplicates)\n", - "energy_difference = abs(off_ene - omm_ene) / numpy.prod(num_duplicates)\n", + "# Compute the mean energy difference per molecule\n", + "energy_difference = abs(off_ene - omm_ene) / numpy.prod(num_duplicates)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And take a look!" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Results for: OpenFF – OpenMM comparison (per molecule) \n", + "Energy difference (kilojoule / mole):\n", + "\t4.101e-05\n", + "Coordinates difference (angstrom, norm):\n", + "\t1.855e-07\n", + "\n" + ] + } + ], + "source": [ + "from openff.units.openmm import from_openmm\n", "\n", - "print_info(\n", - " coordinate_difference,\n", - " energy_difference,\n", - " \"OpenFF - OpenMM comparison (per molecule)\",\n", + "_energy_difference = from_openmm(energy_difference)\n", + "\n", + "print(\n", + " f\"Results for: OpenFF – OpenMM comparison (per molecule) \\n\"\n", + " f\"Energy difference ({_energy_difference.units}):\\n\\t\"\n", + " f\"{_energy_difference.m:0.3e}\\n\"\n", + " f\"Coordinates difference ({coordinate_difference.units}, norm):\\n\\t\"\n", + " f\"{coordinate_difference.m:0.3e}\\n\"\n", ")\n", "\n", "assert coordinate_difference < Quantity(\n", @@ -768,11 +811,11 @@ ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], - "source": [] + "source": [ + "This tiny difference is expected, and comes from the slightly different geometric definitions of the virtual sites, as described above." + ] } ], "metadata": { @@ -792,242 +835,252 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.10.13" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { - "0d666e64e7ea4fee8001d81f6b379758": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "2.0.0", - "model_name": "SliderStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "2.0.0", - "_model_name": "SliderStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "StyleView", - "description_width": "", - "handle_color": null - } - }, - "12770c96e16041b8a9b60e31bb7464f9": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "2.0.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "1a325aab997249e8bd47b4af389c338d": { + "0049380d0d57478cb17bea4065f73ffb": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "LinkModel", "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "2.0.0", - "_model_name": "LinkModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "2.0.0", - "_view_name": null, "source": [ - "IPY_MODEL_1dcae65675184788a8d70e2d16355467", - "value" + "IPY_MODEL_cf5027519ac842ab927502a5f754a23e", + "max" ], "target": [ - "IPY_MODEL_bf858796484549ec859670b4a29d0916", - "frame" + "IPY_MODEL_2622bad435364326acbe4c1749101b81", + "max_frame" ] } }, - "1dcae65675184788a8d70e2d16355467": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "2.0.0", - "model_name": "PlayModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "2.0.0", - "_model_name": "PlayModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "2.0.0", - "_view_name": "PlayView", - "description": "", - "description_allow_html": false, - "disabled": false, - "interval": 100, - "layout": "IPY_MODEL_dcf9869dd5fa4f348c8011bd800bc293", - "max": 99, - "min": 0, - "playing": false, - "repeat": false, - "show_repeat": true, - "step": 1, - "style": "IPY_MODEL_bc4124ab778f45fb91bb97aa827fb096", - "tabbable": null, - "tooltip": null, - "value": 0 - } - }, - "262751b8e182410b9117c4da543c3897": { - "buffers": [ - { - "data": "", - "encoding": "base64", - "path": [ - "value" - ] - } - ], - "model_module": "@jupyter-widgets/controls", - "model_module_version": "2.0.0", - "model_name": "ImageModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "2.0.0", - "_model_name": "ImageModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "2.0.0", - "_view_name": "ImageView", - "format": "png", - "height": "", - "layout": "IPY_MODEL_12770c96e16041b8a9b60e31bb7464f9", - "tabbable": null, - "tooltip": null, - "width": "900.0" - } - }, - "299e0780df8c422ba90ade795dd95af1": { + "0a6f2424effb499c98386b0242e68c3f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "LinkModel", "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "2.0.0", - "_model_name": "LinkModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "2.0.0", - "_view_name": null, "source": [ - "IPY_MODEL_8bfb88914766458cbcd8c52c2696bd56", + "IPY_MODEL_c149773df8aa4d51913cef381ff3d75d", "max" ], "target": [ - "IPY_MODEL_bf858796484549ec859670b4a29d0916", + "IPY_MODEL_2622bad435364326acbe4c1749101b81", "max_frame" ] } }, - "392150b3500f4c568c20b5d9fdec8d94": { - "model_module": "@jupyter-widgets/controls", + "1096f027696443959b04153bab452614": { + "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", - "model_name": "HBoxModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "2.0.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "2.0.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_1dcae65675184788a8d70e2d16355467", - "IPY_MODEL_8bfb88914766458cbcd8c52c2696bd56" - ], - "layout": "IPY_MODEL_605df151435340968b2989568de61243", - "tabbable": null, - "tooltip": null - } + "model_name": "LayoutModel", + "state": {} }, - "4dd2b4ca9bba4af6a7363c4fef4678fa": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "2.0.0", - "model_name": "LinkModel", + "2622bad435364326acbe4c1749101b81": { + "model_module": "nglview-js-widgets", + "model_module_version": "3.0.8", + "model_name": "NGLModel", "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "2.0.0", - "_model_name": "LinkModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "2.0.0", - "_view_name": null, - "source": [ - "IPY_MODEL_1dcae65675184788a8d70e2d16355467", - "max" + "_camera_orientation": [ + 33.03847050994658, + 0, + 0, + 0, + 0, + 33.03847050994658, + 0, + 0, + 0, + 0, + 33.03847050994658, + 0, + -0.022500038146972656, + -0.019500017166137695, + -0.7969999313354492, + 1 ], - "target": [ - "IPY_MODEL_bf858796484549ec859670b4a29d0916", - "max_frame" - ] + "_camera_str": "orthographic", + "_gui_theme": null, + "_ibtn_fullscreen": "IPY_MODEL_e525a255582444f19b8982fdd91df7f5", + "_igui": null, + "_iplayer": "IPY_MODEL_fbde0cad197a445caf7a3e6bdde47bb8", + "_ngl_color_dict": {}, + "_ngl_coordinate_resource": {}, + "_ngl_full_stage_parameters": { + "ambientColor": 14540253, + "ambientIntensity": 0.2, + "backgroundColor": "white", + "cameraEyeSep": 0.3, + "cameraFov": 40, + "cameraType": "perspective", + "clipDist": 10, + "clipFar": 100, + "clipMode": "scene", + "clipNear": 0, + "clipScale": "relative", + "fogFar": 100, + "fogNear": 50, + "hoverTimeout": 0, + "impostor": true, + "lightColor": 14540253, + "lightIntensity": 1, + "mousePreset": "default", + "panSpeed": 1, + "quality": "medium", + "rotateSpeed": 2, + "sampleLevel": 0, + "tooltip": true, + "workerDefault": true, + "zoomSpeed": 1.2 + }, + "_ngl_msg_archive": [ + { + "args": [ + { + "binary": false, + "data": "MODEL 0\nATOM 1 C1x UNK A 1 3.689 -1.557 0.129 1.00 0.00 C \nATOM 2 C2x UNK A 1 4.990 -0.950 -0.011 1.00 0.00 C \nATOM 3 C3x UNK A 1 5.121 0.409 0.258 1.00 0.00 C \nATOM 4 Cl1x UNK A 1 6.582 1.175 0.070 1.00 0.00 Cl \nATOM 5 C4x UNK A 1 4.026 1.191 0.647 1.00 0.00 C \nATOM 6 C5x UNK A 1 2.756 0.609 0.791 1.00 0.00 C \nATOM 7 C6x UNK A 1 2.545 -0.782 0.515 1.00 0.00 C \nATOM 8 C7x UNK A 1 1.170 -1.396 0.665 1.00 0.00 C \nATOM 9 O1x UNK A 1 1.045 -2.607 0.585 1.00 0.00 O \nATOM 10 C8x UNK A 1 -0.095 -0.572 1.081 1.00 0.00 C \nATOM 11 S1x UNK A 1 -0.802 0.409 -0.366 1.00 0.00 S \nATOM 12 C9x UNK A 1 -2.502 0.502 0.130 1.00 0.00 C \nATOM 13 C10x UNK A 1 -3.063 1.772 0.341 1.00 0.00 C \nATOM 14 O2x UNK A 1 -4.415 1.914 0.632 1.00 0.00 O \nATOM 15 C11x UNK A 1 -5.144 0.694 1.000 1.00 0.00 C \nATOM 16 F1x UNK A 1 -4.821 0.302 2.294 1.00 0.00 F \nATOM 17 F2x UNK A 1 -6.491 0.810 1.067 1.00 0.00 F \nATOM 18 C12x UNK A 1 -4.731 -0.475 -0.039 1.00 0.00 C \nATOM 19 C13x UNK A 1 -3.282 -0.764 0.181 1.00 0.00 C \nATOM 20 H1x UNK A 1 3.498 -2.615 0.008 1.00 0.00 H \nATOM 21 H2x UNK A 1 5.842 -1.518 -0.361 1.00 0.00 H \nATOM 22 H3x UNK A 1 4.199 2.246 0.810 1.00 0.00 H \nATOM 23 H4x UNK A 1 1.956 1.272 1.091 1.00 0.00 H \nATOM 24 H5x UNK A 1 -0.858 -1.231 1.496 1.00 0.00 H \nATOM 25 H6x UNK A 1 0.188 0.126 1.869 1.00 0.00 H \nATOM 26 H7x UNK A 1 -2.444 2.654 0.245 1.00 0.00 H \nATOM 27 H8x UNK A 1 -4.877 -0.157 -1.072 1.00 0.00 H \nATOM 28 H9x UNK A 1 -5.338 -1.339 0.231 1.00 0.00 H \nATOM 29 H10x UNK A 1 -3.143 -1.232 1.156 1.00 0.00 H \nATOM 30 H11x UNK A 1 -2.995 -1.448 -0.618 1.00 0.00 H \nATOM 31 EP UNK A 1 -0.524 1.049 -0.422 1.00 0.00 VS \nATOM 32 EP UNK A 1 -0.740 0.074 -0.978 1.00 0.00 VS \nATOM 33 EP UNK A 1 6.934 1.359 0.025 1.00 0.00 VS \nATOM 34 EP UNK A 1 -4.729 0.189 2.666 1.00 0.00 VS \nATOM 35 EP UNK A 1 -6.889 0.844 1.086 1.00 0.00 VS \nTER 36 UNK A 1\nENDMDL\nEND\n", + "type": "blob" + } + ], + "kwargs": { + "defaultRepresentation": true, + "ext": "pdb", + "name": "nglview.adaptor.MDTrajTrajectory" + }, + "methodName": "loadFile", + "reconstruc_color_scheme": false, + "target": "Stage", + "type": "call_method" + } + ], + "_ngl_original_stage_parameters": { + "ambientColor": 14540253, + "ambientIntensity": 0.2, + "backgroundColor": "white", + "cameraEyeSep": 0.3, + "cameraFov": 40, + "cameraType": "perspective", + "clipDist": 10, + "clipFar": 100, + "clipMode": "scene", + "clipNear": 0, + "clipScale": "relative", + "fogFar": 100, + "fogNear": 50, + "hoverTimeout": 0, + "impostor": true, + "lightColor": 14540253, + "lightIntensity": 1, + "mousePreset": "default", + "panSpeed": 1, + "quality": "medium", + "rotateSpeed": 2, + "sampleLevel": 0, + "tooltip": true, + "workerDefault": true, + "zoomSpeed": 1.2 + }, + "_ngl_repr_dict": { + "0": { + "0": { + "params": { + "aspectRatio": 1.5, + "assembly": "default", + "bondScale": 0.3, + "bondSpacing": 0.75, + "clipCenter": { + "x": 0, + "y": 0, + "z": 0 + }, + "clipNear": 0, + "clipRadius": 0, + "colorMode": "hcl", + "colorReverse": false, + "colorScale": "", + "colorScheme": "element", + "colorValue": 9474192, + "cylinderOnly": false, + "defaultAssembly": "", + "depthWrite": true, + "diffuse": 16777215, + "diffuseInterior": false, + "disableImpostor": false, + "disablePicking": false, + "flatShaded": false, + "interiorColor": 2236962, + "interiorDarkening": 0, + "lazy": false, + "lineOnly": false, + "linewidth": 2, + "matrix": { + "elements": [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ] + }, + "metalness": 0, + "multipleBond": "off", + "opacity": 1, + "openEnded": true, + "quality": "high", + "radialSegments": 20, + "radiusData": {}, + "radiusScale": 2, + "radiusSize": 0.15, + "radiusType": "size", + "roughness": 0.4, + "sele": "", + "side": "double", + "sphereDetail": 2, + "useInteriorColor": true, + "visible": true, + "wireframe": false + }, + "type": "ball+stick" + } + } + }, + "_ngl_serialize": false, + "_ngl_version": "2.0.0-dev.39", + "_ngl_view_id": [ + "5DEA8536-9354-4E95-87BC-7B464C6F97CD" + ], + "_player_dict": {}, + "_scene_position": {}, + "_scene_rotation": {}, + "_synced_model_ids": [], + "_synced_repr_model_ids": [], + "_view_height": "", + "_view_width": "", + "background": "white", + "frame": 0, + "gui_style": null, + "layout": "IPY_MODEL_61e8baf3309e4cfe9d034a6d16a45141", + "max_frame": 99, + "n_components": 1, + "picked": {} } }, - "50de0bda7ad141f3b0b30ac2d2cd8d67": { + "470a13a62ae94fe6876648cb0718de02": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ButtonStyleModel", "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "2.0.0", - "_model_name": "ButtonStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "StyleView", - "button_color": null, "font_family": null, "font_size": null, "font_style": null, @@ -1037,499 +1090,152 @@ "text_decoration": null } }, - "52395ce86bef4c4dab586541deaff00e": { + "579a70813e5c4f469e3895c214a4be01": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_c149773df8aa4d51913cef381ff3d75d", + "value" + ], + "target": [ + "IPY_MODEL_cf5027519ac842ab927502a5f754a23e", + "value" + ] + } + }, + "5d0aae78d87c4d8caf5fa2b8403683d7": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", + "state": {} + }, + "5ff950c555634284b45d0f00282be81a": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "61e8baf3309e4cfe9d034a6d16a45141": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "649f9110bf47447290dad258844a4d64": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "DescriptionStyleModel", "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null + "description_width": "" } }, - "5cb602a3f2fb43e696c71da7da547e81": { + "67a41f08b90446da832e228b2fc2cba5": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "7f4e1ebf5c0641b8b890abb69aea3289": { "model_module": "nglview-js-widgets", - "model_module_version": "3.0.6", + "model_module_version": "3.0.8", "model_name": "ColormakerRegistryModel", "state": { - "_dom_classes": [], - "_model_module": "nglview-js-widgets", - "_model_module_version": "3.0.6", - "_model_name": "ColormakerRegistryModel", "_msg_ar": [], "_msg_q": [], - "_ready": false, - "_view_count": null, - "_view_module": "nglview-js-widgets", - "_view_module_version": "3.0.6", - "_view_name": "ColormakerRegistryView", - "layout": "IPY_MODEL_dec46a0fe73a4254af94b43c8ab22c2f", - "tabbable": null, - "tooltip": null + "_ready": true, + "layout": "IPY_MODEL_67a41f08b90446da832e228b2fc2cba5" } }, - "605df151435340968b2989568de61243": { - "model_module": "@jupyter-widgets/base", + "92dae8121969453bac4ec3198e978515": { + "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", - "model_name": "LayoutModel", + "model_name": "ImageModel", "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null + "layout": "IPY_MODEL_c9158590735c49619e4a5801013c41da", + "width": "900.0" } }, - "65ab7667a7b4404799a5e306ee2b94e6": { + "ab680e26e79b40bfbc0d883a20f4f570": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "LinkModel", "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "2.0.0", - "_model_name": "LinkModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "2.0.0", - "_view_name": null, "source": [ - "IPY_MODEL_1dcae65675184788a8d70e2d16355467", + "IPY_MODEL_c149773df8aa4d51913cef381ff3d75d", "value" ], "target": [ - "IPY_MODEL_8bfb88914766458cbcd8c52c2696bd56", - "value" + "IPY_MODEL_2622bad435364326acbe4c1749101b81", + "frame" ] } }, - "8a89ce0846124930a983e1f0c1f85ef4": { - "model_module": "@jupyter-widgets/controls", + "bc560b7648a9427f90f0e66e84fca3ac": { + "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", - "model_name": "ButtonModel", + "model_name": "LayoutModel", "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "2.0.0", - "_model_name": "ButtonModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "2.0.0", - "_view_name": "ButtonView", - "button_style": "", - "description": "", - "disabled": false, - "icon": "compress", - "layout": "IPY_MODEL_9f9e6979eb064638adea00a01f09465e", - "style": "IPY_MODEL_50de0bda7ad141f3b0b30ac2d2cd8d67", - "tabbable": null, - "tooltip": null + "width": "34px" } }, - "8bfb88914766458cbcd8c52c2696bd56": { + "c149773df8aa4d51913cef381ff3d75d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", - "model_name": "IntSliderModel", + "model_name": "PlayModel", "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "2.0.0", - "_model_name": "IntSliderModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "2.0.0", - "_view_name": "IntSliderView", - "behavior": "drag-tap", - "continuous_update": true, - "description": "", - "description_allow_html": false, - "disabled": false, - "layout": "IPY_MODEL_52395ce86bef4c4dab586541deaff00e", + "layout": "IPY_MODEL_1096f027696443959b04153bab452614", "max": 99, - "min": 0, - "orientation": "horizontal", - "readout": true, - "readout_format": "d", - "step": 1, - "style": "IPY_MODEL_0d666e64e7ea4fee8001d81f6b379758", - "tabbable": null, - "tooltip": null, - "value": 0 + "style": "IPY_MODEL_649f9110bf47447290dad258844a4d64" } }, - "9f9e6979eb064638adea00a01f09465e": { + "c9158590735c49619e4a5801013c41da": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": "34px" - } + "state": {} }, - "bc4124ab778f45fb91bb97aa827fb096": { + "cf5027519ac842ab927502a5f754a23e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "2.0.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "bf858796484549ec859670b4a29d0916": { - "model_module": "nglview-js-widgets", - "model_module_version": "3.0.6", - "model_name": "NGLModel", + "model_name": "IntSliderModel", "state": { - "_camera_orientation": [], - "_camera_str": "orthographic", - "_dom_classes": [], - "_gui_theme": null, - "_ibtn_fullscreen": "IPY_MODEL_8a89ce0846124930a983e1f0c1f85ef4", - "_igui": null, - "_iplayer": "IPY_MODEL_392150b3500f4c568c20b5d9fdec8d94", - "_model_module": "nglview-js-widgets", - "_model_module_version": "3.0.6", - "_model_name": "NGLModel", - "_ngl_color_dict": {}, - "_ngl_coordinate_resource": {}, - "_ngl_full_stage_parameters": {}, - "_ngl_msg_archive": [ - { - "args": [ - { - "binary": false, - "data": "MODEL 0\nATOM 1 C1x UNK A 1 4.106 -1.363 -0.248 1.00 0.00 C \nATOM 2 C2x UNK A 1 5.390 -0.794 -0.341 1.00 0.00 C \nATOM 3 C3x UNK A 1 5.625 0.452 0.260 1.00 0.00 C \nATOM 4 Cl1x UNK A 1 7.269 1.076 0.192 1.00 0.00 Cl \nATOM 5 C4x UNK A 1 4.584 1.100 0.953 1.00 0.00 C \nATOM 6 C5x UNK A 1 3.334 0.516 1.097 1.00 0.00 C \nATOM 7 C6x UNK A 1 3.046 -0.694 0.364 1.00 0.00 C \nATOM 8 C7x UNK A 1 1.708 -1.248 0.307 1.00 0.00 C \nATOM 9 O1x UNK A 1 1.529 -2.413 -0.049 1.00 0.00 O \nATOM 10 C8x UNK A 1 0.444 -0.635 0.867 1.00 0.00 C \nATOM 11 S1x UNK A 1 -0.334 0.646 -0.282 1.00 0.00 S \nATOM 12 C9x UNK A 1 -2.054 0.541 0.102 1.00 0.00 C \nATOM 13 C10x UNK A 1 -2.661 1.367 0.989 1.00 0.00 C \nATOM 14 O2x UNK A 1 -3.988 1.392 1.292 1.00 0.00 O \nATOM 15 C11x UNK A 1 -4.754 0.264 0.821 1.00 0.00 C \nATOM 16 F1x UNK A 1 -4.702 -0.764 1.731 1.00 0.00 F \nATOM 17 F2x UNK A 1 -6.021 0.686 0.717 1.00 0.00 F \nATOM 18 C12x UNK A 1 -4.325 -0.215 -0.642 1.00 0.00 C \nATOM 19 C13x UNK A 1 -2.848 -0.478 -0.651 1.00 0.00 C \nATOM 20 H1x UNK A 1 3.966 -2.267 -0.832 1.00 0.00 H \nATOM 21 H2x UNK A 1 6.224 -1.229 -0.882 1.00 0.00 H \nATOM 22 H3x UNK A 1 4.763 2.038 1.469 1.00 0.00 H \nATOM 23 H4x UNK A 1 2.568 1.052 1.649 1.00 0.00 H \nATOM 24 H5x UNK A 1 -0.310 -1.400 1.076 1.00 0.00 H \nATOM 25 H6x UNK A 1 0.674 -0.157 1.824 1.00 0.00 H \nATOM 26 H7x UNK A 1 -2.008 2.149 1.363 1.00 0.00 H \nATOM 27 H8x UNK A 1 -4.612 0.545 -1.374 1.00 0.00 H \nATOM 28 H9x UNK A 1 -4.862 -1.137 -0.885 1.00 0.00 H \nATOM 29 H10x UNK A 1 -2.693 -1.500 -0.293 1.00 0.00 H \nATOM 30 H11x UNK A 1 -2.485 -0.479 -1.683 1.00 0.00 H \nATOM 31 EP UNK A 1 -0.100 1.293 -0.153 1.00 0.00 VS \nATOM 32 EP UNK A 1 -0.231 0.492 -0.957 1.00 0.00 VS \nATOM 33 EP UNK A 1 7.643 1.218 0.176 1.00 0.00 VS \nATOM 34 EP UNK A 1 -4.687 -1.064 1.995 1.00 0.00 VS \nATOM 35 EP UNK A 1 -6.400 0.812 0.687 1.00 0.00 VS \nTER 36 UNK A 1\nENDMDL\nEND\n", - "type": "blob" - } - ], - "kwargs": { - "defaultRepresentation": true, - "ext": "pdb", - "name": "nglview.adaptor.MDTrajTrajectory" - }, - "methodName": "loadFile", - "reconstruc_color_scheme": false, - "target": "Stage", - "type": "call_method" - } - ], - "_ngl_original_stage_parameters": {}, - "_ngl_repr_dict": {}, - "_ngl_serialize": false, - "_ngl_version": "", - "_ngl_view_id": [], - "_player_dict": {}, - "_scene_position": {}, - "_scene_rotation": {}, - "_synced_model_ids": [], - "_synced_repr_model_ids": [], - "_view_count": null, - "_view_height": "", - "_view_module": "nglview-js-widgets", - "_view_module_version": "3.0.6", - "_view_name": "NGLView", - "_view_width": "", - "background": "white", - "frame": 0, - "gui_style": null, - "layout": "IPY_MODEL_fb8733ef7f884f0ca4a76c455cad5879", - "max_frame": 99, - "n_components": 0, - "picked": {}, - "tabbable": null, - "tooltip": null + "behavior": "drag-tap", + "layout": "IPY_MODEL_5ff950c555634284b45d0f00282be81a", + "max": 99, + "style": "IPY_MODEL_fa483bf5fca74594a8660ae27966979a" } }, - "dcf9869dd5fa4f348c8011bd800bc293": { - "model_module": "@jupyter-widgets/base", + "e525a255582444f19b8982fdd91df7f5": { + "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", - "model_name": "LayoutModel", + "model_name": "ButtonModel", "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null + "icon": "compress", + "layout": "IPY_MODEL_bc560b7648a9427f90f0e66e84fca3ac", + "style": "IPY_MODEL_470a13a62ae94fe6876648cb0718de02", + "tooltip": null } }, - "dec46a0fe73a4254af94b43c8ab22c2f": { - "model_module": "@jupyter-widgets/base", + "fa483bf5fca74594a8660ae27966979a": { + "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", - "model_name": "LayoutModel", + "model_name": "SliderStyleModel", "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null + "description_width": "" } }, - "fb8733ef7f884f0ca4a76c455cad5879": { - "model_module": "@jupyter-widgets/base", + "fbde0cad197a445caf7a3e6bdde47bb8": { + "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", - "model_name": "LayoutModel", + "model_name": "HBoxModel", "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null + "children": [ + "IPY_MODEL_c149773df8aa4d51913cef381ff3d75d", + "IPY_MODEL_cf5027519ac842ab927502a5f754a23e" + ], + "layout": "IPY_MODEL_5d0aae78d87c4d8caf5fa2b8403683d7" } } },