diff --git a/tutorials/1-getting-started/DTGS171A_custom_scatterers.ipynb b/tutorials/1-getting-started/DTGS171A_custom_scatterers.ipynb new file mode 100644 index 000000000..6176f8d02 --- /dev/null +++ b/tutorials/1-getting-started/DTGS171A_custom_scatterers.ipynb @@ -0,0 +1,839 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "9f061bf4", + "metadata": {}, + "source": [ + "# Creating Custom Scatterers\n", + "\n", + "\"Open" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e7fb75d7", + "metadata": {}, + "outputs": [], + "source": [ + "# !pip install deeptrack # Uncomment if running on Colab/Kaggle." + ] + }, + { + "cell_type": "markdown", + "id": "2a3083b8", + "metadata": {}, + "source": [ + "DeepTrack2 allows you to simulate microscopy images be generating scatterers, which are abstract representations of objects that scatter light. These scatterers can then be passed through an optical model to produce images.\n", + "\n", + "In this tutorial, you will learn how scatterers are defined in DeepTrack, how to create a custom scatterer of a specific shape. The examples are implemented in NumPy, but the same approach can of course be applied analogously in PyTorch." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "c830d4a2", + "metadata": {}, + "outputs": [], + "source": [ + "import deeptrack as dt\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "id": "c2df8fec", + "metadata": {}, + "source": [ + "## 1. Understanding Scatterers in DeepTrack\n", + "Scatterers are defined in three-dimensional voxel space. A voxel is a small cube in 3D space, analogous to a pixel in a 2D image. Each voxel has a value representing whether the scatterer occupies it, either being `True` or `False`." + ] + }, + { + "cell_type": "markdown", + "id": "b0bf12f4", + "metadata": {}, + "source": [ + "### 1.1 Creating a 3D Scatterer\n", + "\n", + "To create a scatterer, you first generate a three-dimensional grid of voxel coordinates. Then you evaluate a function at each voxel to determine whether it belongs to the scatterer, producing a boolean mask.\n", + "\n", + "For example, a spherical scatterer can be defined by the function $(X^2 + Y^2 + Z^2) < R^2$. Here, $X$, $Y$, and $Z$ are the voxel coordinates, and $R$ is the sphere radius. Using this function as a mask will assign `True` to the voxels inside the sphere and `False` to voxels outside." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "5f28e558", + "metadata": {}, + "outputs": [], + "source": [ + "# Set up the grid\n", + "x = np.arange(-12, 12)\n", + "y = np.arange(-12, 12)\n", + "z = np.arange(-12, 12)\n", + "Y, X, Z = np.meshgrid(y, x, z)\n", + "\n", + "# Set the radius of the sphere\n", + "radius = 11\n", + "\n", + "# Create the mask for the sphere\n", + "mask = (X**2 + Y**2 + Z**2) < radius**2" + ] + }, + { + "cell_type": "markdown", + "id": "3615c1b5", + "metadata": {}, + "source": [ + "Here, `mask` is a 3D boolean array representing the scatterer. You can visualize it using `ax.voxels`:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "51a3cf76", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZ0AAAGrCAYAAAAb/EoSAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnQeYXWXx/98t2fRKSIBAIPSSQOg1Cb13kKJIUSmKohQVRUCEn4KAIAjSRBSVXqWHQGipJPTeawgQEkhPdvf+n+/hM/kPr+e23bubGzjzPIcNu/ee8p5z5jvlOzM1uVwuFzLJJJNMMsmkHaS2PQ6SSSaZZJJJJpIMdDLJJJNMMmk3yUAnk0wyySSTdpMMdDLJJJNMMmk3yUAnk0wyySSTdpMMdDLJJJNMMmk3yUAnk0wyySSTdpMMdDLJJJNMMmk3yUAnk0wyySSTdpMMdDIJNTU14be//W1YUuTtt99Ozvm8885r0+M0NjaGX/ziF2GFFVYItbW1Ye+99y57H9dcc01yrk8++WSbnGMmmSxpkoFOG8uee+4ZunTpEmbOnJn3M9/5zndCQ0NDmDZtWrueWyaF5eqrrw7nnntu2H///cM//vGPcPzxx+f97KWXXpoAzDdFXnzxxcRQkQHwTV+LTMqTDHTaWAQoc+fODbfddlvq3+fMmRPuuOOOsPPOO4elllqq3c8vk/zy0EMPhQEDBoQLLrggfPe73w0jRozI+9lvIuicccYZGehkUrZkoNMOnk737t3Df/7zn9S/C3Bmz56dgFMm1SUff/xx6NWr1+I+jUwIdS5YsKBV+9B7lsnilwx02lg6d+4c9t133zBq1KhEicUiMBIoCZwkb775ZvjWt74V+vTpk4TlNttss3D33Xcv+vxLL72U7PPQQw/9yn4ef/zxUFdXF375y18u+t2MGTPCz372syQn0bFjx7DqqquGc845JzQ3N5d9HaNHj05yEzfeeGNi4coD0Hkr9PT555+H+fPnJ8fq169f6NatWzjiiCOS33n5+9//HrbddtvkMzqftddeO/z1r3/9n2Mp/7HTTjuFvn37Jtc6aNCg8L3vfa/g+alZ+lFHHZWEKW+99daiyufEE09ctC5rrLFGkh+yhuuWM3r44YfDCy+8kPxbm9YgTVZaaaXkc4888siiz2699dZf+YzW4oQTTghLL7106Nq1a9hnn33CJ5988j/7uvfee8OwYcOSz2h9d9ttt2TfxWThwoXJfVlttdVCp06dEq95q622CiNHjvzK515++eVwwAEHJOehtdW1n3LKKYv+/s4774Qf/ehHye/1d+1Hz6P3aOTF6HeSbbbZ5ivrU2wtSnkmfc7uwgsvDKusskryWXlXdg167vSO6Fo32mijcOedd6bm0nQeuh49c8svv3zRdcykHUSjDTJpW3nggQekzXIXX3zxV34/bdq0XIcOHXKHHnpo8v8fffRRrn///rnu3bvnTjnllNyf/vSn3HrrrZerra3N3XrrrYu+d+655yb7u+OOO5L/nzVrVm6VVVbJrb322rl58+Ylv5s9e3Zu3XXXzS211FK5X//617nLLrssOU5NTU3upz/96VfOQ/s6/fTTC17Dww8/nHxu6NChuc033zx30UUX5Y477rhkfwcddFDu29/+dm6XXXbJXXLJJbnvfve7yWfPOOOMr+xj4403zh1++OG5Cy64IFmLHXfcMfncX/7yl0WfmTp1aq5379651VdfPbnOK6+8MlmLtdZaa9Fn3nrrreR7+ruksbExubaOHTvm7rrrroLX0dzcnNt2222T8/7BD36QHHuPPfZI9vezn/1s0Xpee+21uTXXXDO3/PLLJ//WpvuTJrfddlvyOX3ePqt7Lvn73/+e7Hv99ddPjqvrPvHEE3N1dXW5Aw444Cv7+ec//5mc184775x87pxzzsmttNJKuV69eiXXXEh0j/XdI488Mlmz888/P3fwwQfnzj777EWfeeaZZ3I9evRInolf/epXucsvvzz3i1/8IjdkyJBFn7npppuSZ+60007LXXHFFcl+dT9WXHHF5JmSvPHGG8m913Xp7359Cq1Fqc+k3V89zyuvvHJyDXpm3nnnndzzzz+f69mzZ/I3rY/u3/Dhw5N9+HfE1l2fGzFiRLKefi0yWXySgU47iJTisssumyhrL3rp9GLcf//9yf9L6en/H3vssUWfmTlzZm7QoEGJ8mlqakp+p59bbbVVAlCffvpp7thjj83V19fnJk6cuOh7Z555Zq5r1665V1999SvHPPnkkxOF9+6777YIdAYPHpxbsGDBot9LsemFF+B40bVKUXmZM2fO/+x3p512ShSLiZSWjuOvJRYPOgsXLswdeOCBuc6dOy9ax0Jy++23J98966yzvvL7/fffP7mO119/fdHvpKzWWWedXCmiz+nzsZjy23777RPAMzn++OOT+zBjxoxF91ngItDwIkUuJRv/PhYBxW677VbwM1LOMmikvL3480q7R2PHjk2uQaDowUm/03NR6lqU+kza/RVAfvzxx1/57HbbbZeApBlXdv5bbLFFbrXVVvufddd7ovcvk+qRLLzWDqKw10EHHRTGjh37lTCFQmv9+/cP2223XfL/99xzT9hkk02SsIiJQlUKG+l7Fl4QfVfhg1mzZoVddtklSdz+6le/SsIMJjfddFMSpundu3f49NNPF23bb799aGpqCo8++miLrkVhvQ4dOiz6/0033TQJS8XhL/3+vffeS2LxJgrXmCgkp/NRcl4hRf2/xHIod911VxIyKiSK8SvMo89q7Xbcccei56/P6X4cd9xxX/m9wm26DoW32kJ0DxXuMdG90X1QOEuiMJhCTwcffPBX7pfOVWupUF8h0boprPXaa6+l/l2hPN1z3aeBAwd+5W/+vPw90vqLUakQmPY/efLk0Bop95ncb7/9kjCgyWeffZaQOxQeFBvUvq9zVDhW1/7BBx98ZR9HHnlksoaZVI9koNNOYkQBIxS8//774bHHHkvAyF4KKSDF0mNZa621Fv3dRHFuUVYnTpwY1llnnXDqqad+5Tt6Ae+7777kpfWbXnBJWn6pFIkVVs+ePZOfitHHv1ec3sBE8sQTTyTHV75CSkzn8+tf/zr5m31OICRlo/yEcjp77bVXkguK80OSP/zhD+H2228PN9988//kUPKJ1nC55ZZL8iXF1riSEq+bFK9k+vTpyU8DC+W84nv2wAMPFL1fv/vd7xLQWn311cOQIUPCz3/+8/Dss88u+ruAXTJ48OCC+xHT8rTTTluUc9E90Dlo3/5etkTKfSaVy/Py+uuvJ4aBnvV4H6effnpJ+8hk8Uv94j6Bb4psuOGGYc011wzXXXddomj1Uy9Qa1hrUkaSDz/8MLH2lllmmUV/k8LfYYcdkuLGNJFyaonksxrz/d6S82+88Ubi0WkN/vSnPyVKTUl/eR6iJFsiWVa3QGTcuHHhv//9b7j//vsT6/z8889PfifPz0TWrZTYH//4xwR0lFSuVim2Pnb911577Vfuo0l9feFXdfjw4ckaiw2p5+Kqq65K1vWyyy4LP/jBD0o+z5/85CcJyCvZv/nmmyfGg+6JjKOWEFC8lPtMeq/Lvi856aSTknufJvLKCu0jk8UvGei0owhgZKXJApXHI6bRxhtvvOjvK664YnjllVf+53ti69jfTaRMFJL5v//7v8TiP/rooxOF4z0hhd/MilzcIgCRtyKWkbf684WNxNrTpuvTWmntrr/++q8oUP39mGOOCbvvvnsSZlMtVDHlrDV88MEHk/CM93bS1rgc8SGqlojul0Qsq5beM7G5xBrUpnsvIJI3rDVbeeWVk888//zzBfchwD/ssMMSkDeZN29e4umUer35/tbaZ9KuQeHdanmuMylfsvBaO4p5NQpfPP300//j5ey6665hwoQJSe7H03uvuOKKhIoqirHkrbfeSsInCkPJaxK1VMr8n//856LvKe6t/chTiEUKxOda2tPSN8teonCNrGovCjf5z0iGDh2a/EwLsUn5CIzk8aiAs5g1rjVW/uAvf/nLV34vr0DKUjmylohChrFiLkdkuffo0SP8/ve/T81lpdGrvcTdLOQRyuq3NVMISiCkLgvvvvvuVz7r11v3KV7/iy++OFmz+Holadecby1a+0wKkOXRXn755WHKlCllr1Em1SGZp9OOovjyFltsscgjiUHn5JNPTsJuUnxKdMtyVfsVgcwtt9ySEAgsaa+wgdW4yMvR33/6058mSlg5C4GSgEhewOGHH56E9wRgzz33XGLNipigeH17iZL8CqftscceyfnK4r3yyisTReIViK5XxAjVscgylkeiz0khCzDSRD3RBF4iOehzUkr5RMdXbYlqU7QG6623XhKO0j1RSMk8jnJF66v7cdZZZyXKXtel/EypovPW9wWcG2ywQRLOElAIIFSnteWWW/4PUHqRQSKFrPPQc6NaJ93nH//4x4s+c9FFFyUkFe1fxAY9j1oD7V9GkETPi0J8CqtpnwIJeYZxtwwZAgIo1djIeFD+x2qw8q1FJZ7JSy65JLkG5a1EEpD3M3Xq1OQ8lSd95plnSl7zTBaTLG763DdNVMeiZd9kk01S/64aCNF3RZ/t1KlT8jlfe/LnP/85+f4tt9zyle+JbiqK6a677rrod6Lhqh5j1VVXzTU0NOT69u2bUEvPO++8r9Cey6FMiyrrxaipMcVZ+9PvP/nkk0W/u/POO5M6DV2XKOCqs7j66quTz1kdyuTJkxMa9sCBA5O6m379+uV233333JNPPpm3Tsfk0ksvTX5/0kknFbwWrYsoy8st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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plt.figure(figsize=(5, 5))\n", + "ax = fig.add_subplot(111, projection='3d')\n", + "\n", + "ax.voxels(mask, facecolors='red', edgecolor='k')\n", + "\n", + "ax.set(title='Voxel mask of the scatterer', xlabel='X', ylabel='Y', zlabel='Z')\n", + "ax.set_xticklabels([]); ax.set_yticklabels([]); ax.set_zticklabels([])\n", + "ax.xaxis.labelpad = ax.yaxis.labelpad = ax.zaxis.labelpad=-10\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "ca4b1721", + "metadata": {}, + "source": [ + "### 1.2 Creating a 2D Scatterer\n", + "\n", + "For a **2D scatterer**, you only need to define the grid and specify your mask in the $X$ and $Y$ dimensions. To create a circle analogous to the sphere above, you can define the grid and mask as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "e1faef53", + "metadata": {}, + "outputs": [], + "source": [ + "x = np.arange(-12, 12)\n", + "y = np.arange(-12, 12)\n", + "Y, X = np.meshgrid(y, x)\n", + "\n", + "radius = 11\n", + "mask_2d = (X**2 + Y**2) < radius**2" + ] + }, + { + "cell_type": "markdown", + "id": "f4684d62", + "metadata": {}, + "source": [ + "## 2. Creating a Custom Scatterer Class\n", + "\n", + "To create a reusable scatterer, you can subclass `dt.Scatterer`. This ensures that your scatterer integrates seamlessly with DeepTrack's pipeline and can be used directly with DeepTrack's optical models.\n", + "\n", + "When subclassing `dt.Scatterer`, the main task is to define the shape of your scatterer by implementing the `get()` method. This method should return a 3D array representing voxel occupancy. Optionally, you can override _process_properties to validate or reshape user-provided parameters, such as radius, length, or rotation." + ] + }, + { + "cell_type": "markdown", + "id": "5cd072f2", + "metadata": {}, + "source": [ + "### 2.1 Create a Cylinder Scatterer\n", + "\n", + "As a concrete example, you can create a cylinder scatterer. This cylinder is defined by its radii along the X and Z axes, its length along the Y axis, and a rotation vector specifying rotations around the X, Y, and Z axes. The class definition begins by specifying a conversion table for the parameters that you are going to use, and by initializing the scatterer with the desired parameters." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "b4dd047d", + "metadata": {}, + "outputs": [], + "source": [ + "# Depending on your installed version of Deeptrack, you might have to exchange\n", + "# the next line for \"from deeptrack import units_registry as u\"\n", + "from deeptrack import units as u\n", + "from deeptrack.backend.units import ConversionTable\n", + "\n", + "class CustomCylinder(dt.Scatterer):\n", + " __conversion_table__ = ConversionTable(\n", + " radius=(u.meter, u.meter),\n", + " length=(u.meter, u.meter),\n", + " rotation=(u.radian, u.radian),\n", + " )\n", + "\n", + " def __init__(\n", + " self,\n", + " radius=1e-6,\n", + " length=2e-6,\n", + " rotation=(0, 0, 0),\n", + " **kwargs\n", + " ):\n", + " super().__init__(\n", + " radius=radius,\n", + " length=length,\n", + " rotation=rotation,\n", + " **kwargs\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "e2f0406a", + "metadata": {}, + "source": [ + "The `get()` method is where the scatterer’s voxel representation is generated. First, a 3D meshgrid is created to cover the space where the scatterer will exist. The size of the meshgrid should be chosen to fully contain the scatterer. In practice, we take the maximum of the radius (or radii, if anisotropic) and the half-length of the cylinder, divide them by the voxel size, and round up to ensure the grid extends far enough in each direction. This ensures that no part of the scatterer is cut off.\n", + "\n", + "Next, the grid coordinates are rotated according to the user-provided rotation angles. Here, the rotation angles are set as three angles in radians corresponding to rotations around the X, Y, and Z axes. These rotations are applied using a standard rotation matrix.\n", + "\n", + "Finally, the mask is defined. For a cylinder oriented along the Y axis, we select all voxels that satisfy two conditions: they lie within the cylinder radius in the X–Z plane, and they lie within the cylinder length along the Y axis. This boolean mask is returned as the voxel representation of the scatterer." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "f90bba7f", + "metadata": {}, + "outputs": [], + "source": [ + "def get(\n", + " self,\n", + " *ignore, # catches unused positional arguments\n", + " radius,\n", + " length,\n", + " rotation,\n", + " voxel_size,\n", + " **kwargs\n", + "):\n", + "\n", + " # Determine grid size\n", + " rad_ceil = np.ceil(np.max(radius) / np.min(voxel_size[:2]))\n", + " len_ceil = np.ceil(length * 0.5 / voxel_size[2])\n", + " ceil = int(max(rad_ceil, len_ceil))\n", + "\n", + " # Create grid\n", + " x = np.arange(-ceil, ceil) * voxel_size[0]\n", + " y = np.arange(-ceil, ceil) * voxel_size[1]\n", + " z = np.arange(-ceil, ceil) * voxel_size[2]\n", + " Y, X, Z = np.meshgrid(y, x, z)\n", + "\n", + " # Rotate the grid\n", + " cos = np.cos(rotation)\n", + " sin = np.sin(rotation)\n", + " XR = (\n", + " cos[0] * cos[1] * X\n", + " + (cos[0] * sin[1] * sin[2] - sin[0] * cos[2]) * Y\n", + " + (cos[0] * sin[1] * cos[2] + sin[0] * sin[2]) * Z\n", + " )\n", + " YR = (\n", + " sin[0] * cos[1] * X\n", + " + (sin[0] * sin[1] * sin[2] + cos[0] * cos[2]) * Y\n", + " + (sin[0] * sin[1] * cos[2] - cos[0] * sin[2]) * Z\n", + " )\n", + " ZR = (-sin[1] * X) + cos[1] * sin[2] * Y + cos[1] * cos[2] * Z\n", + "\n", + " # Cylinder mask\n", + " mask = ((XR**2 / radius[0] ** 2 + ZR**2 / radius[1] ** 2) < 1) & (\n", + " np.abs(YR) < length / 2\n", + " )\n", + "\n", + " return mask.astype(float)" + ] + }, + { + "cell_type": "markdown", + "id": "56fd9d1c", + "metadata": {}, + "source": [ + "To ensure that the input parameters have the correct shape, you can add the `_process_properties` method. For the cylinder, the radius will be converted into a length-two array, the length is converted to a scalar and the rotation is padded or truncated to a length-three tuple:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "9b39e400", + "metadata": {}, + "outputs": [], + "source": [ + "def _process_properties(self, properties):\n", + " properties = super()._process_properties(properties)\n", + "\n", + " # Ensure radius is of length 2\n", + " radius = np.array(properties[\"radius\"])\n", + " if radius.ndim == 0:\n", + " radius = np.array((properties[\"radius\"], properties[\"radius\"]))\n", + " elif radius.size == 1:\n", + " radius = np.array((*radius,) * 2)\n", + " else:\n", + " radius = radius[:2]\n", + " properties[\"radius\"] = radius\n", + "\n", + " # Ensure length is scalar\n", + " properties[\"length\"] = float(properties[\"length\"])\n", + "\n", + " # Ensure rotation is 3 values\n", + " rotation = np.array(properties[\"rotation\"])\n", + " if rotation.ndim == 0:\n", + " rotation = [rotation, 0, 0]\n", + " elif rotation.size == 1:\n", + " rotation = [rotation[0], 0, 0]\n", + " elif rotation.size == 2:\n", + " rotation = [rotation[0], rotation[1], 0]\n", + " properties[\"rotation\"] = tuple(rotation)\n", + "\n", + " return properties" + ] + }, + { + "cell_type": "markdown", + "id": "e44fe0b7", + "metadata": {}, + "source": [ + "Putting all of these parts together you get the class for the cylinder scatterer:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "2c65c1d1", + "metadata": {}, + "outputs": [], + "source": [ + "class Cylinder(dt.Scatterer):\n", + " __conversion_table__ = ConversionTable(\n", + " radius=(u.meter, u.meter),\n", + " length=(u.meter, u.meter),\n", + " rotation=(u.radian, u.radian),\n", + " )\n", + "\n", + " def __init__(\n", + " self,\n", + " radius=1e-6,\n", + " length=2e-6,\n", + " rotation=(0, 0, 0),\n", + " **kwargs\n", + " ):\n", + " super().__init__(\n", + " radius=radius,\n", + " length=length,\n", + " rotation=rotation,\n", + " **kwargs\n", + " )\n", + "\n", + " def _process_properties(self, properties):\n", + " properties = super()._process_properties(properties)\n", + "\n", + " # Ensure radius is of length 2\n", + " radius = np.array(properties[\"radius\"])\n", + " if radius.ndim == 0:\n", + " radius = np.array((properties[\"radius\"], properties[\"radius\"]))\n", + " elif radius.size == 1:\n", + " radius = np.array((*radius,) * 2)\n", + " else:\n", + " radius = radius[:2]\n", + " properties[\"radius\"] = radius\n", + "\n", + " # Ensure length is scalar\n", + " properties[\"length\"] = float(properties[\"length\"])\n", + "\n", + " # Ensure rotation is 3 values\n", + " rotation = np.array(properties[\"rotation\"])\n", + " if rotation.ndim == 0:\n", + " rotation = [rotation, 0, 0]\n", + " elif rotation.size == 1:\n", + " rotation = [rotation[0], 0, 0]\n", + " elif rotation.size == 2:\n", + " rotation = [rotation[0], rotation[1], 0]\n", + " properties[\"rotation\"] = tuple(rotation)\n", + "\n", + " return properties\n", + "\n", + " def get(\n", + " self,\n", + " *ignore,\n", + " radius,\n", + " length,\n", + " rotation,\n", + " voxel_size,\n", + " **kwargs\n", + " ):\n", + "\n", + " # Determine grid size\n", + " rad_ceil = np.ceil(np.max(radius) / np.min(voxel_size[:2]))\n", + " len_ceil = np.ceil(length * 0.5 / voxel_size[2])\n", + " ceil = int(max(rad_ceil, len_ceil))\n", + "\n", + " # Create grid\n", + " x = np.arange(-ceil, ceil) * voxel_size[0]\n", + " y = np.arange(-ceil, ceil) * voxel_size[1]\n", + " z = np.arange(-ceil, ceil) * voxel_size[2]\n", + " Y, X, Z = np.meshgrid(y, x, z)\n", + "\n", + " # Rotate the grid\n", + " cos = np.cos(rotation)\n", + " sin = np.sin(rotation)\n", + " XR = (\n", + " cos[0] * cos[1] * X\n", + " + (cos[0] * sin[1] * sin[2] - sin[0] * cos[2]) * Y\n", + " + (cos[0] * sin[1] * cos[2] + sin[0] * sin[2]) * Z\n", + " )\n", + " YR = (\n", + " sin[0] * cos[1] * X\n", + " + (sin[0] * sin[1] * sin[2] + cos[0] * cos[2]) * Y\n", + " + (sin[0] * sin[1] * cos[2] - cos[0] * sin[2]) * Z\n", + " )\n", + " ZR = (-sin[1] * X) + cos[1] * sin[2] * Y + cos[1] * cos[2] * Z\n", + "\n", + " # Cylinder mask\n", + " mask = ((XR**2 / radius[0] ** 2 + ZR**2 / radius[1] ** 2) < 1) & (\n", + " np.abs(YR) < length / 2\n", + " )\n", + "\n", + " return mask.astype(float)" + ] + }, + { + "cell_type": "markdown", + "id": "fc61afa0", + "metadata": {}, + "source": [ + "### 2.2 Using the Custom Cylinder Scatterer in a Pipeline\n", + "\n", + "You can now use your cylinder like any built-in DeepTrack scatterer. To create a simple pipeline, you can first define the cylinder with a chosen radius, length and position." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "13f1d12b", + "metadata": {}, + "outputs": [], + "source": [ + "radius = (7e-7, 3e-7)\n", + "length = 4e-6\n", + "position = (64, 64)\n", + "\n", + "cylinder = Cylinder(\n", + " radius=radius,\n", + " length=length,\n", + " position=position,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "038e2b73", + "metadata": {}, + "source": [ + "Next, define the optical setup, for example a fluorescence microscope, and apply it to your scatterer to create a pipeline." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "c43d4931", + "metadata": {}, + "outputs": [], + "source": [ + "optics = dt.Fluorescence()\n", + "\n", + "pip = optics(cylinder)" + ] + }, + { + "cell_type": "markdown", + "id": "a7d98251", + "metadata": {}, + "source": [ + "Resolving the pipeline produces an image of the scatterer." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "e10ede1f", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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4cOxZX72s585ffv2ddasWeO89957zuWXX+6MGjXKiaLNmzc7Z599tnPxxRc7M2bMKKg6Hjx40DnrrLOcn/70p86mTZucL7/80vn73//ufPHFF7FlnnjiCadr167OihUrnA8//NC5/vrrnf79+zvHjh1zouKxxx5zevTo4axcudLZtWuXs2zZMqdz587Ob3/720jX829/+5vz4IMPOm+88YakrbN8+fJWjwep09VXX+0MHjzYeffdd51//etfznnnnedMnDjRiUId6+vrnaqqKue1115zPvvsM6empsa57LLLnKFDh7ZaR67qGMmQkjds+vTpsfunTp1yevfu7VRXVzuF4sCBA/qPZ/369bE/nHbt2ukDgfHpp5/qZeSPKEoOHTrkDBgwwFm9erVz1VVXxUKqUOo4Z84c58orr4z7eEtLi1NZWek8/fTTsXlS97KyMufVV191ouLaa691brvttlbzbrrpJmfSpEkFU0/vATxInXbs2KGft2XLltgyq1atckpKSpy9e/c6tlE+Qez3oVKW2717d87rGLnuvuPHj6utW7fqJrb7Wn5yv6amRhWKhoYGfdu9e3d9K3WWZri73gMHDtQX2I1avaU779prr21Vl0Kq41tvvaWGDRumbr75Zt11O2TIEPX888/HHt+1a5eqq6trVU+5hpl0W0epnqNGjVJr1qxRn3/+ub7/4Ycfqo0bN6prrrmmoOrpFqROcivdX/I3YMjycpzatGmTiurxqKSkRNcr13WM3AVmv/nmG90XXlFR0Wq+3P/ss89UIZCrvMt5miuuuEINGjRIz5P/GO3bt4/9kbjrLY9FxdKlS9W2bdvUli1bvvNYodTxyy+/VIsWLVKzZ89WDzzwgK7rPffco+s2efLkWF38/oajVM/7779fX+RZPki0bdtW/7987LHH9HkKUSj1dAtSJ7mVDydupaWl+gNnFOvd1NSkz1FNnDgxdoHZXNYxciFVDKSlsX37dv2ptJDIpf5nzJihVq9erQe8FCr5kCGfMB9//HF9X1pSsj8XL16sQ6pQvP7662rJkiXqlVdeURdeeKH64IMP9IcrOdFeSPUsZidOnFC33HKLHiwiH7zyIXLdfWeccYb+1OYd8SX3KysrVdTdddddauXKlWrdunX650gMqZt0ddbX10e23tKdd+DAAXXppZfqT11S1q9frxYsWKCn5dNo1OsoZNTXBRdc0Gre+eefr7766is9beoS9b/he++9V7emJkyYoEeC/eQnP1GzZs3SI1ULqZ5uQeokt/J37nby5Ek9Gi5K9T7xv4DavXu3/mDp/pmOXNYxciElXSZDhw7VfeHuT65yf+TIkSqq5JOKBNTy5cvV2rVr9bBeN6lzu3btWtVbhqjLgS8q9R49erT6+OOP9SduU6TFId1DZjrqdRTSTev9+oCctznrrLP0tOxb+Y/srqd0m0lffpTqefTo0e/8WJ18gJT/j4VUT7cgdZJb+aAlH8oM+T8t74ucu4pSQO3cuVP94x//0F+lcMtpHZ2IDkGX0TQvvviiHmUybdo0PQS9rq7Oiao77rhDD2v95z//6Xz99dexcvTo0VbDs2VY+tq1a/Xw7JEjR+oSZe7RfYVSRxkJVVpaqodo79y501myZIlz2mmnOS+//HKrYczyN/vmm286H330kXPDDTdYPzTba/Lkyc6ZZ54ZG4Iuw5nPOOMM57777ot0PWX06fvvv6+LHCKfeeYZPW1GtgWpkwzPHjJkiP4KwsaNG/VoVpuGoB9KUMfjx4/rYfV9+vTRX4dxH4+am5tzXsdIhpT43e9+pw9m8n0pGZIuY/WjTP5Q/Ip8d8qQ/wR33nmnc/rpp+uD3o033qj/cAoppAqljm+//bYzaNAg/WFq4MCBznPPPdfqcRnKPG/ePKeiokIvM3r0aKe2ttaJksbGRr3v5P9hhw4dnHPOOUd/98Z9IItiPdetW+f7f1FCOWidvv32W33Alu+NlZeXO1OmTNHBEIU67tq1K+7xSJ6X6zryUx0AAGtF7pwUAKB4EFIAAGsRUgAAaxFSAABrEVIAAGsRUgAAaxFSAABrEVIAAGsRUgAAaxFSAABrEVIAAGsRUgAAZav/B8sToxLQan68AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pip.update()\n", + "image1 = pip.resolve()\n", + "\n", + "plt.imshow(image1, cmap='gray');" + ] + }, + { + "cell_type": "markdown", + "id": "4c411743", + "metadata": {}, + "source": [ + "The orientation of the scatterer can also be varied through the `rotation` parameter. By changing the angles, you can explore how the same object appears when viewed at different orientations:" + ] + }, + { + "cell_type": "markdown", + "id": "5d0f77c0", + "metadata": {}, + "source": [ + "Rotate around z-axis:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "6081e2b0", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(2, 5, figsize=(8, 3.3))\n", + "\n", + "for i in range(10):\n", + "\n", + " cylinder = Cylinder(\n", + " radius=radius,\n", + " length=length,\n", + " rotation=(i * np.pi / 10, 0, 0), # rotation around Z-axis\n", + " position=position\n", + " )\n", + "\n", + " pip = optics(cylinder)\n", + "\n", + " pip.update()\n", + " image = pip.resolve()\n", + "\n", + " ax[int(i*0.4 // 2), i%5].imshow(image, cmap='gray')\n", + " ax[int(i*0.4 // 2), i%5].axis('off') # remove axes for a cleaner look\n", + "\n", + "plt.subplots_adjust(wspace=0, hspace=0) \n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "b4036fdc", + "metadata": {}, + "source": [ + "Rotate around x-axis:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "1537074e", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(2, 5, figsize=(8, 3.3))\n", + "\n", + "for i in range(10):\n", + "\n", + " cylinder = Cylinder(\n", + " radius=radius,\n", + " length=length,\n", + " rotation=(0, i * np.pi / 10, 0), # rotation around X-axis\n", + " position=position,\n", + " )\n", + "\n", + " pip = optics(cylinder)\n", + "\n", + " pip.update()\n", + " image = pip.resolve()\n", + "\n", + " ax[int(i*0.4 // 2), i%5].imshow(image, cmap='gray')\n", + " ax[int(i*0.4 // 2), i%5].axis('off')\n", + "\n", + "plt.subplots_adjust(wspace=0, hspace=0) \n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "0ac1621f", + "metadata": {}, + "source": [ + "Rotate around y-axis:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "9fc422a7", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(2, 5, figsize=(8, 3.3))\n", + "\n", + "for i in range(10):\n", + "\n", + " cylinder = Cylinder(\n", + " radius=radius,\n", + " length=length,\n", + " rotation=(0, 0, i * np.pi / 10), # rotation around Y-axis\n", + " position=position\n", + " )\n", + "\n", + " pip = optics(cylinder)\n", + "\n", + " pip.update()\n", + " image = pip.resolve()\n", + "\n", + " ax[int(i*0.4 // 2), i%5].imshow(image, cmap='gray')\n", + " ax[int(i*0.4 // 2), i%5].axis('off')\n", + "\n", + "plt.subplots_adjust(wspace=0, hspace=0) \n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "f5a734b2", + "metadata": {}, + "source": [ + "### 2.3 Adapting the Scatterer\n", + "\n", + "You can also create other shapes for your scatterer by modifying the mask function. For example, a wavy cylinder can be generated by adding a sinusoidal modulation to the radius along the cylinder’s axis. When doing this, make sure to slightly increase the maximum size of the meshgrid so that the entire scatterer, including the waves, is fully contained." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "a82d2191", + "metadata": {}, + "outputs": [], + "source": [ + "class WavyCylinder(dt.Scatterer):\n", + " __conversion_table__ = ConversionTable(\n", + " radius=(u.meter, u.meter),\n", + " length=(u.meter, u.meter),\n", + " rotation=(u.radian, u.radian),\n", + " )\n", + "\n", + " def __init__(\n", + " self,\n", + " radius=1e-6,\n", + " length=2e-6,\n", + " rotation=(0, 0, 0),\n", + " amplitude=0.5,\n", + " frequency=3,\n", + " **kwargs\n", + " ):\n", + " super().__init__(\n", + " radius=radius,\n", + " length=length,\n", + " rotation=rotation,\n", + " amplitude=amplitude,\n", + " frequency=frequency,\n", + " **kwargs\n", + " )\n", + "\n", + " def _process_properties(self, properties: dict) -> dict:\n", + " properties = super()._process_properties(properties)\n", + "\n", + " # Ensure radius is of length 2\n", + " radius = np.array(properties[\"radius\"])\n", + " if radius.ndim == 0:\n", + " radius = np.array((properties[\"radius\"], properties[\"radius\"]))\n", + " elif radius.size == 1:\n", + " radius = np.array((*radius,) * 2)\n", + " else:\n", + " radius = radius[:2]\n", + " properties[\"radius\"] = radius\n", + "\n", + " # Ensure length is scalar\n", + " properties[\"length\"] = float(properties[\"length\"])\n", + "\n", + " # Ensure rotation is 3 values\n", + " rotation = np.array(properties[\"rotation\"])\n", + " if rotation.ndim == 0:\n", + " rotation = [rotation, 0, 0]\n", + " elif rotation.size == 1:\n", + " rotation = [rotation[0], 0, 0]\n", + " elif rotation.size == 2:\n", + " rotation = [rotation[0], rotation[1], 0]\n", + " properties[\"rotation\"] = tuple(rotation)\n", + "\n", + " return properties\n", + "\n", + " def get(\n", + " self,\n", + " *ignore,\n", + " radius,\n", + " length,\n", + " rotation,\n", + " amplitude,\n", + " frequency,\n", + " voxel_size,\n", + " **kwargs\n", + " ):\n", + " # Grid size\n", + " rad_ceil = np.ceil((np.max(radius) ) / np.min(voxel_size[:2])) * (1 + amplitude)\n", + " len_ceil = np.ceil(length * 0.5 / voxel_size[2])\n", + " ceil = int(max(rad_ceil, len_ceil))\n", + "\n", + " # Grid\n", + " x = np.arange(-ceil, ceil) * voxel_size[0]\n", + " y = np.arange(-ceil, ceil) * voxel_size[1]\n", + " z = np.arange(-ceil, ceil) * voxel_size[2]\n", + " Y, X, Z = np.meshgrid(y, x, z)\n", + "\n", + " # Rotate grid if needed (same as ellipsoid)\n", + " cos = np.cos(rotation)\n", + " sin = np.sin(rotation)\n", + " XR = (\n", + " cos[0] * cos[1] * X\n", + " + (cos[0] * sin[1] * sin[2] - sin[0] * cos[2]) * Y\n", + " + (cos[0] * sin[1] * cos[2] + sin[0] * sin[2]) * Z\n", + " )\n", + " YR = (\n", + " sin[0] * cos[1] * X\n", + " + (sin[0] * sin[1] * sin[2] + cos[0] * cos[2]) * Y\n", + " + (sin[0] * sin[1] * cos[2] - cos[0] * sin[2]) * Z\n", + " )\n", + " ZR = (-sin[1] * X) + cos[1] * sin[2] * Y + cos[1] * cos[2] * Z\n", + "\n", + " # Wavy cylinder mask\n", + " radius_wave = radius[0] + amplitude * radius[0] * np.sin(\n", + " frequency * YR * 2 * np.pi / length\n", + " )\n", + " mask = (\n", + " (XR**2 / radius_wave**2 + ZR**2 / radius[1] ** 2) < 1\n", + " ) & (np.abs(YR) < (length / 2))\n", + "\n", + " return mask.astype(float)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "5578bc3b", + "metadata": {}, + "outputs": [], + "source": [ + "wavy_cylinder = WavyCylinder(\n", + " radius=radius,\n", + " length=5e-6,\n", + " position=position,\n", + ")\n", + "\n", + "pip_wavy_cylinder = optics(wavy_cylinder)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "d37f3224", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pip_wavy_cylinder.update()\n", + "\n", + "image = pip_wavy_cylinder.resolve()\n", + "\n", + "plt.imshow(image, cmap='gray');" + ] + } + ], + "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.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/1-getting-started/DTGS171B_custom_scatterers_bacteria.ipynb b/tutorials/1-getting-started/DTGS171B_custom_scatterers_bacteria.ipynb new file mode 100644 index 000000000..894cd66f9 --- /dev/null +++ b/tutorials/1-getting-started/DTGS171B_custom_scatterers_bacteria.ipynb @@ -0,0 +1,756 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "df7f67e1", + "metadata": {}, + "source": [ + "# Creating Custom Scatterers: Bacteria\n", + "\n", + "\"Open" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "e7fb75d7", + "metadata": {}, + "outputs": [], + "source": [ + "# !pip install deeptrack # Uncomment if running on Colab/Kaggle." + ] + }, + { + "cell_type": "markdown", + "id": "8eed90ca", + "metadata": {}, + "source": [ + "In addition to simple geometric scatterers, DeepTrack also makes it possible to describe biological structures with more complex shapes. The examples below show how common bacterial morphologies can be represented as scatterers. These implementations are not intended as exact models of bacterial structure, but rather as demonstrations of how such scatterers can be created and adapted. You can use them directly, or take them as inspiration to design custom scatterers that fit your own application.\n", + "\n", + "The examples are implemented in NumPy, though the same approach can be applied in PyTorch if preferred. If you would like to understand in more detail how scatterers are constructed in DeepTrack, you may first want to look at the [introductory tutorial on custom scatterers](./DTGS171A_custom_scatterers.ipynb)." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "c830d4a2", + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "import deeptrack as dt\n", + "\n", + "# Depending on your installed version of Deeptrack, you might have to exchange\n", + "# the next line for \"from deeptrack import units_registry as u\"\n", + "from deeptrack import units as u\n", + "from deeptrack.backend.units import ConversionTable" + ] + }, + { + "cell_type": "markdown", + "id": "13fc21db", + "metadata": {}, + "source": [ + "## 1. Bacillus\n", + "\n", + "Rod-shaped bacteria (bacilli) can be represented by combining a cylinder with hemispherical caps. The example `Bacillus` class below also includes the option to add bending along the length of the rod." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "dae956e8", + "metadata": {}, + "outputs": [], + "source": [ + "class Bacillus(dt.Scatterer):\n", + " __conversion_table__ = ConversionTable(\n", + " radius=(u.meter, u.meter),\n", + " length=(u.meter, u.meter),\n", + " rotation=(u.radian, u.radian),\n", + " )\n", + "\n", + " def __init__(\n", + " self,\n", + " radius=0.5e-6,\n", + " length=2e-6,\n", + " rotation=(0, 0, 0),\n", + " max_bacillus_bend=0,\n", + " refractive_index=1.38,\n", + " **kwargs\n", + " ):\n", + " super().__init__(\n", + " radius=radius,\n", + " length=length,\n", + " rotation=rotation,\n", + " max_bacillus_bend=max_bacillus_bend,\n", + " refractive_index=refractive_index,\n", + " **kwargs\n", + " )\n", + "\n", + " def _process_properties(self, properties):\n", + " properties = super()._process_properties(properties)\n", + "\n", + " # Ensure radius iis scalar\n", + " radius = np.array(properties[\"radius\"])\n", + " if radius.size > 1:\n", + " radius = radius[0]\n", + " properties[\"radius\"] = float(radius)\n", + "\n", + " # Ensure length is scalar\n", + " properties[\"length\"] = float(properties[\"length\"])\n", + "\n", + " # Ensure rotation is 3 values\n", + " rotation = np.array(properties[\"rotation\"])\n", + " if rotation.ndim == 0:\n", + " rotation = [rotation, 0, 0]\n", + " elif rotation.size == 1:\n", + " rotation = [rotation[0], 0, 0]\n", + " elif rotation.size == 2:\n", + " rotation = [rotation[0], rotation[1], 0]\n", + " properties[\"rotation\"] = tuple(rotation)\n", + "\n", + " return properties\n", + "\n", + " def get(\n", + " self,\n", + " *ignore,\n", + " radius,\n", + " length,\n", + " rotation,\n", + " max_bacillus_bend,\n", + " voxel_size,\n", + " **kwargs\n", + " ):\n", + "\n", + " # Determine grid size\n", + " rad_ceil = np.ceil(radius / np.min(voxel_size[:2]))\n", + " len_ceil = np.ceil(length * 0.5 / voxel_size[2]) + rad_ceil\n", + " ceil = int(max(rad_ceil, len_ceil))\n", + "\n", + " # Create the grid\n", + " x = np.arange(-ceil, ceil) * voxel_size[0]\n", + " y = np.arange(-ceil, ceil) * voxel_size[1]\n", + " z = np.arange(-ceil, ceil) * voxel_size[2]\n", + " Y, X, Z = np.meshgrid(y, x, z)\n", + "\n", + " # Rotate the grid\n", + " cos = np.cos(rotation)\n", + " sin = np.sin(rotation)\n", + " XR = (\n", + " cos[0] * cos[1] * X\n", + " + (cos[0] * sin[1] * sin[2] - sin[0] * cos[2]) * Y\n", + " + (cos[0] * sin[1] * cos[2] + sin[0] * sin[2]) * Z\n", + " )\n", + " YR = (\n", + " sin[0] * cos[1] * X\n", + " + (sin[0] * sin[1] * sin[2] + cos[0] * cos[2]) * Y\n", + " + (sin[0] * sin[1] * cos[2] - cos[0] * sin[2]) * Z\n", + " )\n", + " ZR = (-sin[1] * X) + cos[1] * sin[2] * Y + cos[1] * cos[2] * Z\n", + "\n", + " # Apply wave-like bending along the lenght of the bacillus\n", + " bend_amp_x = (np.random.rand() - 0.5) * 2 * max_bacillus_bend\n", + " bend_amp_z = (np.random.rand() - 0.5) * 2 * max_bacillus_bend\n", + " lateral_offset_x = bend_amp_x * np.cos(np.pi * YR / length)\n", + " lateral_offset_z = bend_amp_z * np.cos(np.pi * YR / length)\n", + " XR -= lateral_offset_x\n", + " ZR -= lateral_offset_z\n", + " \n", + " # Cylinder mask\n", + " cyl_mask = ((XR**2 / radius ** 2 + ZR**2 / radius ** 2) < 1) & (\n", + " np.abs(YR) < (length / 2)\n", + " )\n", + " # Hemispherical caps\n", + " cap_mask = ((XR**2 + ZR**2 + (np.abs(YR) - (length/2))**2) < radius**2)\n", + "\n", + " # Combine the cylinder with the end-caps to form the full bacillus shape\n", + " mask = cyl_mask | cap_mask\n", + "\n", + " return mask.astype(float)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a1696c4c", + "metadata": {}, + "outputs": [], + "source": [ + "bacillus = Bacillus(\n", + " position=(64, 64),\n", + ")\n", + "\n", + "optics = dt.Fluorescence()\n", + "\n", + "pip = optics(bacillus)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "408f26a0", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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jxXLNn777bfq+eefVzNmzFD333+/3tY777xTb9ukSZMS2xL0Nxyn7Zw1a5a+yLN8kejYsaP+d/nYY4/p4xSiWLbTlsk2ya18ObF16tRJf+GM43YfOnRIH6OaMGFC4gKz+dzG2IVUKZCexsaNG/W30mIil/qfNm2aWrJkiS54KVbyJUO+YT7++OP6vvSk5P/nCy+8oEOqWLz11ltq3rx56vXXX1dnnXWW+vTTT/WXKznQXkzbWcqOHDmibrjhBl0sIl+8CiF2w30nnHCC/tbmr/iS+9XV1Srubr/9drV48WK1fPly/XMkhmybDHU2NjbGdrtlOG/Xrl3qggsu0N+6pK1YsUI9++yzelq+jcZ9G4VUfZ155plJ88444wz13Xff6WmzLXH/G7733nt1b2r8+PG6EuxXv/qVuuuuu3SlajFtpy2TbZJb+Tu3HT16VFfDxWm7j/xfQG3dulV/sbR/piOf2xi7kJIhk2HDhumxcPubq9wfOXKkiiv5piIBtXDhQrVs2TJd1muTbe7cuXPSdkuJuuz44rLdo0ePVp9//rn+xm2a9DhkeMhMx30bhQzT+k8fkOM2J598sp6W/7fyD9neThk2k7H8OG3ngQMH/ufH6uQLpPx7LKbttGWyTXIrX7TkS5kh/6blc5FjV3EKqC1btqh//vOf+lQKW1630YtpCbpU07zyyiu6yuSWW27RJegNDQ1eXN166626rPVf//qX9/333yfagQMHksqzpSx92bJlujx75MiRusWZXd1XLNsolVCdOnXSJdpbtmzx5s2b5x133HHea6+9llTGLH+z77zzjvfZZ59511xzjfOl2X6TJk3yTjzxxEQJupQzn3DCCd59990X6+2U6tNPPvlEN9lFPvXUU3raVLZlsk1Snj106FB9CsKqVat0NatLJeh7U2zj4cOHdVn9SSedpE+HsfdHLS0ted/GWIaU+MMf/qB3ZnK+lJSkS61+nMkfSlCTc6cM+Udw2223eccff7ze6V177bX6D6eYQqpYtvG9997zzj77bP1lasiQId6LL76Y9LiUMs+ZM8erqqrSy4wePdrbvHmzFyfNzc36/538O+zatat36qmn6nNv7B1ZHLdz+fLlgf8WJZQz3abdu3frHbacN1ZRUeFNnjxZB0MctrG+vj50fyTPy/c28lMdAABnxe6YFACgdBBSAABnEVIAAGcRUgAAZxFSAABnEVIAAGcRUgAAZxFSAABnEVIAAGcRUgAAZxFSAABnEVIAAOWq/wfmS70glfLGkgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pip.update()\n", + "image = pip.resolve()\n", + "plt.imshow(image, cmap='gray');" + ] + }, + { + "cell_type": "markdown", + "id": "cac8caab", + "metadata": {}, + "source": [ + "Once defined, bacilli can be placed at specific or random positions, given random orientations, and varied in size. Several instances can be combined into the same simulation, with tools such as `NonOverlapping` to avoid overlaps." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "3004eeae", + "metadata": {}, + "outputs": [], + "source": [ + "bacillus = Bacillus(\n", + " position=lambda: np.random.uniform(0, 128, 2),\n", + " rotation=lambda: np.random.uniform(0, 2*np.pi),\n", + " length=lambda: np.random.uniform(1.6e-6, 2.6e-6),\n", + " max_bacillus_bend=1e-7,\n", + ")\n", + "\n", + "multiple_bacilli = (bacillus ^ (lambda: np.random.randint(5, 10)))\n", + "\n", + "non_overlap_bac = dt.NonOverlapping(multiple_bacilli, min_distance=3)\n", + "\n", + "pip = optics(non_overlap_bac)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "e88acce8", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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3jzqS5hYdP2Ddzgc/cvP58+fH1w/lfcwd5ESxa9//esiY9x3332zBx54IJs3b142jti0aVO2ePHisb5Hgd/neGES7nMS7rHN+5T8Wwhq7733flbj7N4rKbmhffbZp3h4Anlw4/yRTMo9Cvw+xwuTcJ+TcI9t3WdMQQFh+nI4HA6HY8RwknI4HA5HZ9FrkpL2BR/+8IeL+bhiEu5R4Pc5XpiE+5yEe+zCffYycMLhcDgck4FeKymHw+FwjDecpBwOh8PRWThJORwOh6OzcJJyOBwOR2fRW5K65JJLshe84AVFT8SHHnpodsstt2R9xsqVK7NXvvKV2a677prtueee2VFHHZXde++9s7aRvr9OPvnkbPfdd8/mzp2bHXPMMdlDDz2U9RUXXHBB0X/a6aefPnb3+OCDD2Z/+7d/W9yH9Hj953/+59mPfvSjmfUSr3Tuuedme+21V7F+2bJl2dq1a7M+QfqVW7FiRbZkyZLiHl70ohdlH/nIR57Vb1zf7vPGG2/M3vSmNxU9Icj3ec0118xan3JPjzzySHb88ccXjV8XLFiQnXjiidmjjz6a9eEen3766eyss84qvtlddtml2Obv//7vi15+RnKPeQ/xpS99Kd9hhx3y//zP/8x/9rOf5SeddFK+YMGC/KGHHsr7iiOOOCK/7LLL8rvuuiu/44478je+8Y35vvvumz/66KMz2/zDP/xDvnjx4nz16tX5j370o/zVr351fthhh+V9xC233JK/4AUvyF/2spflp5122ljd4yOPPJI///nPz9/5znfmN998c37ffffl3/3ud/Nf/vKXM9tccMEF+fz58/Nrrrkmv/POO/M3v/nN+ZIlS/Innngi7wvOP//8fPfdd89XrVqVr1u3Lr/qqqvyuXPn5p/61Kd6fZ/f+ta38g996EP5V7/6VWHb/Oqrr561PuWeXv/61+cHHnhg/sMf/jD//ve/n7/4xS/OjzvuuLwP97hhw4Z82bJl+Ze//OX8nnvuydesWZO/6lWvyg8++OBZxxjWPfaSpOSBnXzyyTO/t2zZku+99975ypUr83HBww8/XHw8N9xww8yHs/322xcZAfDzn/+82EY+oj5h8+bN+Ute8pL82muvzf/f//t/MyQ1Lvd41lln5a997WuD66enp/NFixblF1544cwyufc5c+bkV155Zd4XHHnkkfm73vWuWcuOPvro/Pjjjx+b+9QZeMo93X333cV+t95668w23/72t/Opqan8wQcfzLuGzCBiq1Ap2/3qV78a+j32zu6Tru1vu+22QmJzX37ye82aNdm4YOPGjcV8t912K+ZyzyLD+b7322+/ooPdvt232HlHHnnkrHsZp3v8+te/nh1yyCHZ29/+9sK6ffnLX559/vOfn1m/bt26bP369bPuU/owE9u6T/d52GGHZatXr85+8YtfFL/vvPPO7Kabbsre8IY3jNV9MlLuSeZif8k3AMj2kk/dfPPNWV/zo6mpqeK+hn2Pvetg9ne/+13hhS9cuHDWcvl9zz33ZOMA6eVd6mle85rXZAcccECxTP4xZMRRfCR837KuL/jSl76U3X777dmtt976rHXjco/33Xdf9tnPfjY788wzsw9+8IPFvb7vfe8r7m358uUz92J9w326z7PPPrvo5FkKEjJWk/xfnn/++UU9hWBc7pORck8yl8IJQ8a1kgJnH+/7ySefLOqojjvuuJkOZod5j70jqUmAKI277rqrKJWOE6Sr/9NOOy279tpri4CXcYUUMqSE+bGPfaz4LUpK3uell15akNS44Ctf+Up2+eWXZ1dccUX2Z3/2Z9kdd9xRFK6kon2c7nOS8fTTT2fveMc7imARKXiNAr2z+/bYY4+i1KYjvuT3okWLsr7jlFNOyVatWpVdf/31xXAkgNybWJ0bNmzo7X2Lnffwww9nr3jFK4pSl0w33HBDdtFFFxVpKY32/R4FEvX10pe+dNay/fffP7v//vuLNO6l79/wP/3TPxVq6thjjy0iwf7u7/4uO+OMM4pI1XG6T0bKPclcvnOGjLYr0XB9uu+ntxLUr371q6JgycN0DPMee0dSYpkcfPDBhRfOJVf5vXTp0qyvkJKKENTVV1+dXXfddUVYL0Puefvtt5913xKiLhlfX+778MMPz376058WJW5MojjEHkK67/coEJtWNx+QepvnP//5RVrerfwj832KbSZefp/u8/HHH3/WYHVSgMQw8uNyn4yUe5K5FLSkUAbI/7Q8F6m76hNBrV27Nvuf//mfoikFY6j3mPc0BF2iab7whS8UUSbvfve7ixD09evX533Fe97zniKs9Xvf+17+m9/8ZmZ6/PHHZ4VnS1j6ddddV4RnL126tJj6DI7uG5d7lEio7bbbrgjRXrt2bX755ZfnO++8c/5f//Vfs8KY5Zv92te+lv/kJz/J3/KWt3Q+NFtj+fLl+fOe97yZEHQJZ95jjz3yD3zgA72+T4k+/fGPf1xMkkX+67/+a5FGZFvKPUl49stf/vKiCcJNN91URLN2KQR9c+Qe//jHPxZh9fvss0/RHIbzo6eeemro99hLkhJ8+tOfLjIzaS8lIekSq99nyIdiTdJ2CpB/gve+9735c57znCLTe+tb31p8OONEUuNyj9/4xjfyAw44oChM7bfffvnnPve5WesllHnFihX5woULi20OP/zw/N577837hE2bNhXvTv4Pd9xxx/yFL3xh0faGM7I+3uf1119v/i8KKafe0+9///siw5Z2Y/PmzctPOOGEghj6cI/r1q0L5key37Dv0YfqcDgcDkdn0bs6KYfD4XBMDpykHA6Hw9FZOEk5HA6Ho7NwknI4HA5HZ+Ek5XA4HI7OwknK4XA4HJ2Fk5TD4XA4OgsnKYfD4XB0Fk5SDofD4egsnKQcDofD0Vk4STkcDoejs3CScjgcDkfWVfx/dHVMXMMvbbsAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pip.update()\n", + "image = pip.resolve()\n", + "plt.imshow(image, cmap='gray');" + ] + }, + { + "cell_type": "markdown", + "id": "2339005e", + "metadata": {}, + "source": [ + "## 2. Streptobacillus\n", + "Streptobacilli are bacteria that form chains of bacilli. This can be modeled by arranging multiple bacilli end-to-end. The class below allows both the individual rods and the entire chain to bend slightly." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "112b8964", + "metadata": {}, + "outputs": [], + "source": [ + "class Streptobacillus(dt.Scatterer):\n", + " __conversion_table__ = ConversionTable(\n", + " radius=(u.meter, u.meter),\n", + " length=(u.meter, u.meter),\n", + " rotation=(u.radian, u.radian),\n", + " )\n", + "\n", + " def __init__(\n", + " self,\n", + " radius=0.5e-6,\n", + " length=2e-6,\n", + " n_bacilli=5,\n", + " rotation=(0, 0, 0),\n", + " max_chain_bend=0,\n", + " max_bacillus_bend=0,\n", + " refractive_index=1.38,\n", + " **kwargs\n", + " ):\n", + " super().__init__(\n", + " radius=radius,\n", + " length=length, # length of each part of the chain\n", + " n_bacilli=n_bacilli,\n", + " rotation=rotation,\n", + " max_chain_bend=max_chain_bend,\n", + " max_bacillus_bend=max_bacillus_bend,\n", + " refractive_index=refractive_index,\n", + " **kwargs\n", + " )\n", + "\n", + " def _process_properties(self, properties):\n", + " properties = super()._process_properties(properties)\n", + "\n", + " # Ensure radius iis scalar\n", + " radius = np.array(properties[\"radius\"])\n", + " if radius.size > 1:\n", + " radius = radius[0]\n", + " properties[\"radius\"] = float(radius)\n", + "\n", + " # # Ensure length is scalar\n", + " # properties[\"length\"] = float(properties[\"length\"])\n", + "\n", + " # Ensure length is float or iterable of floats\n", + " length = properties[\"length\"]\n", + " if np.ndim(length) == 0:\n", + " properties[\"length\"] = float(length)\n", + " else:\n", + " properties[\"length\"] = np.array(length, dtype=float)\n", + "\n", + " # Ensure n_bacilli is int\n", + " properties[\"n_bacilli\"] = int(properties.get(\"n_bacilli\"))\n", + "\n", + " # Ensure rotation is 3 values\n", + " rotation = np.array(properties[\"rotation\"])\n", + " if rotation.ndim == 0:\n", + " rotation = [rotation, 0, 0]\n", + " elif rotation.size == 1:\n", + " rotation = [rotation[0], 0, 0]\n", + " elif rotation.size == 2:\n", + " rotation = [rotation[0], rotation[1], 0]\n", + " properties[\"rotation\"] = tuple(rotation)\n", + "\n", + " return properties\n", + "\n", + " def get(\n", + " self,\n", + " *ignore,\n", + " radius,\n", + " length,\n", + " n_bacilli,\n", + " rotation,\n", + " max_chain_bend,\n", + " max_bacillus_bend,\n", + " voxel_size,\n", + " **kwargs\n", + " ):\n", + " # Determine grid size\n", + " rad_ceil = np.ceil(radius / np.min(voxel_size[:2]))\n", + " len_ceil = (\n", + " np.ceil(length * 0.5 * n_bacilli / voxel_size[2])\n", + " + rad_ceil * n_bacilli\n", + " )\n", + " ceil = int(max(rad_ceil, len_ceil))\n", + "\n", + " # Create grid\n", + " x = np.arange(-ceil, ceil) * voxel_size[0]\n", + " y = np.arange(-ceil, ceil) * voxel_size[1]\n", + " z = np.arange(-ceil, ceil) * voxel_size[2]\n", + " Y, X, Z = np.meshgrid(y, x, z)\n", + "\n", + " # Rotate the grid\n", + " cos = np.cos(rotation)\n", + " sin = np.sin(rotation)\n", + " XR = (\n", + " cos[0] * cos[1] * X\n", + " + (cos[0] * sin[1] * sin[2] - sin[0] * cos[2]) * Y\n", + " + (cos[0] * sin[1] * cos[2] + sin[0] * sin[2]) * Z\n", + " )\n", + " YR = (\n", + " sin[0] * cos[1] * X\n", + " + (sin[0] * sin[1] * sin[2] + cos[0] * cos[2]) * Y\n", + " + (sin[0] * sin[1] * cos[2] - cos[0] * sin[2]) * Z\n", + " )\n", + " ZR = (-sin[1] * X) + cos[1] * sin[2] * Y + cos[1] * cos[2] * Z\n", + "\n", + " shift = length + 2 * radius\n", + " total_length = n_bacilli * (length + 2 * radius)\n", + "\n", + " mask = np.zeros_like(XR, dtype=bool)\n", + "\n", + " for i in range(n_bacilli):\n", + " # Chain-level bending offsets\n", + " bend_chain_x = (np.random.rand() - 0.5) * 2 * max_chain_bend\n", + " bend_chain_z = (np.random.rand() - 0.5) * 2 * max_chain_bend\n", + "\n", + " # Shift chain along Y and apply chain bending\n", + " YR_shifted = YR - i*shift + total_length/2 - shift/2\n", + " XR_shifted = XR - bend_chain_x\n", + " ZR_shifted = ZR - bend_chain_z\n", + "\n", + " # Wave-like bending along the lenght of the bacillus\n", + " bend_amp_x = (np.random.rand() - 0.5) * 2 * max_bacillus_bend\n", + " bend_amp_z = (np.random.rand() - 0.5) * 2 * max_bacillus_bend\n", + " lateral_offset_x = bend_amp_x * np.cos(np.pi * YR_shifted / length)\n", + " lateral_offset_z = bend_amp_z * np.cos(np.pi * YR_shifted / length)\n", + " XR_shifted -= lateral_offset_x\n", + " ZR_shifted -= lateral_offset_z\n", + "\n", + " # Cylinder mask\n", + " cyl_mask = (\n", + " (XR_shifted**2 / radius**2 + ZR_shifted**2 / radius**2) < 1\n", + " ) & (np.abs(YR_shifted) < length / 2)\n", + "\n", + " # Hemispherical caps\n", + " cap_mask = (\n", + " XR_shifted**2\n", + " + ZR_shifted**2\n", + " + (np.abs(YR_shifted) - length / 2) ** 2\n", + " ) < radius**2\n", + "\n", + " # Combine the cylinder with the end-caps\n", + " mask |= (cyl_mask | cap_mask)\n", + "\n", + " return mask.astype(float)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "015a12a6", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAa4AAAGiCAYAAAC/NyLhAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAALzFJREFUeJzt3XuMVOX9x/Fnl8sKwi4utwW5CN4Vpa0XurFeUghIDamXP7wlVUMgoBgVpXZNBDFNt9WmbWqt/tOoTSwqiWgkSmK5rLEuqFiiohIxWFBZtkJ3ucmyy55fvie/7+SZ45nZc2bOzOwz834lh2Fnzs5899kzz+c85zxztsrzPM8AAOCI6lIXAABAHAQXAMApBBcAwCkEFwDAKQQXAMApBBcAwCkEFwDAKQQXAMApBBcAwCkEFwDAKSULrieffNKcdtpp5qSTTjIzZsww7777bqlKAQA4pCTB9eKLL5qlS5eaFStWmA8++MBMnz7dzJkzx7S3t5eiHACAQ6pKcZFdGWFdcskl5i9/+Yv/dW9vr5k4caK5++67za9+9atilwMAcMjAYr/g8ePHzdatW01TU1PqvurqajNr1izT2toa+j1dXV3+oiToDhw4YEaOHGmqqqqKUjcAIDkyZjp06JAZP368nwH9Ori+/fZbc+LECTN27Ni0++Xrzz77LPR7mpubzcqVK4tUIQCgWPbs2WMmTJhQfrMKZXTW2dmZWnbv3l3qkgAACRg+fHjs7yn6iGvUqFFmwIABZt++fWn3y9cNDQ2h31NTU+MvAIDyksvpnqKPuAYPHmwuuugis379+rRzVvJ1Y2NjscsBADim6CMuIVPhb7vtNnPxxRebSy+91PzpT38yR44cMXfccUcpygEAOKQkwXXjjTea//73v2b58uWmra3N/OAHPzDr1q373oQNAAD6xee48nXw4EFTV1dX6jIAAHmSCXe1tbXlN6sQAABFcAEAnEJwAQCcQnABAJxCcAEAnEJwAQCcQnABAJxCcAEAnEJwAQCcQnABAJxCcAEAnEJwAQCcQnABAJxCcAEAnEJwAQCcQnABAJxCcAEAnEJwAQCcQnABAJxCcAEAnEJwAQCcQnABAJxCcAEAnEJwAQCcQnABAJxCcAEAnEJwAQCcQnABAJxCcAEAnEJwAQCcQnABAJxCcAEAnEJwAQCcQnABAJxCcAEAnEJwAQCcQnABAJxCcAEAnEJwAQCcQnABAJxCcAEAnEJwAQCcQnABAJxCcAEAnEJwAQCcQnABAJxCcAEAnEJwAQCcQnABAJxCcAEAnEJwAQCcQnABAJxCcAEAnEJwAQCcQnABAJxCcAEAnEJwAQCcQnABAJxCcAEAnEJwAQCcQnABACo7uB555BFTVVWVtpxzzjmpx48dO2buuusuM3LkSDNs2DBzww03mH379iVdBgCgTBVkxHX++eebvXv3ppa333479dh9991nXnvtNbN69WrT0tJivvnmG3P99dcXogwAQBkaWJAnHTjQNDQ0fO/+zs5O87e//c384x//MD/96U/9+5555hlz7rnnms2bN5sf//jHhSgHAFBGCjLi+vzzz8348ePN1KlTza233mp2797t379161bT3d1tZs2alVpXDiNOmjTJtLa2FqIUAECZSXzENWPGDPPss8+as88+2z9MuHLlSnP55Zebjz/+2LS1tZnBgwebESNGpH3P2LFj/ccy6erq8hd18ODBpMsGAFRqcM2dOzf1/wsvvNAPssmTJ5uXXnrJDBkyJKfnbG5u9gMQAICCT4eX0dVZZ51ldu7c6Z/3On78uOno6EhbR2YVhp0TU01NTf75MV327NlT6LIBAJUaXIcPHzZffPGFGTdunLnooovMoEGDzPr161OP79ixwz8H1tjYmPE5ampqTG1tbdoCAKhMiR8qfOCBB8y8efP8w4My1X3FihVmwIAB5uabbzZ1dXVm/vz5ZunSpaa+vt4PoLvvvtsPLWYUAgBKElxfffWVH1L79+83o0ePNj/5yU/8qe7yf/HHP/7RVFdX+x88lgkXc+bMMX/961+TLgMAUKaqPM/zjGNkVqGM3gAAbpN5C3FP/3CtQgCAUwguAIBTCC4AgFMILgCAUwguAIBTCC4AgFMILgCAUwguAIBTCC4AgFMILgCAUwguAIBTCC4AgFMILgCAUwguAIBTCC4AgFMILgCAUwguAIBTCC4AgFMILgCAUwguAIBTCC4AgFMILgCAUwguAIBTCC4AgFMILgCAUwguAIBTCC4AgFMILgCAUwguAIBTCC4AgFMILgCAUwguAIBTCC4AgFMILgCAUwguAIBTCC4AgFMILgCAUwguAIBTCC4AgFMILgCAUwguAIBTCC4AgFMILgCAUwguAIBTCC4AgFMILgCAUwguAIBTCC4A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N9/sDRs2zKutrfXuuOMO79ChQ5Fr6OzsDK2BhYWFhcU4tUh/HleV/GMcI5MzZHYhAMBtnZ2dsect8IckAQBOIbgAAE4huAAATiG4AABOIbgAAE4huAAATiG4AABOIbgAAE4huAAATiG4AABOIbgAAE4huAAATiG4AABOIbgAAE4huAAATiG4AABOIbgAAE4huAAATiG4AABOIbgAAE4huAAATiG4AABOIbgAAE4huAAATiG4AABOIbgAAE4huAAATiG4AABOIbgAAE4huAAATiG4AABOIbgAAE4huAAATiG4AABOIbgAAE4huAAATiG4AABOIbgAAE4huAAATiG4AABOIbgAAE4huAAATiG4AABOIbgAAE4huAAATiG4AABOIbgAAE4huAAATiG4AABOIbgAAE4huAAATiG4AABOIbgAAE4huAAATiG4AABOIbgAAE4huAAATiG4AABOIbgAAE4huAAATiG4AADlG1zNzc3mkksuMcOHDzdjxowx1157rdmxY0faOseOHTN33XWXGTlypBk2bJi54YYbzL59+9LW2b17t7nmmmvM0KFD/edZtmyZ6enpSeYnAgCUtVjB1dLS4ofS5s2bzZtvvmm6u7vN7NmzzZEjR1Lr3Hfffea1114zq1ev9tf/5ptvzPXXX596/MSJE35oHT9+3LzzzjvmueeeM88++6xZvnx5sj8ZAKA8eXlob2/35ClaWlr8rzs6OrxBgwZ5q1evTq3z6aef+uu0trb6X7/++utedXW119bWllrnqaee8mpra72urq5Ir9vZ2ek/JwsLCwuLcXqR/jyuvM5xdXZ2+rf19fX+7datW/1R2KxZs1LrnHPOOWbSpEmmtbXV/1puL7jgAjN27NjUOnPmzDEHDx4027dvD32drq4u/3F7AQBUppyDq7e319x7773msssuM9OmTfPva2trM4MHDzYjRoxIW1dCSh7TdezQ0sf1sUzn1urq6lLLxIkTcy0bAFCpwSXnuj7++GPzwgsvmEJramryR3e67Nmzp+CvCQDonwbm8k1Lliwxa9euNW+99ZaZMGFC6v6GhgZ/0kVHR0faqEtmFcpjus67776b9nw661DXCaqpqfEXAABijbg8z/NDa82aNWbDhg1mypQpaY9fdNFFZtCgQWb9+vWp+2S6vEx/b2xs9L+W248++si0t7en1pEZirW1tea8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tWuX969//cubNWuWN2rUKH+mj1i0aJE3adIkb8OGDd7777/vNTY2+ks5O3TokPfvf//bX2Tz/sMf/uD//z//+Y//+G9/+1t/e3n11Ve9Dz/80J9BN2XKFO+7775LPcfVV1/t/fCHP/S2bNnivf32296ZZ57p3XzzzV65t4889sADD/gz5GSb+uc//+n96Ec/8n/+Y8eOlX37LF682Kurq/PfU3v37k0tR48eTa3T13uqp6fHmzZtmjd79mxv27Zt3rp167zRo0d7TU1NXjlY3Ecb7dy503v00Uf9tpFtSN5nU6dO9a644opE28i54BJPPPGEv/EMHjzYnx6/efNmrxLdeOON3rhx4/x2OPXUU/2vZcNR0hnfeeed3imnnOINHTrUu+666/yNrJxt3LjR75CDi0zz1inxDz/8sDd27Fh/B2jmzJnejh070p5j//79fkc8bNgwf4ruHXfc4Xfq5d4+0vlIZyKdiEz7njx5srdgwYLv7RSWa/uEtYsszzzzTKz31JdffunNnTvXGzJkiL8jKTuY3d3dXjkwfbTR7t27/ZCqr6/3319nnHGGt2zZMq+zszPRNuLPmgAAnOLUOS4AAAguAIBTCC4AgFMILgCAUwguAIBTCC4AgFMILgCAUwguAIBTCC4AgFMILgCAUwguAIBTCC4AgHHJ/wHwJOTC4GNrVgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "strepto = Streptobacillus(\n", + " position=(128, 128)\n", + ")\n", + "\n", + "optics = dt.Fluorescence(\n", + " output_region=(0, 0, 256, 256)\n", + ")\n", + "\n", + "pip = optics(strepto)\n", + "\n", + "pip.update()\n", + "image = pip.resolve()\n", + "plt.imshow(image, cmap='gray');" + ] + }, + { + "cell_type": "markdown", + "id": "29702ffb", + "metadata": {}, + "source": [ + "By adjusting the number of bacilli, their length, and the bending parameters, it is possible to create different chain morphologies. This is one way to mimic the diversity that may appear in experiments." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "43ed1a82", + "metadata": {}, + "outputs": [], + "source": [ + "strepto = Streptobacillus(\n", + " position=lambda: np.random.uniform(50, 206, 2),\n", + " n_bacilli=lambda: np.random.randint(3, 6),\n", + " max_chain_bend=0.15e-6,\n", + " max_bacillus_bend=0.15e-6,\n", + " rotation=lambda: np.random.uniform(0, 2*np.pi),\n", + ")\n", + "\n", + "optics = dt.Fluorescence(\n", + " output_region=(0, 0, 256, 256)\n", + ")\n", + "\n", + "pip = optics(strepto ^ 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "6c2712ef", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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kbQRr8u12wxabrrHuvWm8yYFC5cxZmIYVsDauB1HISCDugZ7Eyha4v9GwhljjBkZwwjKpIrQMNjiMsZMHDOVuFF13DDXHsVx44qFyxgz0YxKxCJtr2PLbDgsXMYY02IcV9W2qn3DfPaoLbhxZaAY16ZNm9LJJ59czCtzyCGHpNNPPz3dddddU45R6f7zzz8/LV++vJh75swzz0z333//lGN27NiR3vjGNxbTWes6F110UTG63Bhj5iNlglI2NmvUn2FGIFxbtmwpROmmm25K1113XVGDa+3atcUcMvCBD3wgfetb30pXX311cfx9992XzjjjjP5+lTaRaKk21w9/+MP0xS9+MV155ZXp4osvHuRWjDFmxsinEpn0+5h39KbB7t271Zq9LVu2FO8feuih3r777tu7+uqr+8fceeedxTFbt24t3n/nO9/pLVy4sLdr167+MZdffnlv0aJFvccee6zV5+7du7e4phcvXrzM1rJgwYKnLVXbm5a68+b6OdMsL+rPB2Va6fB79+4tXpctW1a83nrrrYUVtmbNmv4xL3rRi9JRRx2Vtm7dWrzX6/HHH59WrlzZP2bdunXFJGp33HFH6eeo3L/2x8UYY+aaJvfedJM3TDlDC5cKQV5wwQXpla98ZTruuOOKbbt27SrmnFmyZMmUYyVS2scxUbTYz76q2NrixYv7y5FHHjnsbRtjzLTddk3V28sqaJSdW7fdzIBwKdZ1++23p6985Stpptm4cWNh3bH88pe/nPHPNMaYJupEqY24WahmMR1+w4YN6dvf/na68cYb0xFHHNHfvmrVqiLp4qGHHppidSmrUPs45kc/+tGU65F1yDE5THttjDHGDGRx6deBROuaa65JmzdvTsccc8yU/SeeeGLad9990/XXX9/fpnR5pb+vXr26eK/Xn/70p2n37t39Y5ShuGjRovSSl7xk+k9kjDFmvBkkk+O8887rLV68uHfDDTf0du7c2V8effTR/jHnnntu76ijjupt3ry5d8stt/RWr15dLPDEE0/0jjvuuN7atWt727Zt61177bW9gw8+uLdx48bW9+GsQi9evHhJE5tVOJBwVX3wFVdc0T/md7/7Xe+9731vb+nSpb0DDzyw95a3vKUQt8i9997bW79+fe+AAw7orVixovfBD36w9/jjj7e+DwuXFy9evKSJFa4F/1+QOoXS4ZVd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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pip.update()\n", + "image = pip.resolve()\n", + "plt.imshow(image, cmap='gray');" + ] + }, + { + "cell_type": "markdown", + "id": "81954cf7", + "metadata": {}, + "source": [ + "## 3. Streptococcus:\n", + "Streptococci are spherical bacteria that typically grow in chains. A simple way to describe them is as a series of spheres arranged along an axis. The example `Streptococcus` class implements this approach, and also allows the chain to bend smoothly." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "6cd544ec", + "metadata": {}, + "outputs": [], + "source": [ + "class Streptococcus(dt.Scatterer):\n", + " __conversion_table__ = ConversionTable(\n", + " radius=(u.meter, u.meter),\n", + " length=(u.meter, u.meter),\n", + " rotation=(u.radian, u.radian),\n", + " )\n", + "\n", + " def __init__(\n", + " self,\n", + " radius=0.5e-6,\n", + " n_coccus=5,\n", + " rotation=(0, 0, 0),\n", + " max_chain_bend=0,\n", + " refractive_index=1.38,\n", + " **kwargs\n", + " ):\n", + " super().__init__(\n", + " radius=radius,\n", + " n_coccus=n_coccus,\n", + " rotation=rotation,\n", + " max_chain_bend=max_chain_bend,\n", + " refractive_index=refractive_index,\n", + " **kwargs\n", + " )\n", + "\n", + " def _process_properties(self, properties):\n", + " properties = super()._process_properties(properties)\n", + "\n", + " # Ensure radius iis scalar\n", + " radius = np.array(properties[\"radius\"])\n", + " if radius.size > 1:\n", + " radius = radius[0]\n", + " properties[\"radius\"] = float(radius)\n", + "\n", + " # Ensure n_bacilli is int\n", + " properties[\"n_coccus\"] = int(properties.get(\"n_coccus\"))\n", + "\n", + " # Ensure rotation is 3 values\n", + " rotation = np.array(properties[\"rotation\"])\n", + " if rotation.ndim == 0:\n", + " rotation = [rotation, 0, 0]\n", + " elif rotation.size == 1:\n", + " rotation = [rotation[0], 0, 0]\n", + " elif rotation.size == 2:\n", + " rotation = [rotation[0], rotation[1], 0]\n", + " properties[\"rotation\"] = tuple(rotation)\n", + "\n", + " return properties\n", + "\n", + " def get(\n", + " self,\n", + " *ignore,\n", + " radius,\n", + " n_coccus,\n", + " rotation,\n", + " max_chain_bend,\n", + " voxel_size,\n", + " **kwargs\n", + " ):\n", + " # Determine grid size\n", + " rad_ceil = np.ceil(radius / np.min(voxel_size[:2]))\n", + " len_ceil = rad_ceil * n_coccus\n", + " ceil = len_ceil\n", + "\n", + " # Create grid\n", + " x = np.arange(-ceil, ceil) * voxel_size[0]\n", + " y = np.arange(-ceil, ceil) * voxel_size[1]\n", + " z = np.arange(-ceil, ceil) * voxel_size[2]\n", + " Y, X, Z = np.meshgrid(y, x, z)\n", + "\n", + " # Rotate the grid\n", + " cos = np.cos(rotation)\n", + " sin = np.sin(rotation)\n", + " XR = (\n", + " cos[0] * cos[1] * X\n", + " + (cos[0] * sin[1] * sin[2] - sin[0] * cos[2]) * Y\n", + " + (cos[0] * sin[1] * cos[2] + sin[0] * sin[2]) * Z\n", + " )\n", + " YR = (\n", + " sin[0] * cos[1] * X\n", + " + (sin[0] * sin[1] * sin[2] + cos[0] * cos[2]) * Y\n", + " + (sin[0] * sin[1] * cos[2] - cos[0] * sin[2]) * Z\n", + " )\n", + " ZR = (-sin[1] * X) + cos[1] * sin[2] * Y + cos[1] * cos[2] * Z\n", + "\n", + " shift = 2 * radius\n", + " total_length = n_coccus * 2 * radius\n", + "\n", + " mask = np.zeros_like(XR, dtype=bool)\n", + "\n", + " # Generate smooth random offsets along the chain\n", + " bend_x_offsets = (np.random.rand(n_coccus) - 0.5) * 2 * max_chain_bend\n", + " bend_z_offsets = (np.random.rand(n_coccus) - 0.5) * 2 * max_chain_bend\n", + " \n", + " # Smooth offsets for more natural curve\n", + " for i in range(1, n_coccus):\n", + " bend_x_offsets[i] = (\n", + " 0.7 * bend_x_offsets[i - 1] + 0.3 * bend_x_offsets[i]\n", + " )\n", + " bend_z_offsets[i] = (\n", + " 0.7 * bend_z_offsets[i - 1] + 0.3 * bend_z_offsets[i]\n", + " )\n", + "\n", + " shift = 2 * radius\n", + " total_length = n_coccus * shift\n", + "\n", + " for i in range(n_coccus):\n", + " # Shift along Y and add realistic random bend\n", + " YR_shifted = YR - i * shift + total_length / 2 - shift / 2\n", + " XR_shifted = XR - bend_x_offsets[i]\n", + " ZR_shifted = ZR - bend_z_offsets[i]\n", + "\n", + " coccus_mask = (\n", + " XR_shifted**2 + YR_shifted**2 + ZR_shifted**2\n", + " ) < radius**2\n", + " mask |= coccus_mask\n", + "\n", + " return mask.astype(float)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "8237d583", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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FzdCJSqeeuqpYMeOHcHRo0eDf//738GkSZOC4uJiN9JHLVy4MBg2bFiwbdu24OOPPw7KyspcyWZnz54N/vOf/7iiX+8//vGP7vl///tfN/33v/+9+7688847waeffupG0I0YMSL44YcfYsuYOnVq8NOf/jTYs2dPsGvXruCGG24IZs2aFWT79tFpTz/9tBshp9+pf/3rX8HPfvYz9/kvXryY9dtn0aJFQWFhofubOnHiRKxcuHAhNs+V/qYaGxuDUaNGBZMnTw727dsXbN68ORgwYEBQXl4eZINFV9hGhw8fDl544QW3bfQ7pH9nI0eODO6+++6MbiPvgkv95S9/cV+eHj16uOHxu3fvDqLooYceCgYNGuS2wzXXXONe6xfH6M74scceC66++uqgV69ewQMPPOC+ZNls+/btboecWHSYtw2Jf+6554KSkhL3H6CJEycGhw4dilvGqVOn3I64T58+boju3Llz3U4927eP7nx0Z6I7ER32PXz48GD+/Pk/+k9htm6fZNtFy9q1a9P6m/rqq6+CadOmBT179nT/kdT/YDY0NATZQK6wjY4dO+ZCqqioyP19XX/99cHy5cuDurq6jG4jftYEAOAVr85xAQBAcAEAvEJwAQC8QnABALxCcAEAvEJwAQC8QnABALxCcAEAvEJwAQC8QnABALxCcAEAvEJwAQDEJ/8HdQEfOHXS4L4AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "strepto = Streptococcus(\n", + " position=(128, 128)\n", + ")\n", + "\n", + "optics = dt.Fluorescence(\n", + " output_region=(0, 0, 256, 256)\n", + ")\n", + "\n", + "pip = optics(strepto)\n", + "\n", + "pip.update()\n", + "image = pip.resolve()\n", + "plt.imshow(image, cmap='gray');" + ] + }, + { + "cell_type": "markdown", + "id": "e33c5716", + "metadata": {}, + "source": [ + "Parameters such as the number of spheres, their radius, and the amount of bending can be adjusted. As with the other examples, several chains can be placed in the same image." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "ccf5786c", + "metadata": {}, + "outputs": [], + "source": [ + "strepto = Streptococcus(\n", + " position=lambda: np.random.uniform(50, 206, 2),\n", + " n_coccus=lambda: np.random.randint(5, 12),\n", + " max_chain_bend=1.5e-6,\n", + " rotation=lambda: np.random.uniform(0, 2*np.pi),\n", + ")\n", + "\n", + "optics = dt.Fluorescence(\n", + " output_region=(0, 0, 256, 256)\n", + ")\n", + "\n", + "pip = optics(strepto ^ 3)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "8edbfff0", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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d/jhh6cTVT755JOuH/nBD37gRowYMaycdNJJtfUffvhhOlP11KlT3ZFHHukuuuiiQybxrBqPPPKIO++889LR+KiPe+65Z9h6xCLdcMMN6fxw48aNc4sWLXIvv/zysG3eeecdd8kll6SDJidPnuwuv/xy95e//MX1Q/1885vfPOSaOuecc/qiflavXu3OOOMMN2HCBDd9+nR3/vnnpxl6LEXuqa1bt7pzzz3XjR8/Pj3OypUr3f79+10VWF2gjr74xS8ecg1deeWVpdZRdML1y1/+0l177bVpmOUf/vAHd9ppp7klS5YMm5iyn/jUpz7ltm3bViuPPvpobd0111zj7r33XnfXXXe5DRs2uDfffNNdeOGFrsq8//776TWBh5sQP/rRj9wtt9zibr/9dvfEE0+4I444Ir1+0CARNMrPP/98OsEpZvpGY79s2TLXD/UDIFT2mrrjjjuGra9q/eAegSg9/vjj6W/bt2+fW7x4cVpnRe+pAwcOpA3yRx995B577DH3s5/9zK1duzZ9WKoCGwrUEbjiiiuGXUO470qtoyQyPvOZzyRXXXVV7fOBAweSWbNmJatXr076jRtvvDE57bTTgut27tyZjB49Ornrrrtqy1588cV0/puNGzcm/QB+69133137fPDgwWRgYCD58Y9/PKyeMHfcHXfckX5+4YUX0v2eeuqp2ja//e1vkxEjRiR//vOfkyrXD7j00kuTr371q5n79FP9DA0Npb91w4YNhe+p+++/Pxk5cmQyODhY2+a2225LJk6cmOzduzepGkNeHYEvfOELyXe+853Mfcqoo6gsLij0pk2bUveOzVuIzxs3bnT9CNxccPscd9xx6ZMwTHCAesLTkK0ruBHnzp3bt3X16quvusHBwWF1glxpcDezTvAK99fpp59e2wbb4zqDhdYPrF+/PnXffOITn3DLly93b7/9dm1dP9UP5okCU6ZMKXxP4fWUU05xM2bMqG0Dix4JZ2GlVo1dXh2Rn//8527atGlu/vz5btWqVW7Pnj21dWXUUVRJdnfs2JGamfYHA3z+05/+5PoNNLgwsdHAwBy/6aab3Oc+9zn33HPPpQ30mDFj0kbGryus60f4u0PXD9fhFY22ZdSoUemN2Q/1BjchXF/z5s1zr7zyirv++uvd0qVL08bmsMMO65v6wQwUV199tTvrrLPSxhcUuafwGrq+uK5KHAzUEfjGN77hjj322PSB+plnnnHf+9730n6wX//616XVUVTCJYaDBoWceuqpqZDhgvnVr36VBh4I0SgXX3xx7T2einFdHX/88akVdvbZZ7t+Af04eAC0fcaiWB3Z/k5cQwiEwrWDByFcS2UQlasQpiee+vwoHnweGBhw/Q6eBE888US3ZcuWtD7gWt25c+ewbfq5rvi7864fvPqBPoh2QiRdP9YbXNC473BN9Uv9rFixIg06efjhh93s2bNry4vcU3gNXV9cVxVWZNRRCDxQA3sNtVpHUQkXzPQFCxa4hx56aJi5is8LFy50/Q5CkvFUgycc1NPo0aOH1RXMdfSB9Wtdwf2FG8PWCfzq6JthneAVDRP6M8i6devS64w3YD/xxhtvpH1cuKaqXj+IV0GDfPfdd6e/CdeLpcg9hddnn312mLgj+g5DBzDxbewkdeooxObNm9NXew21XEdJZNx5551pFNjatWvTCKdly5YlkydPHhah0i9cd911yfr165NXX301+f3vf58sWrQomTZtWhrpA6688spk7ty5ybp165Knn346WbhwYVqqzO7du5M//vGPacHl/a//+q/p+//5n/9J1//zP/9zer385je/SZ555pk0gm7evHnJBx98UDvGOeeck/zVX/1V8sQTTySPPvpo8vGPfzz5+te/nlS9frDuu9/9bhohh2vqd7/7XfLXf/3X6e//8MMPK18/y5cvTyZNmpTeU9u2bauVPXv21Lapd0/t378/mT9/frJ48eJk8+bNyQMPPJAcffTRyapVq5IqsLxOHW3ZsiW5+eab07rBNYT77Ljjjks+//nPl1pH0QkX+MlPfpJePGPGjEnD4x9//PGkH/na176WzJw5M62HY445Jv2MC4egMf7Wt76VHHXUUcn48eOTCy64IL3IqszDDz+cNsh+QZg3Q+K///3vJzNmzEgfgM4+++zkpZdeGnaMt99+O22IjzzyyDRE97LLLksb9arXDxofNCZoRBD2feyxxyZXXHHFIQ+FVa2fUL2grFmzpqF76rXXXkuWLl2ajBs3Ln2QxAPmvn37kirg6tTR1q1bU5GaMmVKen+dcMIJycqVK5Ndu3aVWkea1kQIIURURNXHJYQQQki4hBBCRIWESwghRFRIuIQQQkSFhEsIIURUSLiEEEJEhYRLCCFEVEi4hBBCRIWESwghRFRIuIQQQkSFhEsIIURUSLiEEEK4mPh/KL37HeuecLAAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pip.update()\n", + "image = pip.resolve()\n", + "plt.imshow(image, cmap='gray');" + ] + } + ], + "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.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}