{ "cells": [ { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "# Timelapse of timelapses and z-stacks\n", "\n", "This notebook shows how to repeatedly acquire a short time series and then a z stack at a set with a set delay in between.\n", "\n", "In this example we acquire a time series of `duration = 2` seconds and then a z stack parameterized by\n", "```z_start = -2.5; z_end = 2.5; z_step = 0.25``` every `subset_interval = 20` seconds for `total_duration = 60` seconds. \n", "That is, we acquire data subsets containing a 2 second time series and a 5 micrometer z stack every 20 seconds over the\n", "span of 60 seconds.\n", "\n", "Using `pycro-manager` this set of acquisition events is encoded as follows:\n", "\n", "```\n", "events = []\n", "for s in range(num_subsets):\n", " for t in range(num_time_points):\n", " events.append(\n", " {\n", " \"axes\": {\"subset\": s, \"time\": t, \"z\": 0},\n", " \"z\": z_sequence[0],\n", " \"min_start_time\": s * subset_interval,\n", " }\n", " )\n", " for z in range(num_z_slices):\n", " events.append(\n", " {\n", " \"axes\": {\"subset\": s, \"time\": num_time_points, \"z\": z},\n", " \"z\": z_sequence[z],\n", " \"min_start_time\": s * subset_interval,\n", " }\n", " )\n", "```" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "import numpy as np\n", "\n", "from pycromanager import Acquisition, Core, multi_d_acquisition_events" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Construct java objects" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "mmc = Core()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Set acquisition parameters" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "# Data set parameters\n", "path = r\"C:\\test\"\n", "name = \"pycromanager test\"\n", "total_duration = 60 # in seconds\n", "subset_interval = 20 # in seconds\n", "\n", "# z stack parameters\n", "z_start = -2.5\n", "z_end = 2.5\n", "z_step = 0.25\n", "relative = True\n", "sequence = False\n", "\n", "# time series parameters\n", "duration = 2 # in seconds\n", "framerate = 10\n", "\n", "num_subsets = np.ceil(total_duration / subset_interval).astype(np.int)\n", "num_time_points = duration * framerate\n", "z_sequence = np.arange(z_start, z_end + z_step, z_step)\n", "num_z_slices = len(z_sequence)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Prepare for acquisition" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "# setup cameras -- this property may change depending on the particular camera used\n", "mmc.set_property(\"Camera\", \"Framerate\", framerate)\n", "\n", "# setup z stage\n", "z_stage = mmc.get_focus_device()\n", "\n", "if relative:\n", " z_pos = mmc.get_position(z_stage)\n", "\n", " z_sequence += z_pos\n", "\n", "if sequence:\n", " mmc.set_property(z_stage, \"UseSequence\", \"Yes\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generate events" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "events = []\n", "for s in range(num_subsets):\n", " for t in range(num_time_points):\n", " events.append(\n", " {\n", " \"axes\": {\"subset\": s, \"time\": t, \"z\": 0},\n", " \"z\": z_sequence[0],\n", " \"min_start_time\": s * subset_interval,\n", " }\n", " )\n", " for z in range(num_z_slices):\n", " events.append(\n", " {\n", " \"axes\": {\"subset\": s, \"time\": num_time_points, \"z\": z},\n", " \"z\": z_sequence[z],\n", " \"min_start_time\": s * subset_interval,\n", " }\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Acquire data" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "with Acquisition(directory=path, name=name) as acq:\n", " acq.acquire(events)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.6" } }, "nbformat": 4, "nbformat_minor": 4 }