{ "cells": [ { "cell_type": "markdown", "id": "2c53ef83-4e2a-4c73-b385-98cd5feb3010", "metadata": {}, "source": [ "# Pulse Timing and Plotting\n", "\n", "## Overview\n", "This document describes the procedures and methods for pulse timing and plotting typical of a Particle Image Velocimetry (PIV) experiment. PIV is an optical method of flow visualization used to obtain instantaneous velocity measurements and related properties in fluid flows. Accurate timing of pulsed illumination sources and imagining devices (e.g., cameras) is key for this measurement technique to work as intended. A timing device ensures that all comonents of a PIV experiment are operating at the intended frequency. The pulse pattern of a timing device directly contributes the performance of a PIV system. This is why it is important to understand how to create pulse patterns and create a visualization of them for further data-informed decisions.\n", "\n", "## Purpose\n", "This example creates a simple pulse sequence and plots it for visualization purposes. In a typical experiement, the pulse parameters will be loaded into an OpenSync device once they are deemed sufficient for the purpose of the experiment being performed. However, the loading and executing of pulse sequences will not be discussed in this document." ] }, { "cell_type": "markdown", "id": "064bbdb1-6317-4a19-929d-9a2030e1065f", "metadata": {}, "source": [ "## Creating the Pulse Paramters\n", "There are several ways of creating pulse parameters of which the most simple one will be discussed below. The pulse sequence we are trying to model is a single camera and a dual-head flashlamp-pumped laser. A dual-head flashlamp-pumped laser consists of four inputs: flashlamp 1, flashlamp 2, q-switch 1, and q-switch 2. The flashlamps in this case need to be turned on 160 microseconds before the active q-switch and each pulse needs to be 50 microseconds wide. For the purposes of this demonstration, the itnerframe tiem between laser pulses will be 300 microseconds. The camera will be externally triggered so that the exposure is synchronized with the laser pulses. The exposure of the camera is internally set to 2,000 microseconds, so we do not have to worry about externally controlling the exposure. Finally, the external trigger for the camera must be 25 microseconds long." ] }, { "cell_type": "markdown", "id": "418b0f87-84d0-4162-bc94-9a71ad051462", "metadata": {}, "source": [ "## Imports\n", "To begin, we need to import some functions from the package opensync and matplotlib" ] }, { "cell_type": "code", "execution_count": 1, "id": "2daf35e9-7d28-4a78-8f22-5309348ff233", "metadata": {}, "outputs": [], "source": [ "from matplotlib import pyplot as plt\n", "import opensync" ] }, { "cell_type": "markdown", "id": "0e9a1e22-52a1-4cc7-991a-8c71061c93f3", "metadata": {}, "source": [ "## Create the Pulse Parameters Structure\n", "All pulse paramters in this instance are held using a dictionary structure. The dictionary structure contains information for external triggers, repetition rate, and the state of each channel." ] }, { "cell_type": "code", "execution_count": 2, "id": "e11bc861-0b1f-4fa2-b048-c056700fab9f", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "{'channel_0': {'name': 'channel_0',\n", " 'state': False,\n", " 'divider': 1,\n", " 'data': [],\n", " 'wcounter': 0,\n", " 'bcounter': 0,\n", " 'pcounter': 1,\n", " 'ocounter': 0,\n", " 'sync': 't0',\n", " 'output_level': 'lvttl'},\n", " 'channel_1': {'name': 'channel_1',\n", " 'state': False,\n", " 'divider': 1,\n", " 'data': [],\n", " 'wcounter': 0,\n", " 'bcounter': 0,\n", " 'pcounter': 1,\n", " 'ocounter': 0,\n", " 'sync': 't0',\n", " 'output_level': 'lvttl'},\n", " 'channel_2': {'name': 'channel_2',\n", " 'state': False,\n", " 'divider': 1,\n", " 'data': [],\n", " 'wcounter': 0,\n", " 'bcounter': 0,\n", " 'pcounter': 1,\n", " 'ocounter': 0,\n", " 'sync': 't0',\n", " 'output_level': 'lvttl'},\n", " 'channel_3': {'name': 'channel_3',\n", " 'state': False,\n", " 'divider': 1,\n", " 'data': [],\n", " 'wcounter': 0,\n", " 'bcounter': 0,\n", " 'pcounter': 1,\n", " 'ocounter': 0,\n", " 'sync': 't0',\n", " 'output_level': 'lvttl'},\n", " 'channel_4': {'name': 'channel_4',\n", " 'state': False,\n", " 'divider': 1,\n", " 'data': [],\n", " 'wcounter': 0,\n", " 'bcounter': 0,\n", " 'pcounter': 1,\n", " 'ocounter': 0,\n", " 'sync': 't0',\n", " 'output_level': 'lvttl'},\n", " 'channel_5': {'name': 'channel_5',\n", " 'state': False,\n", " 'divider': 1,\n", " 'data': [],\n", " 'wcounter': 0,\n", " 'bcounter': 0,\n", " 'pcounter': 1,\n", " 'ocounter': 0,\n", " 'sync': 't0',\n", " 'output_level': 'lvttl'},\n", " 'channel_6': {'name': 'channel_6',\n", " 'state': False,\n", " 'divider': 1,\n", " 'data': [],\n", " 'wcounter': 0,\n", " 'bcounter': 0,\n", " 'pcounter': 1,\n", " 'ocounter': 0,\n", " 'sync': 't0',\n", " 'output_level': 'lvttl'},\n", " 'channel_7': {'name': 'channel_7',\n", " 'state': False,\n", " 'divider': 1,\n", " 'data': [],\n", " 'wcounter': 0,\n", " 'bcounter': 0,\n", " 'pcounter': 1,\n", " 'ocounter': 0,\n", " 'sync': 't0',\n", " 'output_level': 'lvttl'}}" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pulse_params = opensync.get_pulse_params()\n", "pulse_params" ] }, { "cell_type": "markdown", "id": "d1c0708a-da89-4188-96fb-5b8503d845e4", "metadata": {}, "source": [ "## Populate the Pulse Paramters Structure\n", "With the structure created, we can now populate the necessary channels with the pulse information as needed." ] }, { "cell_type": "code", "execution_count": 3, "id": "6178a87d-b853-4615-9a29-fb47d8f30598", "metadata": {}, "outputs": [], "source": [ "exposure = 2000\n", "exposure_blind_time = 50\n", "\n", "exposure_1_end = exposure\n", "exposure_2_start = exposure\n", "\n", "interframe_time = 300\n", "half_inter_time = interframe_time // 2\n", "\n", "flash_delay = 160\n", "ttl_pulse_width = 50\n", "\n", "# Camera pulse sequence\n", "pulse_params = opensync.config_pulse_insert(\n", " pulse_params,\n", " [\n", " [0, 25]\n", " ],\n", " channel_id=0,\n", " channel_name='camera trigger',\n", " units='us'\n", ")\n", "\n", "# Camera exposure for visualization purposes\n", "pulse_params = opensync.config_pulse_insert(\n", " pulse_params,\n", " [\n", " [\n", " 0, \n", " exposure_1_end\n", " ],\n", " [\n", " exposure_2_start + exposure_blind_time, \n", " exposure_2_start + exposure_blind_time + exposure\n", " ]\n", " ],\n", " channel_id=1,\n", " channel_name='camera exposure',\n", " units='us'\n", ")\n", "\n", "# q-swtich 1\n", "pulse_params = opensync.config_pulse_insert(\n", " pulse_params,\n", " [\n", " [\n", " exposure_1_end - half_inter_time,\n", " exposure_1_end + ttl_pulse_width - half_inter_time,\n", " ]\n", " ],\n", " channel_id=2,\n", " channel_name='q-swtich 1',\n", " units='us'\n", ")\n", "\n", "# q-switch 2\n", "pulse_params = opensync.config_pulse_insert(\n", " pulse_params,\n", " [\n", " [\n", " exposure_2_start + half_inter_time,\n", " exposure_2_start + ttl_pulse_width + half_inter_time\n", " ]\n", " ],\n", " channel_id=3,\n", " channel_name='q-swtich 2',\n", " units='us'\n", ")\n", "\n", "# flashlamp 1\n", "pulse_params = opensync.config_pulse_insert(\n", " pulse_params,\n", " [\n", " [\n", " exposure_1_end - flash_delay - half_inter_time,\n", " exposure_1_end - flash_delay + ttl_pulse_width - half_inter_time\n", " ]\n", " ],\n", " channel_id=4,\n", " channel_name='flashlamp 1',\n", " units='us'\n", ")\n", "\n", "# flashlamp 2\n", "pulse_params = opensync.config_pulse_insert(\n", " pulse_params,\n", " [\n", " [\n", " exposure_2_start - flash_delay + half_inter_time,\n", " exposure_2_start - flash_delay + ttl_pulse_width + half_inter_time\n", " ]\n", " ],\n", " channel_id=5,\n", " channel_name='flashlamp 2',\n", " units='us'\n", ")" ] }, { "cell_type": "markdown", "id": "5d789fdb-5c95-45da-bdcb-1df6575ce1ee", "metadata": {}, "source": [ "## Plotting the Pulse Parameters\n", "To visualize the pulse paramters, we can create a plot and observe the results. The plotting utilities in OpenSync do not create matplotlib plotting instances, so we have to do that manually." ] }, { "cell_type": "code", "execution_count": 4, "id": "7bb3a62b-4b5a-4869-b9a4-b9dbc90f9813", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "opensync.get_pulse_plot(\n", " pulse_params, \n", " ax,\n", " units='us'\n", ")\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "id": "185f580b-d37c-4ace-8af8-34a2baec0712", "metadata": {}, "source": [ "It may also be advantageous to remove any unused output channels from the plot. Setting `skip_empty` to true in `get_pulse_plot` will remove any high level output channels that are not being used from the plot to reduce redundant data." ] }, { "cell_type": "code", "execution_count": 5, "id": "fdf52308-ecf6-4cae-9d29-9d601e21dbb9", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "opensync.get_pulse_plot(\n", " pulse_params, \n", " ax, \n", " skip_empty=True,\n", " units='us'\n", ")\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "id": "480df26b-7435-4401-a7fa-8fd886acba14", "metadata": {}, "source": [ "## Configuring Pulse Operation\n", "So far, we only touched the basics of adding pulse instruction to the pulse sequencers. As an additional example, we will also program the pulse sequencer counters. The counters select when to perform the pulse sequence. For instance, we may want to wait 1,000 flashlamp cycles to warm up the laser before acquiring images. Additionally, external trigger event may occur at a rate too quickly for a laser to handle. As such, a basic workflow is presented below for a hypothetical experiment where laser warmup is required and images are acquired on every third trigger." ] }, { "cell_type": "markdown", "id": "e334d366-d775-4dab-91ec-fd6d370efe4a", "metadata": {}, "source": [ "### Wait Counter\n", "The wait counter sets how many clock sequencer events (aka `T0`) events to ignore. For a laser setup where 1,000 flashlamp pulses are to be sent before measurements, setting `wcounter` to 1,000 for all channels except for flashlamps will generally accomplish this." ] }, { "cell_type": "code", "execution_count": 11, "id": "9d644b02-d644-4d9b-923f-eefd751916d6", "metadata": {}, "outputs": [], "source": [ "# Camera trigger\n", "pulse_params = opensync.config_pulse_wcounter(\n", " pulse_params,\n", " count=1000,\n", " channel_id=0\n", ")" ] }, { "cell_type": "code", "execution_count": 12, "id": "e6b19cf9-ec95-44c3-9657-90d1f86a9733", "metadata": {}, "outputs": [], "source": [ "# Camera Exposure\n", "pulse_params = opensync.config_pulse_wcounter(\n", " pulse_params,\n", " count=1000,\n", " channel_id=1\n", ")" ] }, { "cell_type": "code", "execution_count": 13, "id": "b2ce4f0e-35d0-4d30-b91a-5f5833333707", "metadata": {}, "outputs": [], "source": [ "# Q-switch 1\n", "pulse_params = opensync.config_pulse_wcounter(\n", " pulse_params,\n", " count=1000,\n", " channel_id=2\n", ")" ] }, { "cell_type": "code", "execution_count": 14, "id": "6af37ada-497d-4b60-9f2f-dfb2bb5d18fc", "metadata": {}, "outputs": [], "source": [ "# Q-switch 2\n", "pulse_params = opensync.config_pulse_wcounter(\n", " pulse_params,\n", " count=1000,\n", " channel_id=3\n", ")" ] }, { "cell_type": "markdown", "id": "331145a6-156e-404a-a22d-b6699a4c25f4", "metadata": {}, "source": [ "### Pulse and Off Counters\n", "The pulse and off counters select the pattern of which `T0` event triggers a pulse sequqnce. As the name describes, the pulse counter is how many consecutive `T0` events are pulse events. Likewise, the off counter is the number of consecutive `T0` events that do not produce pulse events. Some commercial digital delay/pulse generator have a divide-by-n function where every nth event is skipped. In OpenSync, this is accomplished using the off counter. For our example, we want to skip two triggers before starting a pulse sequence. This can be accplished by setting the pulse counter to 1 and off counter to 2 for all channels." ] }, { "cell_type": "code", "execution_count": 18, "id": "504ab08a-4ba3-4325-93dd-daf8b3556dcf", "metadata": {}, "outputs": [], "source": [ "# Since we use the first six channels consecutively, we can simply loop over them\n", "for i in range(6):\n", " pulse_params = opensync.config_pulse_pcounter(\n", " pulse_params,\n", " count=1,\n", " channel_id=i\n", " )\n", " \n", " pulse_params = opensync.config_pulse_ocounter(\n", " pulse_params,\n", " count=2,\n", " channel_id=i\n", " )" ] }, { "cell_type": "code", "execution_count": null, "id": "9e097f02-eb90-400d-b173-0b8ef8d342d7", "metadata": {}, "outputs": [], "source": [] } ], "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.12.8" } }, "nbformat": 4, "nbformat_minor": 5 }