{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# freud.box.Box\n", "\n", "In this notebook, we demonstrate the basic features of the `Box` class, including wrapping particles back into the box under periodic boundary conditions.\n", "For more information, see the [introduction to Periodic Boundary Conditions](https://freud.readthedocs.io/en/stable/tutorial/periodic.html) and the `freud.box` [documentation](https://freud.readthedocs.io/en/stable/box.html)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating a Box object\n", "\n", "Boxes may be constructed explicitly using all arguments.\n", "Such construction is useful when performing *ad hoc* analyses involving custom boxes.\n", "In general, boxes are assumed to be 3D and [orthorhombic](https://en.wikipedia.org/wiki/Orthorhombic_crystal_system) unless otherwise specified." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import freud.box\n", "\n", "# All of the below examples are valid boxes.\n", "box = freud.box.Box(Lx=5, Ly=6, Lz=7, xy=0.5, xz=0.6, yz=0.7, is2D=False)\n", "box = freud.box.Box(1, 3, 2, 0.3, 0.9)\n", "box = freud.box.Box(5, 6, 7)\n", "box = freud.box.Box(5, 6, is2D=True)\n", "box = freud.box.Box(5, 6, xy=0.5, is2D=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## From another Box object\n", "\n", "The simplest case is simply constructing one freud box from another.\n", "\n", "**Note that all forms of creating boxes aside from the explicit method above use methods defined within the Box class rather than attempting to overload the constructor itself.**" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The original box: \n", "\tfreud.box.Box(Lx=1.0, Ly=2.0, Lz=3.0, xy=0.0, xz=0.0, yz=0.0, is2D=False)\n", "The copied box: \n", "\tfreud.box.Box(Lx=1.0, Ly=2.0, Lz=3.0, xy=0.0, xz=0.0, yz=0.0, is2D=False)\n", "\n", "The original box is modified: \n", "\tfreud.box.Box(Lx=5.0, Ly=2.0, Lz=3.0, xy=0.0, xz=0.0, yz=0.0, is2D=False)\n", "The copied box is not: \n", "\tfreud.box.Box(Lx=1.0, Ly=2.0, Lz=3.0, xy=0.0, xz=0.0, yz=0.0, is2D=False)\n", "\n", "The new copy: \n", "\tfreud.box.Box(Lx=1.0, Ly=2.0, Lz=3.0, xy=0.0, xz=0.0, yz=0.0, is2D=False)\n", "The new copy after the original is modified: \n", "\tfreud.box.Box(Lx=2.0, Ly=2.0, Lz=3.0, xy=0.0, xz=0.0, yz=0.0, is2D=False)\n", "The modified original box: \n", "\tfreud.box.Box(Lx=2.0, Ly=2.0, Lz=3.0, xy=0.0, xz=0.0, yz=0.0, is2D=False)\n" ] } ], "source": [ "box = freud.box.Box(1, 2, 3)\n", "box2 = freud.box.Box.from_box(box)\n", "print(f\"The original box: \\n\\t{box}\")\n", "print(f\"The copied box: \\n\\t{box2}\\n\")\n", "\n", "# Boxes are always copied by value, not by reference\n", "box.Lx = 5\n", "print(f\"The original box is modified: \\n\\t{box}\")\n", "print(f\"The copied box is not: \\n\\t{box2}\\n\")\n", "\n", "# Note, however, that box assignment creates a new object that\n", "# still points to the original box object, so modifications to\n", "# one are visible on the other.\n", "box3 = box2\n", "print(f\"The new copy: \\n\\t{box3}\")\n", "box2.Lx = 2\n", "print(f\"The new copy after the original is modified: \\n\\t{box3}\")\n", "print(f\"The modified original box: \\n\\t{box2}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## From a matrix\n", "\n", "A box can be constructed directly from the box matrix representation described above using the `Box.from_matrix` method." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "This is a 3D box from a matrix: \n", "\tfreud.box.Box(Lx=1.0, Ly=1.0, Lz=0.5, xy=1.0, xz=0.0, yz=1.0, is2D=False)\n", "\n", "This is a 2D box from a matrix: \n", "\tfreud.box.Box(Lx=1.0, Ly=1.0, Lz=0.0, xy=0.0, xz=0.0, yz=0.0, is2D=True)\n", "\n", "The box matrix was automatically detected: \n", "\tfreud.box.Box(Lx=1.0, Ly=1.0, Lz=0.5, xy=1.0, xz=0.0, yz=1.0, is2D=False)\n", "\n", "Using a 3x3 numpy array: \n", "\tfreud.box.Box(Lx=1.0, Ly=1.0, Lz=0.5, xy=1.0, xz=0.0, yz=1.0, is2D=False)\n" ] } ], "source": [ "# Matrix representation. Note that the box vectors must represent\n", "# a right-handed coordinate system! This translates to requiring\n", "# that the matrix be upper triangular.\n", "box = freud.box.Box.from_matrix([[1, 1, 0], [0, 1, 0.5], [0, 0, 0.5]])\n", "print(f\"This is a 3D box from a matrix: \\n\\t{box}\\n\")\n", "\n", "# 2D box\n", "box = freud.box.Box.from_matrix([[1, 0, 0], [0, 1, 0], [0, 0, 0]])\n", "print(f\"This is a 2D box from a matrix: \\n\\t{box}\\n\")\n", "\n", "# Automatic matrix detection using from_box\n", "box = freud.box.Box.from_box([[1, 1, 0], [0, 1, 0.5], [0, 0, 0.5]])\n", "print(f\"The box matrix was automatically detected: \\n\\t{box}\\n\")\n", "\n", "# Boxes can be numpy arrays as well\n", "import numpy as np\n", "\n", "box = freud.box.Box.from_box(np.array([[1, 1, 0], [0, 1, 0.5], [0, 0, 0.5]]))\n", "print(f\"Using a 3x3 numpy array: \\n\\t{box}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## From a namedtuple or dict\n", "\n", "A box can be also be constructed from any object that provides an attribute for `Lx`, `Ly`, `Lz`, `xy`, `xz`, and `yz` (or some subset), such as a `namedtuple`.\n", "This method is suitable for passing in box objects constructed by some other program, for example." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Box from named tuple: \n", "\tfreud.box.Box(Lx=5.0, Ly=3.0, Lz=2.0, xy=0.0, xz=0.0, yz=0.0, is2D=False)\n", "\n", "2D Box from named tuple: \n", "\tfreud.box.Box(Lx=5.0, Ly=3.0, Lz=0.0, xy=0.0, xz=0.0, yz=0.0, is2D=True)\n" ] } ], "source": [ "from collections import namedtuple\n", "\n", "MyBox = namedtuple(\"mybox\", [\"Lx\", \"Ly\", \"Lz\", \"xy\", \"xz\", \"yz\"])\n", "\n", "box = freud.box.Box.from_box(MyBox(Lx=5, Ly=3, Lz=2, xy=0, xz=0, yz=0))\n", "print(f\"Box from named tuple: \\n\\t{box}\\n\")\n", "\n", "box = freud.box.Box.from_box(MyBox(Lx=5, Ly=3, Lz=0, xy=0, xz=0, yz=0))\n", "print(f\"2D Box from named tuple: \\n\\t{box}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Similarly, construction is also possible using any object that supports key-value indexing, such as a dict." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Box from dict: \n", "\tfreud.box.Box(Lx=5.0, Ly=3.0, Lz=2.0, xy=0.0, xz=0.0, yz=0.0, is2D=False)\n" ] } ], "source": [ "box = freud.box.Box.from_box(dict(Lx=5, Ly=3, Lz=2))\n", "print(f\"Box from dict: \\n\\t{box}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## From a list\n", "\n", "Finally, boxes can be constructed from any simple iterable that provides the elements in the correct order." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Box from tuple: \n", "\tfreud.box.Box(Lx=5.0, Ly=6.0, Lz=7.0, xy=0.5, xz=0.0, yz=0.5, is2D=False)\n", "\n", "2D Box from list: \n", "\tfreud.box.Box(Lx=5.0, Ly=6.0, Lz=0.0, xy=0.0, xz=0.0, yz=0.0, is2D=True)\n" ] } ], "source": [ "box = freud.box.Box.from_box((5, 6, 7, 0.5, 0, 0.5))\n", "print(f\"Box from tuple: \\n\\t{box}\\n\")\n", "\n", "box = freud.box.Box.from_box([5, 6])\n", "print(f\"2D Box from list: \\n\\t{box}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Convenience APIs\n", "\n", "We also provide convenience constructors for common geometries, namely square (2D) and cubic (3D) boxes." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Cubic Box: \n", "\tfreud.box.Box(Lx=5.0, Ly=5.0, Lz=5.0, xy=0.0, xz=0.0, yz=0.0, is2D=False)\n", "\n", "Square Box: \n", "\tfreud.box.Box(Lx=5.0, Ly=5.0, Lz=0.0, xy=0.0, xz=0.0, yz=0.0, is2D=True)\n" ] } ], "source": [ "cube_box = freud.box.Box.cube(L=5)\n", "print(f\"Cubic Box: \\n\\t{cube_box}\\n\")\n", "\n", "square_box = freud.box.Box.square(L=5)\n", "print(f\"Square Box: \\n\\t{square_box}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Export\n", "\n", "If you want to export or display the box, you can export box objects into their matrix or dictionary representations, which provide completely specified descriptions of the box." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[5., 0., 0.],\n", " [0., 5., 0.],\n", " [0., 0., 5.]])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cube_box = freud.box.Box.cube(L=5)\n", "cube_box.to_matrix()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'Lx': 5.0,\n", " 'Ly': 5.0,\n", " 'Lz': 5.0,\n", " 'xy': 0.0,\n", " 'xz': 0.0,\n", " 'yz': 0.0,\n", " 'dimensions': 3}" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cube_box.to_dict()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Using boxes\n", "\n", "Given a freud box object, you can query it for all its attributes." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "L_x = 10.0, L_y = 10.0, L_z = 10.0, xy = 0.0, xz = 0.0, yz = 0.0\n", "The length vector: [10. 10. 10.]\n", "The inverse length vector: (0.10, 0.10, 0.10)\n" ] } ], "source": [ "box = freud.box.Box.from_matrix([[10, 0, 0], [0, 10, 0], [0, 0, 10]])\n", "print(\n", " \"L_x = {}, L_y = {}, L_z = {}, xy = {}, xz = {}, yz = {}\".format(\n", " box.Lx, box.Ly, box.Lz, box.xy, box.xz, box.yz\n", " )\n", ")\n", "\n", "print(f\"The length vector: {box.L}\")\n", "print(\n", " \"The inverse length vector: ({:1.2f}, {:1.2f}, {:1.2f})\".format(\n", " *(L for L in box.L_inv)\n", " )\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Boxes also support converting between fractional and absolute coordinates.\n", "\n", "**Note that the origin in real coordinates is defined at the center of the box.** This means the fractional coordinate range $[0, 1]$ maps onto $[-L/2, L/2]$, not $[0, L]$." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[-5. -5. -5.]\n", " [ 0. 0. 0.]\n", " [ 3. -2. 5.]]\n", "\n", "[[0. 0. 0. ]\n", " [0.5 0.5 0.5]\n", " [0.8 0.3 1. ]]\n" ] } ], "source": [ "# Convert from fractional to absolute coordinates.\n", "print(box.make_absolute([[0, 0, 0], [0.5, 0.5, 0.5], [0.8, 0.3, 1]]))\n", "print()\n", "\n", "# Convert from fractional to absolute coordinates and back.\n", "print(\n", " box.make_fractional(box.make_absolute([[0, 0, 0], [0.5, 0.5, 0.5], [0.8, 0.3, 1]]))\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally (and most critically for enforcing periodicity), boxes support wrapping vectors from outside the box into the box.\n", "The concept of periodicity and box wrapping is most easily demonstrated visually." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Construct the box and get points for plotting\n", "Lx = Ly = 10\n", "xy = 0.5\n", "box = freud.box.Box.from_matrix([[Lx, xy * Ly, 0], [0, Ly, 0], [0, 0, 0]])\n", "box.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With periodic boundary conditions, what this actually represents is an infinite set of these boxes tiling space.\n", "For example, you can locally picture this box as surrounding by a set of identical boxes." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "\n", "fig, ax = plt.subplots(figsize=(9, 6))\n", "box.plot(ax=ax)\n", "for image in [[-1, 0, 0], [1, 0, 0], [0, -1, 0], [0, 1, 0]]:\n", " box.plot(ax=ax, image=image, linestyle=\"dashed\", color=\"gray\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Any particles in the original box will also therefore be seen as existing in all the neighboring boxes." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "np.random.seed(0)\n", "fractional_coords = np.zeros((5, 3))\n", "fractional_coords[:, :2] = np.random.rand(5, 2)\n", "particles = box.make_absolute(fractional_coords)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(9, 6))\n", "\n", "# Plot the points in the original box.\n", "box.plot(ax=ax)\n", "ax.scatter(particles[:, 0], particles[:, 1])\n", "\n", "# Plot particles in each of the periodic boxes.\n", "for image in [[-1, 0, 0], [1, 0, 0], [0, -1, 0], [0, 1, 0]]:\n", " box.plot(ax=ax, image=image, linestyle=\"dashed\", color=\"gray\")\n", " particle_images = box.unwrap(particles, image)\n", " ax.scatter(particle_images[:, 0], particle_images[:, 1])\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Box wrapping takes points in the periodic images of a box, and brings them back into the original box.\n", "In this context, that means that if we apply wrap to each of the sets of particles plotted above, they should all overlap." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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2LG0bt26wTc2Ett+85vfqPodP6I2Z+/evbv6+4YSLIltW7Zs4X//938Pe76sOqc09nxZXl5+xPNlQ+M1l1U0dL6s+deWhs6X7dq1q/6+ofNlzQJSQ+fLqtggdL6sm6C3bPlNSrdjx456CXpKSkr199u2bcPnq70KLD09vfr7rVu3VucmVarmY2ttg7+7Dz74oPoNiHw7U/MF9ZIx5tfA/3zL3c601r7bwM+OAj4Ahltr8470ACNGjLANVaElPvn9/lqTkojLjDEfW2tHeB0HxPacba0lGAyq57+IeOpIc3YsZSaPAs98y302H2b7CiAAHAcccTKXxKLkW6TZxOycbYxR8i0iMS1mshNr7Q5gx7fesWGDgRbAV00XkYiIHI7mbBGRyMVMAn60jDH9gR8ArxCa/E8Efg/kA+97GJqIiNShOVtEpD7nEnCgEpgI3Aq0A74E/k3oivrAkX5QRESiTnO2iEgdziXg1tovgfFexyEiIt9Oc7aISH1OfhS9iIiIiIirlICLiIiIiESREnARERERkShSAi4iIiIiEkVKwEVEREREokgJuIiIiIhIFCkBFxERERGJIiXgIiIiIiJRpARcRERERCSKlICLiIiIiESREnARERERkShSAi4iIiIiEkVKwEVEREREokgJuIiIiIhIFCkBFxERERGJIiXgIiIiIiJRpARcRERERCSKlICLiIiIiESREnARERERkShSAi4iIiIiEkVKwEVEREREokgJuIiIiIhIFCkBFxERERGJIiXgIiIiIiJRpARcRERERCSKlICLiIiIiESREnARERERkShSAi4iIiIiEkVKwEVEREREokgJuIiIiIhIFCkBFxERERGJIiXgIiIiIiJRpARcRERERCSKlICLiIiIiESREnARERERkShSAi4iIiIiEkVKwEVEREREoshYa72OIaqMMduBIq/j+BadgB1eB9GM4nn/tG/ucmH/jrHWdvY6iGjSnB0T4nn/tG/ucmH/DjtnJ1wC7gJjzApr7Qiv42gu8bx/2jd3xfv+SfOJ9/878bx/2jd3ub5/WoIiIiIiIhJFSsBFRERERKJICXhs+qvXATSzeN4/7Zu74n3/pPnE+/+deN4/7Zu7nN4/rQEXEREREYkiVcBFRERERKJICbiIiIiISBQpAY8hxpjrjTHvGGNKjTHWGNO3gft8cWis5tes6Ecb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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(2, 2, figsize=(12, 8))\n", "images = [[-1, 0, 0], [1, 0, 0], [0, -1, 0], [0, 1, 0]]\n", "\n", "# Plot particles in each of the periodic boxes.\n", "for ax, image in zip(axes.flatten(), images):\n", " box.plot(ax=ax)\n", " box.plot(ax=ax, image=image, linestyle=\"dashed\", color=\"gray\")\n", " particle_images = box.unwrap(particles, image)\n", " ax.scatter(particle_images[:, 0], particle_images[:, 1], label=\"Images\")\n", "\n", " wrapped_particle_images = box.wrap(particle_images)\n", " ax.scatter(\n", " wrapped_particle_images[:, 0], wrapped_particle_images[:, 1], label=\"Wrapped\"\n", " )\n", "\n", " ax.tick_params(axis=\"both\", which=\"both\", labelsize=14)\n", " ax.legend()\n", "\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.3" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }