{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Output scan(s) to a SPEC data file." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One of the common concerns is how to access data from bluesky's database. The standard way is to replay the document stream from each of the scans through a bluesky callback that writes the data to the desired file format. Here, we write data to the SPEC file format.\n", "\n", "## Setup\n", "\n", "First, we must setup a bluesky session. We create a [temporary catalog](https://blueskyproject.io/databroker/how-to/file-backed-catalog.html?highlight=temporary#temporary-catalog) to store the data from this notebook's data collection." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "plt.ion()\n", "\n", "from bluesky import RunEngine, plans as bp\n", "from bluesky.callbacks.best_effort import BestEffortCallback\n", "import databroker\n", "\n", "cat = databroker.temp()\n", "RE = RunEngine({})\n", "RE.subscribe(cat.v1.insert)\n", "RE.subscribe(BestEffortCallback())" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "SPEC data files usually contain a list of all the motor positions at the start of each scan. Starting with apstools release 1.6.11, it became possible to have the list of all ophyd-labeled `motor` devices logged to a separate stream at the start of every scan. The next configuration will create a `label_start_motor` stream with the positions. The `SpecWriterCallback` will find this stream and record the motor names and values in the `#O` and `#P` control lines, respectively." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from apstools.plans import label_stream_wrapper\n", "\n", "def motor_start_preprocessor(plan):\n", " return label_stream_wrapper(plan, \"motor\", when=\"start\")\n", "\n", "RE.preprocessors.append(motor_start_preprocessor)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We need to create some scan data. We'll use Gaussian peak profile calculated in a _userCalc_ (`swait` record) and a motor from our EPICS IOC simulator `gp:`. Initialize the peak computation with some randomized parameters. The peak will be at some `motor` position between -1 .. +1. Print the actual values for our reference later on." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "calc = D*(0.95+E*RNDM)/exp(((A-b)/c)^2)\n", "A: x = gp:m1.RBV\n", "B: center = -0.10578292257195432\n", "C: width = 0.08364992146414521\n", "D: scale = 100371.09148167742\n", "E: noise= 0.05133473921276364\n" ] } ], "source": [ "from apstools.devices import UserCalcN, setup_gaussian_swait\n", "import numpy as np\n", "from ophyd import EpicsMotor, EpicsSignal\n", "\n", "IOC = \"gp:\"\n", "motor = EpicsMotor(f\"{IOC}m1\", name=\"motor\", labels=[\"motor\"])\n", "# define some extra motors to demonstrate #O & #P lines\n", "omega = EpicsMotor(f\"{IOC}m2\", name=\"omega\", labels=[\"motor\"])\n", "chi = EpicsMotor(f\"{IOC}m3\", name=\"chi\", labels=[\"motor\"])\n", "phi = EpicsMotor(f\"{IOC}m4\", name=\"phi\", labels=[\"motor\"])\n", "ttheta = EpicsMotor(f\"{IOC}m5\", name=\"ttheta\", labels=[\"motor\"])\n", "atth = EpicsMotor(f\"{IOC}m6\", name=\"atth\", labels=[\"motor\"])\n", "mx = EpicsMotor(f\"{IOC}m7\", name=\"mx\", labels=[\"motor\"])\n", "my = EpicsMotor(f\"{IOC}m8\", name=\"my\", labels=[\"motor\"])\n", "mz = EpicsMotor(f\"{IOC}m9\", name=\"mz\", labels=[\"motor\"])\n", "swait = UserCalcN(f\"{IOC}userCalc1\", name=\"swait\")\n", "det = EpicsSignal(swait.calculated_value.pvname, name=\"det\")\n", "\n", "motor.wait_for_connection()\n", "swait.wait_for_connection()\n", "det.wait_for_connection()\n", "\n", "setup_gaussian_swait(\n", " swait, motor.user_readback, \n", " center=-0.5 + np.random.uniform(), \n", " width=0.01 + 0.2*np.random.uniform(), \n", " noise=0.05*(.95 + .1*np.random.uniform()),\n", " scale=100_000*(.95 + .1*np.random.uniform()), \n", " )\n", "\n", "print(f\"calc = {swait.calculation.get()}\")\n", "print(f\"A: x = {swait.channels.A.input_pv.get()}\")\n", "print(f\"B: center = {swait.channels.B.input_value.get()}\")\n", "print(f\"C: width = {swait.channels.C.input_value.get()}\")\n", "print(f\"D: scale = {swait.channels.D.input_value.get()}\")\n", "print(f\"E: noise= {swait.channels.E.input_value.get()}\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, run the scan with the RunEngine:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "Transient Scan ID: 1 Time: 2025-11-25 10:47:31\n", "Persistent Unique Scan ID: 'de507b9d-c75b-465b-94f7-a7797b983f44'\n", "New stream: 'label_start_motor'\n", "New stream: 'primary'\n", "+-----------+------------+------------+------------+\n", "| seq_num | time | motor | det |\n", "+-----------+------------+------------+------------+\n", "| 1 | 10:47:36.5 | -1.2000 | 0.00000 |\n", "| 2 | 10:47:36.8 | -1.1400 | 0.00000 |\n", "| 3 | 10:47:37.1 | -1.0800 | 0.00000 |\n", "| 4 | 10:47:37.4 | -1.0200 | 0.00000 |\n", "| 5 | 10:47:37.7 | -0.9600 | 0.00000 |\n", "| 6 | 10:47:38.0 | -0.9000 | 0.00000 |\n", "| 7 | 10:47:38.3 | -0.8400 | 0.00000 |\n", "| 8 | 10:47:38.6 | -0.7800 | 0.00000 |\n", "| 9 | 10:47:38.9 | -0.7200 | 0.00000 |\n", "| 10 | 10:47:39.2 | -0.6600 | 0.00000 |\n", "| 11 | 10:47:39.5 | -0.6000 | 0.00000 |\n", "| 12 | 10:47:39.8 | -0.5400 | 0.00000 |\n", "| 13 | 10:47:40.1 | -0.4800 | 0.00020 |\n", "| 14 | 10:47:40.4 | -0.4200 | 0.07199 |\n", "| 15 | 10:47:40.7 | -0.3600 | 9.70544 |\n", "| 16 | 10:47:41.0 | -0.3000 | 444.92528 |\n", "| 17 | 10:47:41.3 | -0.2400 | 7559.36977 |\n", "| 18 | 10:47:41.6 | -0.1800 | 44718.83240 |\n", "| 19 | 10:47:41.9 | -0.1200 | 93527.29018 |\n", "| 20 | 10:47:42.2 | -0.0600 | 72688.52312 |\n", "| 21 | 10:47:42.5 | 0.0000 | 19567.78836 |\n", "| 22 | 10:47:42.8 | 0.0600 | 1927.74181 |\n", "| 23 | 10:47:43.1 | 0.1200 | 67.65720 |\n", "| 24 | 10:47:43.4 | 0.1800 | 0.82258 |\n", "| 25 | 10:47:43.7 | 0.2400 | 0.00377 |\n", "| 26 | 10:47:44.0 | 0.3000 | 0.00001 |\n", "| 27 | 10:47:44.3 | 0.3600 | 0.00000 |\n", "| 28 | 10:47:44.6 | 0.4200 | 0.00000 |\n", "| 29 | 10:47:44.9 | 0.4800 | 0.00000 |\n", "| 30 | 10:47:45.2 | 0.5400 | 0.00000 |\n", "| 31 | 10:47:45.5 | 0.6000 | 0.00000 |\n", "| 32 | 10:47:45.8 | 0.6600 | 0.00000 |\n", "| 33 | 10:47:46.1 | 0.7200 | 0.00000 |\n", "| 34 | 10:47:46.4 | 0.7800 | 0.00000 |\n", "| 35 | 10:47:46.7 | 0.8400 | 0.00000 |\n", "| 36 | 10:47:47.0 | 0.9000 | 0.00000 |\n", "| 37 | 10:47:47.3 | 0.9600 | 0.00000 |\n", "| 38 | 10:47:47.6 | 1.0200 | 0.00000 |\n", "| 39 | 10:47:47.9 | 1.0800 | 0.00000 |\n", "| 40 | 10:47:48.2 | 1.1400 | 0.00000 |\n", "| 41 | 10:47:48.5 | 1.2000 | 0.00000 |\n", "+-----------+------------+------------+------------+\n", "generator scan ['de507b9d'] (scan num: 1)\n", "\n", "\n", "\n" ] }, { "data": { "text/plain": [ "('de507b9d-c75b-465b-94f7-a7797b983f44',)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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kaVLl+bee+/NQw89lPPOO2+3+1xyySW55557smjRovzoRz/KCy+8kNNPP739+ZUrV2bEiBG544478sQTT+TKK6/MvHnzcsstt/T06QDAfkumA0Dlk+cAsO+qSqVSqdxD7MmTTz6Zo48+Oo8++mgmTZqUJFmyZEne/e5359e//nVGjRr1mn1aWloyfPjwLFy4MGeccUaSZM2aNTnqqKPS2NiYE044YafHOv/88/Pkk0/m/vvv7/R8ra2tqa2tTUtLSwYPHtyFMwSAfVMpWdSbM71SriEAfVelZFFvzvOkcq4jAH1XZ7OoIt4539jYmCFDhrSHfpJMnz491dXVefjhh3e6z8qVK7N9+/ZMnz69fdu4ceMyduzYNDY27vJYLS0tOfjgg3c7z9atW9Pa2trhAQDsWW/KdHkOAF3Tm/I8kekAVK6KKOebmpoyYsSIDtv69++fgw8+OE1NTbvcp6amJkOGDOmwfeTIkbvcZ/ny5bnrrrv2+FG8+fPnp7a2tv0xZsyYzp8MAOzHelOmy3MA6JrelOeJTAegcpW1nL/88stTVVW128eaNWsKmWX16tV5//vfn2uvvTbvfOc7d7t23rx5aWlpaX+sW7eukBkBoLeqxEyX5wDQUSXmeSLTAahc/ct58EsvvTRnn332btccccQRqaury/r16zts/8Mf/pCNGzemrq5up/vV1dVl27Zt2bRpU4ffzDc3N79mn5///OeZNm1azjvvvFx11VV7nHvgwIEZOHDgHtcBwP6iEjNdngNAR5WY54lMB6BylbWcHz58eIYPH77HdVOnTs2mTZuycuXKTJw4MUly//33p62tLVOmTNnpPhMnTsyAAQOybNmyzJw5M0ny1FNPZe3atZk6dWr7uieeeCLveMc7MmfOnPzN3/xNN5wVAOx/ZDoAVD55DgDFqiqVSqVyD9EZp556apqbm7NgwYJs374955xzTiZNmpSFCxcmSZ5//vlMmzYt3/72tzN58uQkyac+9ancd999uf322zN48OBceOGFSf5437rkjx+Te8c73pH6+vp89atfbT9Wv379OvUPklf5JngAyq2Ssqi3ZnolXUMA+qZKyqLemudJZV1HAPqmzmZRWd85vze++93v5oILLsi0adNSXV2dmTNn5mtf+1r789u3b89TTz2VV155pX3bjTfe2L5269atqa+vz9e//vX25+++++5s2LAhd9xxR+6444727Yceemj+3//7f4WcFwDsb2Q6AFQ+eQ4A+65i3jnfm/mtPADlJov2nWsIQLnJou7hOgJQbp3NouoCZwIAAAAAAKKcBwAAAACAwinnAQAAAACgYMp5AAAAAAAomHIeAAAAAAAKppwHAAAAAICCKecBAAAAAKBgynkAAAAAACiYch4AAAAAAAqmnAcAAAAAgIIp5wEAAAAAoGDKeQAAAAAAKJhyHgAAAAAACqacBwAAAACAginnAQAAAACgYMp5AAAAAAAomHIeAAAAAAAKppwHAAAAAICCKecBAAAAAKBgynkAAAAAACiYch4AAAAAAAqmnAcAAAAAgIIp5wEAAAAAoGDKeQAAAAAAKJhyHgAAAAAACqacBwAAAACAginnAQAAAACgYMp5AAAAAAAomHIeAAAAAAAKppwHAAAAAICCKecBAAAAAKBgynkAAAAAACiYch4AAAAAAAqmnAcAAAAAgIIp5wEAAAAAoGDKeQAAAAAAKJhyHgAAAAAACqacBwAAAACAginnAQAAAACgYMp5AAAAAAAomHIeAAAAAAAKppwHAAAAAICCKecBAAAAAKBgynkAAAAAACiYch4AAAAAAAqmnAcAAAAAgIIp5wEAAAAAoGDKeQAAAAAAKJhyHgAAAAAACqacBwAAAACAginnAQAAAACgYMp5AAAAAAAomHIeAAAAAAAKppwHAAAAAICCKecBAAAAAKBgynkAAAAAACiYch4AAAAAAAqmnAcAAAAAgIIp5wEAAAAAoGDKeQAAAAAAKJhyHgAAAAAACqacBwAAAACAginnAQAAAACgYMp5AAAAAAAomHIeAAAAAAAKppwHAAAAAICCKecBAAAAAKBgFVPOb9y4MWeeeWYGDx6cIUOGZO7cuXn55Zd3u8+WLVty/vnnZ+jQoXnd616XmTNnprm5eadrf/Ob3+SNb3xjqqqqsmnTph44AwAgkekA0BfIcwDYdxVTzp955pl54oknsnTp0tx777156KGHct555+12n0suuST33HNPFi1alB/96Ed54YUXcvrpp+907dy5c3Psscf2xOgAwH8j0wGg8slzANh3VaVSqVTuIfbkySefzNFHH51HH300kyZNSpIsWbIk7373u/PrX/86o0aNes0+LS0tGT58eBYuXJgzzjgjSbJmzZocddRRaWxszAknnNC+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1q1b2//e0tKS5I8XHQDK4dUM6u2/c+9NmS7PAeht5LnX6AD0DZ3N9Ioo55uamjJixIgO2/r375+DDz44TU1Nu9ynpqYmQ4YM6bB95MiR7fv86le/SltbW774xS/m5ptvTm1tba666qr8r//1v/L444+npqZmpz97/vz5ue66616zfXf/WACAIvzud79LbW1tucfYpd6U6fIcgN5KnnuNDkDfsKdML2s5f/nll+fLX/7ybtc8+eSTPXb8tra2bN++PV/72tfyzne+M0nyT//0T6mrq8sDDzywy/vazZs3Lw0NDR1+zsaNGzN06NBUVVX12Ly9VWtra8aMGZN169b5yGAPcp2L41oXw3XuXqVSKb/73e92+jHyIlRipsvzjvw/WRzXuhiuc3Fc6+4jz71G7w7+nyyG61wc17oYrnP36myml7Wcv/TSS3P22Wfvds0RRxyRurq6rF+/vsP2P/zhD9m4cWPq6up2ul9dXV22bduWTZs2dfjNfHNzc/s+hxxySJLk6KOPbn9++PDhGTZsWNauXbvLmQYOHJiBAwd22Panv/3fHw0ePNj/vAVwnYvjWhfDde4+5XyHXSVmujzfOf9PFse1LobrXBzXunvIc6/Ru4v/J4vhOhfHtS6G69x9OpPpZS3nhw8fnuHDh+9x3dSpU7Np06asXLkyEydOTJLcf//9aWtry5QpU3a6z8SJEzNgwIAsW7YsM2fOTJI89dRTWbt2baZOnZok+Yu/+Iv27W984xuTJBs3bsxLL72UQw89dJ/PDwD2FzIdACqfPAeAYlWXe4DOOOqoo/Kud70r5557bh555JH8+7//ey644IJ8+MMfbv9owPPPP59x48blkUceSfLH30zMnTs3DQ0NeeCBB7Jy5cqcc845mTp1ak444YQkyf/4H/8j73//+3PxxRdn+fLlWb16debMmZNx48bl7W9/e9nOFwD6KpkOAJVPngNA96iIcj5Jvvvd72bcuHGZNm1a3v3ud+ekk07Kbbfd1v789u3b89RTT+WVV15p33bjjTfmPe95T2bOnJmTTz45dXV1+f73v9/h537729/OlClTctppp+WUU07JgAEDsmTJkgwYMKCwc6t0AwcOzLXXXvuajxHSvVzn4rjWxXCd918yvXfy/2RxXOtiuM7Fca33T/K89/L/ZDFc5+K41sVwncujqlQqlco9BAAAAAAA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8wAAAAAAUDTlPAAAAAAAFEw5DwAAAAAABVPOAwAAAABAwZTzAPQJbW1t5R6hx+0P5wjA/m1/yLr94RwBYH/Iu+44x/7dMAcAlE1NTU2qq6vzwgsvZPjw4ampqUlVVVW5x+pWpVIp27Zty4YNG1JdXZ2amppyjwQA3UqeA0DfINP3jnIegIpWXV2dww8/PC+++GJeeOGFco/Tow488MCMHTs21dU++AZA3yLPAaBvkOl7RzkPQMWrqanJ2LFj84c//CE7duwo9zg9ol+/funfv3+fe8cBALxKngNA3yDTO085D0CfUFVVlQEDBmTAgAHlHgUA6CJ5DgB9g0zvHJ+jAwAAAACAginnAQAAAACgYMp5AAAAAAAomHIeAAAAAAAKppwHAAAAAICCKecBAAAAAKBgynkAAAAAACiYch4AAAAAAAqmnAcAAAAAgIIp5wEAAAAAoGDKeQAAAAAAKJhyHgAAAAAACqacBwAAAACAginnAQAAAACgYMp5AAAAAAAomHIeAAAAAAAKppwHAAAAAICCKecBAAAAAKBgynkAAAAAACiYch4AAAAAAAqmnAcAAAAAgIIp5wEAAAAAoGDKeQAAAAAAKJhyHgAAAAAACqacBwAAAACAginnAQAAAACgYMp5AAAAAAAomHIeAAAAAAAKppwHAAAAAICCKecBAAAAAKBgynkAAAAAACiYch4AAAAAAAqmnAcAAAAAgIIp5wEAAAAAoGDKeQAAAAAAKJhyHgAAAAAACqacBwAAAACAginnAQAAAACgYMp5AAAAAAAoWMWV87feemsOO+ywDBo0KFOmTMkjjzyy2/WLFi3KuHHjMmjQoIwfPz733XffLtd+8pOfTFVVVW666aZunhoA+FMyHQAqnzwHgK6rqHL+rrvuSkNDQ6699tqsWrUqxx13XOrr67N+/fqdrl++fHlmz56duXPn5rHHHsuMGTMyY8aMrF69+jVr//mf/zk//elPM2rUqJ4+DQDY78l0AKh88hwA9k1FlfM33HBDzj333Jxzzjk5+uijs2DBghx44IH51re+tdP1N998c971rnflsssuy1FHHZW//uu/zp//+Z/nlltu6bDu+eefz4UXXpjvfve7GTBgQBGnAgD7NZkOAJVPngPAvqmYcn7btm1ZuXJlpk+f3r6turo606dPT2Nj4073aWxs7LA+Serr6zusb2tr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KlfFvHO+pqYmEydOzLJly9q3tbW1ZdmyZZk6depO95k6dWqH9UmydOnSDutfDf2nn346//Zv/5ahQ4f2zAkAAElkOgD0BfIcAPZdxbxzPkkaGhoyZ86cTJo0KZMnT85NN92UzZs355xzzkmSnHXWWRk9enTmz5+fJLn44otzyimn5Prrr89pp52WO++8MytWrMhtt92W5I+hf8YZZ2TVqlW59957s2PHjvZ73R188MGpqakpz4kCQB8n0wGg8slzANg3FVXOz5o1Kxs2bMg111yTpqamTJgwIUuWLGn/Qpm1a9emuvq/Pgxw4oknZuHChbnqqqtyxRVX5Mgjj8zixYtzzDHHJEmef/75/Mu//EuSZMKECR2O9cADD+Rtb3tbIecFAPsbmQ4AlU+eA8C+qSqVSqVyD1HpWltbU1tbm5aWlj3eCw8AeoIs2neuIQDlJou6h+sIQLl1Nosq5p7zAAAAAADQVyjnAQAAAACgYMp5AAAAAAAomHIeAAAAAAAKppwHAAAAAICCKecBAAAAAKBgynkAAAAAACiYch4AAAAAAAqmnAcAAAAAgIIp5wEAAAAAoGDKeQAAAAAAKJhyHgAAAAAACqacBwAAAACAginnAQAAAACgYMp5AAAAAAAomHIeAAAAAAAKppwHAAAAAICCKecBAAAAAKBgynkAAAAAACiYch4AAAAAAAqmnAcAAAAAgIIp5wEAAAAAoGDKeQAAAAAAKJhyHgAAAAAACqacBwAAAACAginnAQAAAACgYMp5AAAAAAAomHIeAAAAAAAKppwHAAAAAICCKecBAAAAAKBgynkAAAAAACiYch4AAAAAAAqmnAcAAAAAgIIp5wEAAAAAoGDKeQAAAAAAKJhyHgAAAAAACqacBwAAAACAginnAQAAAACgYMp5AAAAAAAomHIeAAAAAAAKppwHAAAAAICCKecBAAAAAKBgynkAAAAAACiYch4AAAAAAAqmnAcAAAAAgIIp5wEAAAAAoGDKeQAAAAAAKJhyHgAAAAAACqacBwAAAACAginnAQAAAACgYP3LPQAAAACwb1asWJH/83/+T9auXZtt27Z1eO773/9+maYCAHbHO+cBAACggt1555058cQT8+STT+af//mfs3379jzxxBO5//77U1tbW+7xAIBdUM4DAABABfviF7+YG2+8Mffcc09qampy8803Z82aNfnQhz6UsWPHlns8AGAXlPMAAABQwX75y1/mtNNOS5LU1NRk8+bNqaqqyiWXXJLbbrutzNMBALuinAcAAIAK9oY3vCG/+93vkiSjR4/O6tWrkySbNm3KK6+8Us7RAIDd8IWwAAAAUMFOPvnkLF26NOPHj88HP/jBXHzxxbn//vuzdOnSTJs2rdzjAQC7oJwHAACACnbLLbdky5YtSZIrr7wyAwYMyPLlyzNz5sxcddVVZZ4OANgV5TwAAABUsIMPPrj9z9XV1bn88svLOA0A0FnKeQAAAKhgra2tO91eVVWVgQMHpqampuCJAIDOUM4DAABABRsyZEiqqqp2+fwb3/jGnH322bn22mtTXV1d4GQAwO4o5wEAAKCC3X777bnyyitz9tlnZ/LkyUmSRx55JP/4j/+Yq666Khs2bMjf/u3fZuDAgbniiivKPC0A8CrlPAAAAFSwf/zHf8z111+fD33oQ+3b3vve92b8+PH53//7f2fZsmUZO3Zs/uZv/kY5DwC9iM+zAQAAQAVbvnx53vrWt75m+1vf+tY0NjYmSU466aSsXbu26NEAgN3oUjn/q1/9qrvnAAAAALpgzJgx+eY3v/ma7d/85jczZsyYJMlvfvObvOENbyh6NABgN7p0W5s3v/nNOeWUUzJ37tycccYZGTRoUHfPBQAU4KGHHsq4ceMyYsSIDtu3b9+exsbGnHzyyWWaDADorL/927/NBz/4wfzf//t/c/zxxydJVqxYkTVr1uTuu+9Okjz66KOZNWtWOccEAP5El945v2rVqhx77LFpaGhIXV1d/vIv/zKPPPJId88GAPSwt73tbTnuuOPy05/+tMP2jRs35u1vf3uZpgIA9sb73ve+rFmzJqeeemo2btyYjRs35tRTT82aNWvynve8J0nyqU99KjfccEOZJwUA/rsulfMTJkzIzTffnBdeeCHf+ta38uKLL+akk07KMccckxtuuCEbNmzo7jkBgB7y4Q9/ONOmTcvtt9/eYXupVCrPQADAXjv88MPzpS99Kd///vfz/e9/P/Pnz89hhx1W7rEAgN3Ypy+E7d+/f04//fQsWrQoX/7yl/PMM8/kM5/5TMaMGZOzzjorL774YnfN2e7WW2/NYYcdlkGDBmXKlCl7fMf+okWLMm7cuAwaNCjjx4/Pfffd1+H5UqmUa665JoccckgOOOCATJ8+PU8//XS3zw0AvVFVVVXmzZuX73znO7ngggvS0NDQXspXVVX16LFlOgB0nx//+Mf56Ec/mhNPPDHPP/98kuQ73/lOfvKTn/ToceU5AHTdPpXzK1asyF/91V/lkEMOyQ033JDPfOYz+eUvf5mlS5fmhRdeyPvf//7umjNJctddd6WhoSHXXnttVq1aleOOOy719fVZv379TtcvX748s2fPzty5c/PYY49lxowZmTFjRlavXt2+5itf+Uq+9rWvZcGCBXn44Ydz0EEHpb6+Plu2bOnW2QGgN3q1iD/99NPz4x//OHfffXdOPfXUbNq0qUePK9MBoPt873vfS319fQ444ICsWrUqW7duTZK0tLTki1/8Yo8dV54DwD4qdcH1119fOuaYY0r9+/cvvf/97y/dc889pR07dnRYs27dulK/fv268uN3afLkyaXzzz+//e87duwojRo1qjR//vydrv/Qhz5UOu200zpsmzJlSukv//IvS6VSqdTW1laqq6srffWrX21/ftOmTaWBAweW/umf/mmXc2zZsqXU0tLS/li3bl0pSamlpWVfTg8AuqylpaVLWVRVVVVqbm5u//uLL75Ymjx5cmn06NGl6urq7h6zXW/IdHkOQG/T1TyfMGFC6R//8R9LpVKp9LrXva70y1/+slQqlUqrVq0qjRw5stvnfFVvyPNSSaYD0Pt0NtO79M75b3zjG/nIRz6StWvXZvHixXnPe96T6uqOP2rEiBH55je/uY+/Ovgv27Zty8qVKzN9+vT2bdXV1Zk+fXoaGxt3uk9jY2OH9UlSX1/fvv7ZZ59NU1NThzW1tbWZMmXKLn9mksyfPz+1tbXtjzFjxuzLqQFA2cyZMycHHHBA+9/r6ury0EMPZdq0aRk7dmyPHLO3ZLo8B6CveOqpp3LyySe/ZnttbW2PfRqut+R5ItMBqFz9u7LT008/nS1btuTxxx/PypUr09bW1uH5973vfampqcmcOXO6Zcgkeemll7Jjx46MHDmyw/aRI0dmzZo1O92nqalpp+ubmpran391267W7My8efPS0NDQ/vfW1lbhD0BF+od/+Ids2bIljzzySNavX9+e6TNnzszMmTN75Ji9JdPlOQB9RV1dXZ555pnXfAHsT37ykxxxxBE9cszekueJTAegcnWpnP/hD3+Yj33sY3nppZde81xVVVV27Nixz4P1ZgMHDszAgQPLPQYA7LP9OdPlOQB9xbnnnpuLL7443/rWt1JVVZUXXnghjY2N+cxnPpOrr7663OP1OJkOQKXq0m1tLrjggnzwgx/Miy++mLa2tg6PnnoRP2zYsPTr1y/Nzc0dtjc3N6eurm6n+9TV1e12/av/3ZufCQB9iUwHgMp3+eWX5yMf+UimTZuWl19+OSeffHI+8YlP5C//8i9z4YUX9sgx5TkA7LsulfPNzc1paGh4zUfNelJNTU0mTpyYZcuWtW9ra2vLsmXLMnXq1J3uM3Xq1A7rk2Tp0qXt6w8//PDU1dV1WNPa2pqHH354lz8TAPoSmQ4Ala+qqipXXnllNm7cmNWrV+enP/1pNmzYkL/+67/usWPKcwDYd126rc0ZZ5yRBx98MG9605u6e57damhoyJw5czJp0qRMnjw5N910UzZv3pxzzjknSXLWWWdl9OjRmT9/fpLk4osvzimnnJLrr78+p512Wu68886sWLEit912W5I//gPm05/+dL7whS/kyCOPzOGHH56rr746o0aNyowZMwo9NwAoB5kOAH1HTU1Njj766MKOJ88BYN90qZy/5ZZb8sEPfjA//vGPM378+AwYMKDD8xdddFG3DPenZs2alQ0bNuSaa65JU1NTJkyYkCVLlrS/22/t2rWprv6vDwOceOKJWbhwYa666qpcccUVOfLII7N48eIcc8wx7Ws++9nPZvPmzTnvvPOyadOmnHTSSVmyZEkGDRrUI+cAAL2JTAeAyrdly5b83d/9XR544IEOX/D+qlWrVvXIceU5AOybqlKpVNrbnb75zW/mk5/8ZAYNGpShQ4emqqrqv35gVVV+9atfdeuQvV1ra2tqa2vT0tKSwYMHl3scAPZDXc0imf5f5DkA5dbVLDrzzDPzr//6rznjjDMycuTIDnmeJNdee213j9qryXQAyq2zWdSld85feeWVue6663L55Zd3+C04AFBZZDoAVL5777039913X/7iL/6i3KMAAHuhS6/Ct23bllmzZnkRDwAVTqYDQOUbPXp0Xv/615d7DABgL3XplficOXNy1113dfcsAEDBZDoAVL7rr78+n/vc5/Lcc8+VexQAYC906bY2O3bsyFe+8pX88Ic/zLHHHvuaL4+74YYbumU4AKBnyXQAqHyTJk3Kli1bcsQRR+TAAw98TZ5v3LixTJMBALvTpXL+P//zP/PW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BwAAAACAxITzAAAAAACQWLcJ59esWRMTJkyIioqKqKqqikmTJsWbb765xTXvvPNOTJ48OXr37h277rprjB8/Ppqamjqc+5e//CX22muvKCoqirVr13bCDgCACD0dAHYG+jkAbL9uE85PmDAhnn322Zg/f37MmTMnHnjggTjrrLO2uOb888+Pe+65J2bPnh33339/vPLKK3HCCSd0OHfSpElxyCGHdEbpAMB/o6cDQPennwPA9ivKsizLdxEfZtmyZTFs2LB4/PHHY8SIERERMW/evDj22GPj5ZdfjoEDB262prm5Ofr27Rt33HFHnHjiiRERsXz58hg6dGjU19fHqFGjcnNvuummmDVrVlx66aUxZsyYeOONN6Kqqmqr62tpaYnKyspobm6OioqK7dssAGyD7tKLunJP7y5nCMDOq7v0oq7czyO6zzkCsPPa2l7ULa6cr6+vj6qqqlzTj4ioq6uL4uLiePTRRztc09DQEK2trVFXV5cbGzJkSAwePDjq6+tzY88991xcccUVMXPmzCgu3rrj2LBhQ7S0tLR7AAAfriv1dP0cALZNV+rnEXo6AN1XtwjnGxsbo1+/fu3GevbsGXvssUc0NjZ+4JrS0tLN/nW9f//+uTUbNmyIU045JX7wgx/E4MGDt7qe6dOnR2VlZe4xaNCgj7YhAChQXamn6+cAsG26Uj+P0NMB6L7yGs5PnTo1ioqKtvhYvnx5p73/tGnTYujQofFP//RPH3ldc3Nz7vHSSy91UoUA0D10x56unwNAe92xn7+/Tk8HoDvqmc83v+CCC+KMM87Y4px99903qqurY/Xq1e3G33333VizZk1UV1d3uK66ujo2btwYa9eubfcv801NTbk1CxcujGeeeSZ+/etfR0TE+7ff79OnT1x88cVx+eWXd/jaZWVlUVZWtjVbBICC0B17un4OAO11x34eoacD0H3lNZzv27dv9O3b90Pn1dbWxtq1a6OhoSFqamoi4r2m3dbWFiNHjuxwTU1NTZSUlMSCBQti/PjxERGxYsWKWLlyZdTW1kZExG9+85t4++23c2sef/zx+MpXvhIPPvhgfOITn9je7QFAwdDTAaD7088BIK28hvNba+jQoXH00UfHmWeeGTNmzIjW1tY455xz4uSTT859C/yqVatizJgxMXPmzDj88MOjsrIyJk2aFFOmTIk99tgjKioq4txzz43a2trct8D/dXN//fXXc+/3Ub4JHgDYOno6AHR/+jkA7BjdIpyPiLj99tvjnHPOiTFjxkRxcXGMHz8+rr322tzzra2tsWLFinjrrbdyY1dffXVu7oYNG2Ls2LFx44035qN8AOD/0tMBoPvTzwFg+xVl79/EjW3W0tISlZWV0dzcHBUVFfkuB4ACpBdtP2cIQL7pRTuGcwQg37a2FxUnrAkAAAAAAAjhPAAAAAAAJCecBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxLpNOL9mzZqYMGFCVFRURFVVVUyaNCnefPPNLa555513YvLkydG7d+/YddddY/z48dHU1LTZvFtvvTUOOeSQKC8vj379+sXkyZM7axsAUPD0dADo/vRzANh+3SacnzBhQjz77LMxf/78mDNnTjzwwANx1llnbXHN+eefH/fcc0/Mnj077r///njllVfihBNOaDfnqquuiosvvjimTp0azz77bNx3330xduzYztwKABQ0PR0Auj/9HAC2X1GWZVm+i/gwy5Yti2HDhsXjjz8eI0aMiIiIefPmxbHHHhsvv/xyDBw4cLM1zc3N0bdv37jjjjvixBNPjIiI5cuXx9ChQ6O+vj5GjRoVb7zxRuy5555xzz33xJgxY7a5vpaWlqisrIzm5uaoqKjY5tcBgG3VXXpRV+7p3eUMAdh5dZde1JX7eUT3OUcAdl5b24t6Jqxpm9XX10dVVVWu6UdE1NXVRXFxcTz66KPx5S9/ebM1DQ0N0draGnV1dbmxIUOGxODBg3ONf/78+dHW1harVq2KoUOHxrp16+KII46IK6+8MgYNGvSB9WzYsCE2bNiQ+7m5uTki3jt0AMiH93tQV/83967U0/VzALoa/dxndAB2Dlvb07tFON/Y2Bj9+vVrN9azZ8/YY489orGx8QPXlJaWRlVVVbvx/v3759a88MIL0dbWFv/+7/8e11xzTVRWVsYll1wSf/d3fxdPP/10lJaWdvja06dPj8svv3yz8S39ZQEAUli3bl1UVlbmu4wP1JV6un4OQFeln/uMDsDO4cN6el7D+alTp8b3vve9Lc5ZtmxZp71/W1tbtLa2xrXXXhtHHXVURET88pe/jOrq6li0aNEH3tdu2rRpMWXKlHavs2bNmujdu3cUFRV1Wr1dVUtLSwwaNCheeuklvzLYiZxzOs46Dee8Y2VZFuvWrevw18hT6I49XT9vz5/JdJx1Gs45HWe94+jnPqPvCP5MpuGc03HWaTjnHWtre3pew/kLLrggzjjjjC3O2XfffaO6ujpWr17dbvzdd9+NNWvWRHV1dYfrqqurY+PGjbF27dp2/zLf1NSUWzNgwICIiBg2bFju+b59+0afPn1i5cqVH1hTWVlZlJWVtRv763/9L0QVFRX+8CbgnNNx1mk45x0nn1fYdceerp93zJ/JdJx1Gs45HWe9Y+jnPqPvKP5MpuGc03HWaTjnHWdrenpew/m+fftG3759P3RebW1trF27NhoaGqKmpiYiIhYuXBhtbW0xcuTIDtfU1NRESUlJLFiwIMaPHx8REStWrIiVK1dGbW1tRET8zd/8TW58r732ioiINWvWxOuvvx577733du8PAAqFng4A3Z9+DgBpFee7gK0xdOjQOProo+PMM8+Mxx57LB566KE455xz4uSTT879asCqVatiyJAh8dhjj0XEe/8yMWnSpJgyZUosWrQoGhoaYuLEiVFbWxujRo2KiIj9998/jj/++DjvvPPi4YcfjqVLl8bpp58eQ4YMic997nN52y8A7Kz0dADo/vRzANgxukU4HxFx++23x5AhQ2LMmDFx7LHHxpFHHhk333xz7vnW1tZYsWJFvPXWW7mxq6++Or7whS/E+PHj4zOf+UxUV1fHb3/723avO3PmzBg5cmQcd9xxMXr06CgpKYl58+ZFSUlJsr11d2VlZXHZZZdt9muE7FjOOR1nnYZzLlx6etfkz2Q6zjoN55yOsy5M+nnX5c9kGs45HWedhnPOj6Isy7J8FwEAAAAAAIWk21w5DwAAAAAAOwvhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAoIu44YYbYp999ony8vIYOXJkPPbYY1ucP3v27BgyZEiUl5fHwQcfHHPnzm33fFFRUYePH/zgB5u91oYNG2L48OFRVFQUS5Ys2ZHb6nLydc733ntvjBw5MnbZZZfYfffdY9y4cTt6a11OPs76+eefj+OPPz769OkTFRUVceSRR8aiRYs6ZX9dxY4+5zfffDPOOeec2GuvvWKXXXaJYcOGxYwZM9rNeeedd2Ly5MnRu3fv2HXXXWP8+PHR1NS0w/e2MxPOAwAAAHQBs2bNiilTpsRll10WTz75ZBx66KExduzYWL16dYfzH3744TjllFNi0qRJsXjx4hg3blyMGzculi5dmpvz6quvtnvccsstUVRUFOPHj9/s9b71rW/FwIEDO21/XUW+zvk3v/lNnHrqqTFx4sR46qmn4qGHHop//Md/7PT95lO+zvoLX/hCvPvuu7Fw4cJoaGiIQw89NL7whS9EY2Njp+85HzrjnKdMmRLz5s2LX/ziF7Fs2bL4xje+Eeecc07cfffduTnnn39+3HPPPTF79uy4//7745VXXokTTjih0/e7MynKsizLdxEAAAAAhW7kyJFx2GGHxfXXXx8REW1tbTFo0KA499xzY+rUqZvNP+mkk2L9+vUxZ86c3NioUaNi+PDhm13h+r5x48bFunXrYsGCBe3G/8//+T8xZcqU+M1vfhMHHnhgLF68OIYPH77jNteF5OOc33333dhnn33i8ssvj0mTJnXCrrqmfJz166+/Hn379o0HHngg/vZv/zYiItatWxcVFRUxf/78qKur29HbzLvOOOeDDjooTjrppPj2t7+dm1NTUxPHHHNMfOc734nm5ubo27dv3HHHHXHiiSdGRMTy5ctj6NChUV9fH6NGjerMLe80XDkPAAAAkGcbN26MhoaGdsFhcXFx1NXVRX19fYdr6uvrNwsax44d+4Hzm5qa4t57790sHG5qaoozzzwzfv7zn0evXr22cyddW77O+cknn4xVq1ZFcXFxfOpTn4oBAwbEMccc0+5K5Z1Nvs66d+/eccABB8TMmTNj/fr18e6778aPf/zj6NevX9TU1OyAnXUtnXXORxxxRNx9992xatWqyLIsFi1aFM8//3wcddRRERHR0NAQra2t7V5nyJAhMXjw4A98XzYnnAcAAADIs9dffz02bdoU/fv3bzfev3//D7wVR2Nj40eaf9ttt8Vuu+3W7rYTWZbFGWecEWeffXaMGDFiO3fR9eXrnF944YWIiPi3f/u3uOSSS2LOnDmx++67x2c/+9lYs2bN9mypy8rXWRcVFcV9990Xixcvjt122y3Ky8vjqquuinnz5sXuu+++nbvqejrrnK+77roYNmxY7LXXXlFaWhpHH3103HDDDfGZz3wm9xqlpaVRVVW11e/L5oTzAAAAAAXglltuiQkTJkR5eXlu7Lrrrot169bFtGnT8ljZzqWjc25ra4uIiIsvvjjGjx8fNTU18bOf/SyKiopi9uzZ+Sq12+vorLMsi8mTJ0e/fv3iwQcfjMceeyzGjRsXX/ziF+PVV1/NY7Xdy3XXXRePPPJI3H333dHQ0BBXXnllTJ48Oe677758l7ZT6ZnvAgAAAAAKXZ8+faJHjx7R1NTUbrypqSmqq6s7XFNdXb3V8x988MFYsWJFzJo1q934woULo76+PsrKytqNjxgxIiZMmBC33Xbbtmyny8rXOQ8YMCAiIoYNG5YbKysri3333TdWrly5TXvp6vL5/+k5c+bEG2+8ERUVFRERceONN8b8+fPjtttu6/Ae7N1ZZ5zz22+/HRdddFH87ne/i+OOOy4iIg455JBYsmRJ/PCHP4y6urqorq6OjRs3xtq1a9tdPb+l92VzrpwHAAAAyLPS0tKoqalp90WtbW1tsWDBgqitre1wTW1t7WZf7Dp//vwO5//0pz+NmpqaOPTQQ9uNX3vttfHUU0/FkiVLYsmSJTF37tyIiJg1a1Z897vf3d5tdTn5OueampooKyuLFStW5MZaW1vjT3/6U+y9997bs6UuK19n/dZbb0XEe/dd/++Ki4tzv8GwM+mMc25tbY3W1tbNzrBHjx65M6ypqYmSkpJ2r7NixYpYuXLlB74vHcgAAAAAyLs777wzKysry2699dbsueeey84666ysqqoqa2xszLIsy0499dRs6tSpufkPPfRQ1rNnz+yHP/xhtmzZsuyyyy7LSkpKsmeeeabd6zY3N2e9evXKbrrppg+t4cUXX8wiIlu8ePEO3VtXkq9zPu+887I999wz+/3vf58tX748mzRpUtavX79szZo1nbfZPMvHWb/22mtZ7969sxNOOCFbsmRJtmLFiuyb3/xmVlJSki1ZsqRzN5wnnXHOo0ePzg488MBs0aJF2QsvvJD97Gc/y8rLy7Mbb7wxN+fss8/OBg8enC1cuDB74oknstra2qy2tjbdxncCwnkAAACALuK6667LBg8enJWWlmaHH3549sgjj+SeGz16dHb66ae3m/+rX/0q23///bPS0tLswAMPzO69997NXvPHP/5xtssuu2Rr16790PcvhHA+y/Jzzhs3bswuuOCCrF+/ftluu+2W1dXVZUuXLt2h++qK8nHWjz/+eHbUUUdle+yxR7bbbrtlo0aNyubOnbtD99XV7OhzfvXVV7MzzjgjGzhwYFZeXp4dcMAB2ZVXXpm1tbXl5rz99tvZ1772tWz33XfPevXqlX35y1/OXn311U7d586mKMuyLN9X7wMAAAAAQCFxz3kAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxLpdOH/DDTfEPvvsE+Xl5TFy5Mh47LHHtjh/9uzZMWTIkCgvL4+DDz445s6du9mcZcuWxZe+9KWorKyMj33sY3HYYYfFypUrO2sLAEDo6QAAABS2bhXOz5o1K6ZMmRKXXXZZPPnkk3HooYfG2LFjY/Xq1R3Of/jhh+OUU06JSZMmxeLFi2PcuHExbty4WLp0aW7OH//4xzjyyCNjyJAh8Z//+Z/x9NNPx7e//e0oLy9PtS0AKDh6OgAAAIWuKMuyLN9FbK2RI0fGYYcdFtdff31ERLS1tcWgQYPi3HPPjalTp242/6STTor169fHnDlzcmOjRo2K4cOHx4wZMyIi4uSTT46SkpL4+c9/nmYTAICeDgAAQMHrme8CttbGjRujoaEhpk2blhsrLi6Ourq6qK+v73BNfX19TJkypd3Y2LFj46677oqI94KAe++9N771rW/F2LFjY/HixfHxj388pk2bFuPGjfvAWjZs2BAbNmzI/dzW1hZr1qyJ3r17R1FR0bZvEgC2UZZlsW7duhg4cGAUF3ftX4zrKj1dPwegq+lO/RwA2H7dJpx//fXXY9OmTdG/f/924/3794/ly5d3uKaxsbHD+Y2NjRERsXr16njzzTfjf/7P/xnf+c534nvf+17MmzcvTjjhhFi0aFGMHj26w9edPn16XH755TtgVwCwY7300kux11575buMLeoqPV0/B6Cr6g79HADYft0mnO8MbW1tERFx/PHHx/nnnx8REcOHD4+HH344ZsyY8YHh/LRp09pdvdfc3ByDBw+Ol156KSoqKjq/cAD4Ky0tLTFo0KDYbbfd8l1KXmxLT9fPAehqCr2fA0Ch6TbhfJ8+faJHjx7R1NTUbrypqSmqq6s7XFNdXb3F+X369ImePXvGsGHD2s0ZOnRo/Nd//dcH1lJWVhZlZWWbjVdUVPgwD0BedYfbsXSVnq6fA9BVdYd+DgBsv25zE7vS0tKoqamJBQsW5Mba2tpiwYIFUVtb2+Ga2tradvMjIubPn5+bX1paGocddlisWLGi3Zznn38+9t577x28AwAgQk8HAACAiG505XxExJQpU+L000+PESNGxOGHHx4/+tGPYv369TFx4sSIiDjttNNizz33jOnTp0dExHnnnRejR4+OK6+8Mo477ri4884744knnoibb74595oXXnhhnHTSSfGZz3wmPve5z8W8efPinnvuif/8z//MxxYBoCDo6QAAABS6bhXOn3TSSfHaa6/FpZdeGo2NjTF8+PCYN29e7gviVq5c2e4b7Y844oi444474pJLLomLLroo9ttvv7jrrrvioIMOys358pe/HDNmzIjp06fH17/+9TjggAPiN7/5TRx55JHJ9wcAhUJPBwAAoNAVZVmW5buI7q6lpSUqKyujubnZPWoB8mjTpk3R2tqa7zI6RUlJSfTo0eMDn9eLtp8zBOga9HO9CAAKRbe6ch4AOpJlWTQ2NsbatWvzXUqnqqqqiurqal8SB8BO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5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAILGe+S4AAMi/d955JzZu3NhurKKiIk/VAAAAwM7PlfMAUKDeeuutOOecc6Jfv37xsY99LHbfffd2DwAAAKDzCOcBoEBdeOGFsXDhwrjpppuirKwsfvKTn8Tll18eAwcOjJkzZ+a7PAAAANipua0NABSoe+65J2bOnBmf/exnY+LEifG3f/u38clPfjL23nvvuP3222PChAn5LhEAAAB2Wq6cB4ACtWbNmth3330j4r37y69ZsyYiIo488sh44IEH8lkaAAAA7PSE8wBQoPbdd9948cUXIyJiyJAh8atf/Soi3ruivqqqKo+VAQAAwM5POA8ABWrixInx1FNPRUTE1KlT44Ybbojy8vI4//zz48ILL8xzdQAAALBzc895AChQ559/fu6/6+rqYvny5dHQ0BCf/OQn45BDDsljZQAAALDzc+U8ABSomTNnxoYNG3I/77333nHCCSfEkCFDYubMmXmsDAAAAHZ+wnkAKFATJ06M5ubmzcbXrVsXEydOzENFAAAAUDiE8wBQoLIsi6Kios3GX3755aisrMxDRQAAAFA4tvqe808//XQcdNBBUVxcHE8//fQW57pPLQB0XZ/61KeiqKgoioqKYsyYMdGz5//768CmTZvixRdfjKOPPjqPFQIAAMDOb6vD+eHDh0djY2P069cvhg8fHkVFRZFlWe75938uKiqKTZs2dUqxAMD2GzduXERELFmyJMaOHRu77rpr7rnS0tLYZ599Yvz48XmqDgAAAArDVofzL774YvTt2zf33wBA93TZZZdFRMQ+++wTJ510UpSXl+e5IgAAACg8W33P+b333jt3X9q99957i4/OdMMNN8Q+++wT5eXlMXLkyHjssce2OH/27NkxZMiQKC8vj4MPPjjmzp3b7vksy+LSSy+NAQMGxC677BJ1dXXxhz/8oTO3AABdwumnnx7vvPNO/OQnP4lp06bFmjVrIiLiySefjFWrVnX6++vpAAAAFLJt/kLYP/zhD3HzzTfHd77znbjiiivaPTrLrFmzYsqUKXHZZZfFk08+GYceemiMHTs2Vq9e3eH8hx9+OE455ZSYNGlSLF68OMaNGxfjxo2LpUuX5uZ8//vfj2uvvTZmzJgRjz76aHzsYx+LsWPHxjvvvNNp+wCAruDpp5+O/fffP773ve/FD3/4w1i7dm1ERPz2t7+NadOmdep76+kAAAAUuqLsv984fiv9r//1v+KrX/1q9OnTJ6qrq3NX1Ee8d+/5J598cocW+b6RI0fGYYcdFtdff31ERLS1tcWgQYPi3HPPjalTp242/6STTor169fHnDlzcmOjRo2K4cOHx4wZMyLLshg4cGBccMEF8c1vfjMiIpqbm6N///5x6623xsknn7xVdbW0tERlZWU0NzdHRUXFDtgpAHw029KLxowZEzU1NfH9738/dtttt3jqqadi3333jYcffjj+8R//Mf70pz91Wr1dsafr5wDkm14EAIVlm66c/853vhPf/e53o7GxMZYsWRKLFy/OPTormN+4cWM0NDREXV1dbqy4uDjq6uqivr6+wzX19fXt5kdEjB07Njf/xRdfjMbGxnZzKisrY+TIkR/4mhERGzZsiJaWlnYPAOhunnjiifiXf/mXzcb33HPPaGxs7LT37So9XT8HAAAgn7YpnH/jjTfi7//+73d0LVv0+uuvx6ZNm6J///7txvv37/+BAUJjY+MW57//vx/lNSMipk+fHpWVlbnHoEGDPvJ+ACDfysrKOgykn3/++dyXwHeGrtLT9XMAAADyaZvC+b//+7+P//iP/9jRtXQb06ZNi+bm5tzjpZdeyndJAPCRfelLX4orrrgiWltbI+K9W9OtXLky/vVf/zXGjx+f5+o6n34OAABAPvXc2onXXntt7r8/+clPxre//e145JFH4uCDD46SkpJ2c7/+9a/vuAr/rz59+kSPHj2iqamp3XhTU1NUV1d3uKa6unqL89//36amphgwYEC7OcOHD//AWsrKyqKsrGxbtgEAXcaVV14ZJ554YvTr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WRnNzc1RUVGxfZsFgG3QXXpRV+7p3eUMAdh56UUAUFi6xZXz9fX1UVVVlfsQHxFRV1cXxcXF8eijj3a4pqGhIVpbW6Ouri43NmTIkBg8eHDU19fnxp577rm44oorYubMmVFcvHXHsWHDhmhpaWn3AAA+XFfq6fo5AAAA+dQtwvnGxsbo169fu7GePXvGHnvsEY2NjR+4prS0dLOr5fr3759bs2HDhjjllFPiBz/4QQwePHir65k+fXpUVlbmHoMGDfpoGwKAAtWVerp+DgAAQD7lNZyfOnVqFBUVbfGxfPnyTnv/adOmxdChQ+Of/umfPvK65ubm3OOll17qpAoBoHvojj1dPwcAACCfeubzzS+44II444wztjhn3333jerq6li9enW78XfffTfWrFkT1dXVHa6rrq6OjRs3xtq1a9tdadfU1JRbs3DhwnjmmWfi17/+dUREvH/7/T59+sTFF18cl19+eYevXVZWFmVlZVuzRQAoCN2xp+vnAAAA5FNew/m+fftG3759P3RebW1trF27NhoaGqKmpiYi3vsQ3tbWFiNHjuxwTU1NTZSUlMSCBQti/PjxERGxYsWKWLlyZdTW1kZExG9+85t4++23c2sef/zx+MpXvhIPPvhgfOITn9je7QFAwdDTAQAA4KPJazi/tYYOHRpHH310nHnmmTFjxoxobW2Nc845J04++eQYOHBgRESsWrUqxowZEzNnzozDDz88KisrY9KkSTFlypTYY489oqKiIs4999yora2NUaNGRURs9mH99ddfz73fX9/XFgDYfno6AAAAvKdbhPMREbfffnucc845MWbMmCguLo7x48fHtddem3u+tbU1VqxYEW+99VZu7Oqrr87N3bBhQ4wdOzZuvPHGfJQPAPxfejoAAABEFGXv35SVbdbS0hKVlZXR3NwcFRUV+S4HgAKkF20/ZwhAvulFAFBYivNdAAAAAAAAFBrhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJNZtwvk1a9bEhAkToqKiIqqqqmLSpEnx5ptvbnHNO++8E5MnT47evXvHrrvuGuPHj4+mpqbN5t16661xyCGHRHl5efTr1y8mT57cWdsAgIKnpwMAAEA3CucnTJgQzz77bMyfPz/mzJkTDzzwQJx11llbXHP++efHPffcE7Nnz477778/XnnllTjhhBPazbnqqqvi4osvjqlTp8azzz4b9913X4wdO7YztwIABU1PBwAAgIiiLMuyfBfxYZYtWxbDhg2Lxx9/PEaMGBEREfPmzYtjjz02Xn755Rg4cOBma5qbm6Nv375xxx13xIknnhgREcuXL4+hQ4dGfX19jBo1Kt54443Yc88945577okxY8Zsc30tLS1RWVkZzc3NUVFRsc2vAwDbqrv0oq7c07vLGQKw89KLAKCw9Mx3AVujvr4+qqqqch/iIyLq6uqiuLg4Hn300fjyl7+82ZqGhoZobW2Nurq63NiQIUNi8ODBuQ/y8+fPj7a2tli1alUMHTo01q1bF0cccURceeWVMWjQoA+sZ8OGDbFhw4bcz83NzRHx3l+kACAf3u9BXf3f3LtST9fPAehquks/BwB2jG4Rzjc2Nka/fv3ajfXs2TP22GOPaGxs/MA1paWlUVVV1W68f//+uTUvvPBCtLW1xb//+7/HNddcE5WVlXHJJZfE3/3d38XTTz8dpaWlHb729OnT4/LLL99sfEuBPgCksG7duqisrMx3GR+oK/V0/RyArqqr93MAYMfIazg/derU+N73vrfFOcuWLeu0929ra4vW1ta49tpr46ijjoqIiF/+8pdRXV0dixYt+sD71E6bNi2mTJnS7nXWrFkTvXv3jqKiok6rt6tqaWmJQYMGxUsvveRXLzuRc07HWafhnHesLMti3bp1Hd4WJoXu2NP18/b8mUzHWafhnNNx1jtOvvs5AJBWXsP5Cy64IM4444wtztl3332juro6Vq9e3W783XffjTVr1kR1dXWH66qrq2Pjxo2xdu3adlfaNTU15dYMGDAgIiKGDRuWe75v377Rp0+fWLly5QfWVFZWFmVlZe3G/vpqvkJUUVHhL+MJOOd0nHUaznnHyecVdt2xp+vnHfNnMh1nnYZzTsdZ7xiumAeAwpHXcL5v377Rt2/fD51XW1sba9eujYaGhqipqYmIiIULF0ZbW1uMHDmywzU1NTVRUlISCxYsiPHjx0dExIoVK2LlypVRW1sbERF/8zd/kxvfa6+9IiJizZo18frrr8fee++93fsDgEKhpwMAAMBHU5zvArbG0KFD4+ijj44zzzwzHnvssXjooYfinHPOiZNPPjn3636rVq2KIUOGxGOPPRYR711tMGnSpJgyZUosWrQoGhoaYuLEiVFbWxujRo2KiIj9998/jj/++DjvvPPi4YcfjqVLl8bpp58eQ4YMic997nN52y8A7Kz0dAAAAHhPtwjnIyJuv/32GDJkSIwZMyaOPfbYOPLII+Pmm2/OPd/a2horVqyIt956Kzd29dVXxxe+8IUYP358fOYzn4nq6ur47W9/2+51Z86cGSNHjozjjjsuRo8eHSUlJTFv3rwoKSlJtrfurqysLC677LLNbg3AjuWc03HWaTjnwqWnd03+TKbjrNNwzuk4awCAbVOUZVmW7yIAAAAAAKCQdJsr5wEAAAAAYGchnAcAAAAAgMSE8wAAAAAAkJhwHgAAAAAAEhPOAwAAAABAYsJ54oYbboh99tknysvLY+TIkfHYY49tcf7s2bNjyJAhUV5eHgcffHDMnTu33fNFRUUdPn7wgx9s9lobNmyI4cOHR1FRUSxZsmRHbqvLydc533vvvTFy5MjYZZddYvfdd49x48bt6K11Ofk46+effz6OP/746NOnT1RUVMSRRx4ZixYt6pT9dRU7+pzffPPNOOecc2KvvfaKXXbZJYYNGxYzZsxoN+edd96JyZMnR+/evWPXXXeN8ePHR1NT0w7fG3RH+nk6enoa+nk6ejoAQJ5kFLQ777wzKy0tzW655Zbs2Wefzc4888ysqqoqa2pq6nD+Qw89lPXo0SP7/ve/nz333HPZJZdckpWUlGTPPPNMbs6rr77a7nHLLbdkRUVF2R//+MfNXu/rX/96dswxx2QRkS1evLiztpl3+TrnX//619nuu++e3XTTTdmKFSuyZ599Nps1a1an7zef8nXW++23X3bsscdmTz31VPb8889nX/va17JevXplr776aqfvOR8645zPPPPM7BOf+ES2aNGi7MUXX8x+/OMfZz169Mj+9//+37k5Z599djZo0KBswYIF2RNPPJGNGjUqO+KIIzp9v9DV6efp6Olp6Ofp6OkAAPkjnC9whx9+eDZ58uTcz5s2bcoGDhyYTZ8+vcP5//AP/5Add9xx7cZGjhyZ/cu//MsHvsfxxx+fff7zn99sfO7cudmQIUOyZ599dqf/MJ+Pc25tbc323HPP7Cc/+cl2Vt+95OOsX3vttSwisgceeCA31tLSkkVENn/+/G3dSpfWGed84IEHZldccUW7OZ/+9Keziy++OMuyLFu7dm1WUlKSzZ49O/f8smXLsojI6uvrt3tP0J3p5+no6Wno5+no6QAA+eO2NgVs48aN0dDQEHV1dbmx4uLiqKuri/r6+g7X1NfXt5sfETF27NgPnN/U1BT33ntvTJo0abPxM888M37+859Hr169tnMnXVu+zvnJJ5+MVatWRXFxcXzqU5+KAQMGxDHHHBNLly7dAbvqmvJ11r17944DDjggZs6cGevXr4933303fvzjH0e/fv2ipqZmB+ysa+mscz7iiCPi7rvvjlWrVkWWZbFo0aJ4/vnn46ijjoqIiIaGhmhtbW33OkOGDInBgwd/4PtCIdDP09HT09DP09HTAQDySzhfwF5//fXYtGlT9O/fv914//79o7GxscM1jY2NH2n+bbfdFrvttluccMIJubEsy+KMM86Is88+O0aMGLGdu+j68nXOL7zwQkRE/Nu//VtccsklMWfOnNh9993js5/9bKxZs2Z7ttRl5eusi4qK4r777ovFixfHbrvtFuXl5XHVVVfFvHnzYvfdd9/OXXU9nXXO1113XQwbNiz22muvKC0tjaOPPjpuuOGG+MxnPpN7jdLS0qiqqtrq94VCoJ+no6enoZ+no6cDAOSXcJ5Odcstt8SECROivLw8N3bdddfFunXrYtq0aXmsbOfS0Tm3tbVFRMTFF18c48ePj5qamvjZz34WRUVFMXv27HyV2u11dNZZlsXkyZOjX79+8eCDD8Zjjz0W48aNiy9+8Yvx6quv5rHa7uW6666LRx55JO6+++5oaGiIK6+8MiZPnhz33XdfvkuDgqefp6Onp6Gfdy49HQBg6/TMdwHkT58+faJHjx7R1NTUbrypqSmqq6s7XFNdXb3V8x988MFYsWJFzJo1q934woULo76+PsrKytqNjxgxIiZMmBC33Xbbtmyny8rXOQ8YMCAiIoYNG5YbKysri3333TdWrly5TXvp6vL5/+k5c+bEG2+8ERUVFRERceONN8b8+fPjtttui6lTp27Ptrqczjjnt99+Oy666KL43e9+F8cdd1xERBxyyCGxZMmS+OEPfxh1dXVRXV0dGzdujLVr17a70m5L7wuFQD9PR09PQz9PR08HAMgvV84XsNLS0qipqYkFCxbkxtra2mLBggVRW1vb4Zra2tp28yMi5s+f3+H8n/70p1FTUxOHHnpou/Frr702nnrqqViyZEksWbIk5s6dGxERs2bNiu9+97vbu60uJ1/nXFNTE2VlZbFixYrcWGtra/zpT3+Kvffee3u21GXl66zfeuutiHjvHq3/XXFxce5qx51JZ5xza2trtLa2bnaGPXr0yJ1hTU1NlJSUtHudFStWxMqVKz/wfaEQ6Ofp6Olp6Ofp6OkAAHmWz2+jJf/uvPPOrKysLLv11luz5557LjvrrLOyqqqqrLGxMcuyLDv11FOzqVOn5uY/9NBDWc+ePbMf/vCH2bJly7LLLrssKykpyZ555pl2r9vc3Jz16tUru+mmmz60hhdffDGLiGzx4sU7dG9dSb7O+bzzzsv23HPP7Pe//322fPnybNKkSVm/fv2yNWvWdN5m8ywfZ/3aa69lvXv3zk444YRsyZIl2YoVK7JvfvObWUlJSbZkyZLO3XCedMY5jx49OjvwwAOzRYsWZS+88EL2s5/9LCsvL89uvPHG3Jyzzz47Gzx4cLZw4cLsiSeeyGpra7Pa2tp0G4cuSj9PR09PQz9PR08HAMgf4TzZddddlw0ePDgrLS3NDj/88OyRRx7JPTd69Ojs9NNPbzf/V7/6Vbb//vtnpaWl2YEHHpjde++9m73mj3/842yXXXbJ1q5d+6HvXygf5vNxzhs3bswuuOCCrF+/ftluu+2W1dXVZUuXLt2h++qK8nHWjz/+eHbUUUdle+yxR7bbbrtlo0aNyubOnbtD99XV7OhzfvXVV7MzzjgjGzhwYFZeXp4dcMAB2ZVXXpm1tbXl5rz99tvZ1772tWz33XfPevXqlX35y1/OXn311U7dJ3QX+nk6enoa+nk6ejoAQH4UZVmW5ffafQAAAAAAKCzuOQ8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJCacBwAAAACAxITzAAAAAACQmHAeAAAAAAASE84DAAAAAEBiwnkAAAAAAEhMOA8AAAAAAIkJ5wEAAAAAIDHhPAAAAAAAJPb/A7UzNh1Px0pIAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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Nzdr79699nsQjvz8fEnSl19+qWOPPbbL9U0E/fr1U0pKisrLy0PuLy8vP+h7kZeX16Xy3VUk782B0tLSdPrpp+vLL7+MRRW7lYP9u8nKykrKVr9E+KML+vfvr/79+8fkuYcPH668vDwVFxfbYR8IBFRaWtqlFQNuCfe9KSgoUEVFhdasWaMxY8ZIkt5++20Fg0E70MPxySefSFLIF6XuxufzacyYMSouLtaECRMkScFgUMXFxZo+fXqnjykoKFBxcbFmzpxp37dixQoVFBTEocbxE8l7c6CWlhZt2LBBl156aQxr2j0UFBR0WBJ6JP676RK3ZxziyPTNN9+YdevWmQULFpiePXuadevWmXXr1pmqqiq7zIgRI8zLL79s/37//febnJwc8+qrr5pPP/3U/OxnPzPDhw83dXV1bryEmLnkkkvM6aefbkpLS817771njj/+eDNx4kT7+M6dO82IESNMaWmpMcaYL7/80txzzz3m448/Ntu2bTOvvvqqOeaYY8x5553n1ktwzAsvvGD8fr9ZsmSJ2bRpk7nxxhtNTk6OKSsrM8YYc+2115o5c+bY5d9//32TmppqHnjgAbN582Yzf/58k5aWZjZs2ODWS4iZrr43CxYsMG+99Zb56quvzJo1a8zVV19t0tPTzcaNG916CTFTVVVlf6ZIMg899JBZt26d+eabb4wxxsyZM8dce+21dvl//etfJjMz09x+++1m8+bN5vHHHzcpKSnmzTffdOsluI7wR0xMnjzZSOpwe+edd+wyksyf//xn+/dgMGjuuusuk5uba/x+v7nooovM1q1b41/5GPvhhx/MxIkTTc+ePU1WVpaZMmVKyJeibdu2hbxX27dvN+edd57p06eP8fv95rjjjjO33367qaysdOkVOOsPf/iDGTp0qPH5fGbcuHHmww8/tI+df/75ZvLkySHlX3rpJXPCCScYn89nTj75ZLN8+fI41zh+uvLezJw50y6bm5trLr30UrN27VoXah1777zzTqefL9b7MXnyZHP++ed3eMzo0aONz+czxxxzTMhnTzLikr4AACQZZvsDAJBkCH8AAJIM4Q8AQJIh/AEASDKEPwAASYbwBwAgyRD+AAAkGcIfAIAkQ/gDAJBkCH8ACe+CCy4IuZgPgOgQ/gCSRmNjo9tVABIC4Q/AURdccIFmzJihmTNnqnfv3srNzdUzzzyjmpoaTZkyRb169dJxxx2nN954w37MypUrNW7cOPn9fg0cOFBz5sxRc3OzJOkXv/iFVq5cqUceeUQej0cej0dff/31YR9n1WX69OmaOXOm+vXrp6Kiori+F0CiIvwBOO7ZZ59Vv379tHr1as2YMUO33HKLfv7zn+uss87S2rVrdfHFF+vaa69VbW2tdu3apUsvvVRnnnmm1q9fryeffFJ/+tOfdO+990qSHnnkERUUFOiGG27Q7t27tXv3bg0ZMuSwj2tfF5/Pp/fff19PPfWUG28HkHC4qh8AR11wwQVqaWnRP//5T0lSS0uLsrOzdfnll+svf/mLJKmsrEwDBw5USUmJXnvtNf3tb3/T5s2b5fF4JElPPPGEZs+ercrKSnm9Xl1wwQUaPXq0Hn74Yfs8v/3tb8N6XCAQ0Nq1a+P7JgAJjpY/AMedeuqp9s8pKSnq27evRo0aZd+Xm5srSdqzZ482b96sgoICO8Al6eyzz1Z1dbV27tx50HOE+7gxY8Y48pqAIwnhD8BxaWlpIb97PJ6Q+6zADgaDMa9Ljx49Yn4OoLsh/AG46sQTT1RJSYnaj0C+//776tWrlwYPHixJ8vl8amlp6fLjAHSO8Afgql/96lfasWOHZsyYoS1btujVV1/V/PnzNWvWLHm9rR9RRx99tEpLS/X111/r+++/VzAYDOtxADrHXwgAVx111FF6/fXXtXr1ap122mm6+eabNXXqVN155512md/85jdKSUnRSSedpP79+2v79u1hPQ5A55jtDwBAkqHlDwBAkiH8AQBIMoQ/AABJhvAHACDJEP4AACQZwh8AgCRD+AMAkGQIfwAAkgzhDwBAkiH8AQBIMoQ/AABJ5v8HcZH0wf33J4MAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "RE(bp.scan([det], motor, -1.2, 1.2, 41))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## get the most recent scan, by steps\n", "\n", "The databroker instance, `cat`, provides access to its scans by several means. One way is to consider `cat` as a list and retrieve the last item from the list. This will return a *run*, the common reference to be used.\n", "\n", "For this first example, we'll work through the steps one by one. The `cat.v2` interface is the easiest to use (at this writing)." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "BlueskyRun\n", " uid='de507b9d-c75b-465b-94f7-a7797b983f44'\n", " exit_status='success'\n", " 2025-11-25 10:47:31.736 -- 2025-11-25 10:47:48.607\n", " Streams:\n", " * label_start_motor\n", " * primary\n" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "run = cat.v2[-1]\n", "run" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As shown, the run has one data stream, name `primary`. The databroker provides a simple table view of this run:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/prjemian/.conda/envs/apstools/lib/python3.11/site-packages/databroker/intake_xarray_core/base.py:23: FutureWarning: The return type of `Dataset.dims` will be changed to return a set of dimension names in future, in order to be more consistent with `DataArray.dims`. To access a mapping from dimension names to lengths, please use `Dataset.sizes`.\n", " 'dims': dict(self._ds.dims),\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 1kB\n",
       "Dimensions:              (time: 41)\n",
       "Coordinates:\n",
       "  * time                 (time) float64 328B 1.764e+09 1.764e+09 ... 1.764e+09\n",
       "Data variables:\n",
       "    det                  (time) float64 328B 4.697e-70 4.115e-62 ... 1.489e-101\n",
       "    motor                (time) float64 328B -1.2 -1.14 -1.08 ... 1.08 1.14 1.2\n",
       "    motor_user_setpoint  (time) float64 328B -1.2 -1.14 -1.08 ... 1.08 1.14 1.2
" ], "text/plain": [ " Size: 1kB\n", "Dimensions: (time: 41)\n", "Coordinates:\n", " * time (time) float64 328B 1.764e+09 1.764e+09 ... 1.764e+09\n", "Data variables:\n", " det (time) float64 328B 4.697e-70 4.115e-62 ... 1.489e-101\n", " motor (time) float64 328B -1.2 -1.14 -1.08 ... 1.08 1.14 1.2\n", " motor_user_setpoint (time) float64 328B -1.2 -1.14 -1.08 ... 1.08 1.14 1.2" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "run.primary.read()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Support function: `specfile_example()`\n", "\n", "We need to call the `apstools.callbacks.SpecWriterCallback2()` callback with the run's documents.\n", "\n", "Here, `specfile_example()` is a support function that can be used with one or more runs to create a SPEC data file (one Bluesky run will become one SPEC scan in the same file)." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "from apstools.callbacks import SpecWriterCallback2\n", "from databroker._drivers.mongo_normalized import BlueskyMongoCatalog\n", "from databroker._drivers.msgpack import BlueskyMsgpackCatalog\n", "import warnings\n", "\n", "DEMO_SPEC_FILE = \"test_specdata.txt\"\n", "\n", "def specfile_example(runs, filename=DEMO_SPEC_FILE):\n", " \"\"\"write one or more headers (scans) to a SPEC data file\"\"\"\n", " if isinstance(runs, databroker.core.BlueskyRun):\n", " runs = [runs]\n", " if not isinstance(runs, (list, BlueskyMsgpackCatalog, BlueskyMongoCatalog)):\n", " raise TypeError(\"Must give run object or list of run objects.\")\n", " if len(runs) == 0:\n", " raise ValueError(\"Must provide one or more runs.\")\n", "\n", " specwriter = SpecWriterCallback2()\n", " specwriter.spec_filename = filename\n", " for uid in runs:\n", " if isinstance(uid, str):\n", " run = runs[uid]\n", " else:\n", " run = uid\n", " if not isinstance(run, databroker.core.BlueskyRun):\n", " warnings.warn(f\"Skipping {run=}, it is not a BlueskyRun object.\")\n", " continue\n", " # to get the raw document stream, need the v1 interface\n", " h = run.catalog_object.v1[run.name] # header\n", " for key, doc in h.db.get_documents(h):\n", " specwriter.receiver(key, doc)\n", " # lines = specwriter.prepare_scan_contents()\n", " print(f\"Look at SPEC data file: {specwriter.spec_filename}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Write the run as SPEC data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's write it as a SPEC data file (namely: `spec1.dat`):" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Look at SPEC data file: spec1.dat\n" ] } ], "source": [ "import pathlib\n", "\n", "spec1_dat = pathlib.Path(\"spec1.dat\")\n", "if spec1_dat.exists(): # re-write the file\n", " spec1_dat.unlink() # delete the existing file\n", "\n", "specfile_example(run, filename=spec1_dat)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's view file `spec1.dat` from disk storage (using the [pycat](https://ipython.readthedocs.io/en/stable/interactive/magics.html?highlight=pycat#magic-pycat) IPython magic function):" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[38;5;66;03m#F spec1.dat\u001b[39;00m\n", "\u001b[38;5;66;03m#E 1764089251.7365375\u001b[39;00m\n", "\u001b[38;5;66;03m#D Tue Nov 25 10:47:31 2025\u001b[39;00m\n", "\u001b[38;5;66;03m#C Bluesky user = prjemian host = arf.jemian.org\u001b[39;00m\n", "\u001b[38;5;66;03m#O0 atth chi motor mx my mz omega phi\u001b[39;00m\n", "\u001b[38;5;66;03m#O1 ttheta\u001b[39;00m\n", "\u001b[38;5;66;03m#o0 atth chi motor mx my mz omega phi\u001b[39;00m\n", "\u001b[38;5;66;03m#o1 ttheta\u001b[39;00m\n", "\n", "\u001b[38;5;66;03m#S 1 scan(detectors=['det'], num=41, args='['motor', -1.2, 1.2]', per_step='None')\u001b[39;00m\n", "\u001b[38;5;66;03m#D Tue Nov 25 10:47:31 2025\u001b[39;00m\n", "\u001b[38;5;66;03m#C Tue Nov 25 10:47:36 2025. uid = de507b9d-c75b-465b-94f7-a7797b983f44\u001b[39;00m\n", "\u001b[38;5;66;03m#P0 0 0 1.2 0 0 0 0 0\u001b[39;00m\n", "\u001b[38;5;66;03m#P1 0\u001b[39;00m\n", "\u001b[38;5;66;03m#MD versions = {'ophyd': '1.11.0', 'bluesky': '1.14.6'}\u001b[39;00m\n", "\u001b[38;5;66;03m#MD plan_type = generator\u001b[39;00m\n", "\u001b[38;5;66;03m#MD plan_name = scan\u001b[39;00m\n", "\u001b[38;5;66;03m#MD detectors = ['det']\u001b[39;00m\n", "\u001b[38;5;66;03m#MD motors = ['motor']\u001b[39;00m\n", "\u001b[38;5;66;03m#MD num_points = 41\u001b[39;00m\n", "\u001b[38;5;66;03m#MD num_intervals = 40\u001b[39;00m\n", "\u001b[38;5;66;03m#MD plan_args = {'detectors': [\"EpicsSignal(read_pv='gp:userCalc1.VAL', name='det', timestamp=1764088504.230701, tolerance=1e-05, auto_monitor=False, string=False, write_pv='gp:userCalc1.VAL', limits=False, put_complete=False)\"], 'num': 41, 'args': [\"EpicsMotor(prefix='gp:m1', name='motor', settle_time=0.0, timeout=None, read_attrs=['user_readback', 'user_setpoint'], configuration_attrs=['user_offset', 'user_offset_dir', 'velocity', 'acceleration', 'motor_egu'])\", -1.2, 1.2], 'per_step': 'None'}\u001b[39;00m\n", "\u001b[38;5;66;03m#MD hints = {'dimensions': [[['motor'], 'primary']]}\u001b[39;00m\n", "\u001b[38;5;66;03m#MD plan_pattern = inner_product\u001b[39;00m\n", "\u001b[38;5;66;03m#MD plan_pattern_module = bluesky.plan_patterns\u001b[39;00m\n", "\u001b[38;5;66;03m#MD plan_pattern_args = {'num': 41, 'args': [\"EpicsMotor(prefix='gp:m1', name='motor', settle_time=0.0, timeout=None, read_attrs=['user_readback', 'user_setpoint'], configuration_attrs=['user_offset', 'user_offset_dir', 'velocity', 'acceleration', 'motor_egu'])\", -1.2, 1.2]}\u001b[39;00m\n", "\u001b[38;5;66;03m#N 5\u001b[39;00m\n", "\u001b[38;5;66;03m#L motor Epoch Epoch_float motor_user_setpoint det\u001b[39;00m\n", "-\u001b[32m1.2\u001b[39m \u001b[32m5\u001b[39m \u001b[32m4.798788785934\u001b[39m -\u001b[32m1.2\u001b[39m \u001b[32m4.697096076314e-70\u001b[39m\n", "-\u001b[32m1.14\u001b[39m \u001b[32m5\u001b[39m \u001b[32m5.081346988678\u001b[39m -\u001b[32m1.14\u001b[39m \u001b[32m4.114682306176e-62\u001b[39m\n", "-\u001b[32m1.08\u001b[39m \u001b[32m5\u001b[39m \u001b[32m5.382177829742\u001b[39m -\u001b[32m1.08\u001b[39m \u001b[32m1.191150081374e-54\u001b[39m\n", "-\u001b[32m1.02\u001b[39m \u001b[32m6\u001b[39m \u001b[32m5.682698965073\u001b[39m -\u001b[32m1.02\u001b[39m \u001b[32m1.287762326763e-47\u001b[39m\n", "-\u001b[32m0.96\u001b[39m \u001b[32m6\u001b[39m \u001b[32m5.984358787537\u001b[39m -\u001b[32m0.96\u001b[39m \u001b[32m4.982474832648e-41\u001b[39m\n", "-\u001b[32m0.9\u001b[39m \u001b[32m6\u001b[39m \u001b[32m6.283968687057\u001b[39m -\u001b[32m0.9\u001b[39m \u001b[32m6.816012652073e-35\u001b[39m\n", "-\u001b[32m0.84\u001b[39m \u001b[32m7\u001b[39m \u001b[32m6.58753156662\u001b[39m -\u001b[32m0.84\u001b[39m \u001b[32m3.40895401415e-29\u001b[39m\n", "-\u001b[32m0.78\u001b[39m \u001b[32m7\u001b[39m \u001b[32m6.885951042175\u001b[39m -\u001b[32m0.78\u001b[39m \u001b[32m6.102627367248e-24\u001b[39m\n", "-\u001b[32m0.72\u001b[39m \u001b[32m7\u001b[39m \u001b[32m7.186074256897\u001b[39m -\u001b[32m0.72\u001b[39m \u001b[32m3.855028249112e-19\u001b[39m\n", "-\u001b[32m0.66\u001b[39m \u001b[32m7\u001b[39m \u001b[32m7.477291345596\u001b[39m -\u001b[32m0.66\u001b[39m \u001b[32m8.37741144642e-15\u001b[39m\n", "-\u001b[32m0.6\u001b[39m \u001b[32m8\u001b[39m \u001b[32m7.788086652756\u001b[39m -\u001b[32m0.6\u001b[39m \u001b[32m6.602897660574e-11\u001b[39m\n", "-\u001b[32m0.54\u001b[39m \u001b[32m8\u001b[39m \u001b[32m8.088327646255\u001b[39m -\u001b[32m0.54\u001b[39m \u001b[32m1.981647945317e-07\u001b[39m\n", "-\u001b[32m0.48\u001b[39m \u001b[32m8\u001b[39m \u001b[32m8.388518571854\u001b[39m -\u001b[32m0.48\u001b[39m \u001b[32m0.0002010513966765\u001b[39m\n", "-\u001b[32m0.42\u001b[39m \u001b[32m9\u001b[39m \u001b[32m8.689679145813\u001b[39m -\u001b[32m0.42\u001b[39m \u001b[32m0.07198503319617\u001b[39m\n", "-\u001b[32m0.36\u001b[39m \u001b[32m9\u001b[39m \u001b[32m8.99031829834\u001b[39m -\u001b[32m0.36\u001b[39m \u001b[32m9.705444449639\u001b[39m\n", "-\u001b[32m0.3\u001b[39m \u001b[32m9\u001b[39m \u001b[32m9.290639400482\u001b[39m -\u001b[32m0.3\u001b[39m \u001b[32m444.9252801024\u001b[39m\n", "-\u001b[32m0.24\u001b[39m \u001b[32m10\u001b[39m \u001b[32m9.591261386871\u001b[39m -\u001b[32m0.24\u001b[39m \u001b[32m7559.369770398\u001b[39m\n", "-\u001b[32m0.18\u001b[39m \u001b[32m10\u001b[39m \u001b[32m9.892528533936\u001b[39m -\u001b[32m0.18\u001b[39m \u001b[32m44718.83239994\u001b[39m\n", "-\u001b[32m0.12\u001b[39m \u001b[32m10\u001b[39m \u001b[32m10.19314527512\u001b[39m -\u001b[32m0.12\u001b[39m \u001b[32m93527.29017926\u001b[39m\n", "-\u001b[32m0.06\u001b[39m \u001b[32m10\u001b[39m \u001b[32m10.48501563072\u001b[39m -\u001b[32m0.06\u001b[39m \u001b[32m72688.52312141\u001b[39m\n", "\u001b[32m0\u001b[39m \u001b[32m11\u001b[39m \u001b[32m10.79420518875\u001b[39m \u001b[32m0\u001b[39m \u001b[32m19567.78836187\u001b[39m\n", "\u001b[32m0.06\u001b[39m \u001b[32m11\u001b[39m \u001b[32m11.09540462494\u001b[39m \u001b[32m0.06\u001b[39m \u001b[32m1927.74181425\u001b[39m\n", "\u001b[32m0.12\u001b[39m \u001b[32m11\u001b[39m \u001b[32m11.39624977112\u001b[39m \u001b[32m0.12\u001b[39m \u001b[32m67.65719559994\u001b[39m\n", "\u001b[32m0.18\u001b[39m \u001b[32m12\u001b[39m \u001b[32m11.69581484795\u001b[39m \u001b[32m0.18\u001b[39m \u001b[32m0.8225804876164\u001b[39m\n", "\u001b[32m0.24\u001b[39m \u001b[32m12\u001b[39m \u001b[32m11.99742436409\u001b[39m \u001b[32m0.24\u001b[39m \u001b[32m0.003772408428037\u001b[39m\n", "\u001b[32m0.3\u001b[39m \u001b[32m12\u001b[39m \u001b[32m12.29894351959\u001b[39m \u001b[32m0.3\u001b[39m \u001b[32m5.963670063734e-06\u001b[39m\n", "\u001b[32m0.36\u001b[39m \u001b[32m13\u001b[39m \u001b[32m12.58793568611\u001b[39m \u001b[32m0.36\u001b[39m \u001b[32m3.346353217619e-09\u001b[39m\n", "\u001b[32m0.42\u001b[39m \u001b[32m13\u001b[39m \u001b[32m12.88823223114\u001b[39m \u001b[32m0.42\u001b[39m \u001b[32m6.644520253063e-13\u001b[39m\n", "\u001b[32m0.48\u001b[39m \u001b[32m13\u001b[39m \u001b[32m13.18871331215\u001b[39m \u001b[32m0.48\u001b[39m \u001b[32m4.840757860829e-17\u001b[39m\n", "\u001b[32m0.54\u001b[39m \u001b[32m13\u001b[39m \u001b[32m13.49933886528\u001b[39m \u001b[32m0.54\u001b[39m \u001b[32m1.272406018296e-21\u001b[39m\n", "\u001b[32m0.6\u001b[39m \u001b[32m14\u001b[39m \u001b[32m13.78994488716\u001b[39m \u001b[32m0.6\u001b[39m \u001b[32m1.210375244034e-26\u001b[39m\n", "\u001b[32m0.66\u001b[39m \u001b[32m14\u001b[39m \u001b[32m14.09026098251\u001b[39m \u001b[32m0.66\u001b[39m \u001b[32m4.007957513344e-32\u001b[39m\n", "\u001b[32m0.72\u001b[39m \u001b[32m14\u001b[39m \u001b[32m14.39210033417\u001b[39m \u001b[32m0.72\u001b[39m \u001b[32m4.60698256011e-38\u001b[39m\n", "\u001b[32m0.78\u001b[39m \u001b[32m15\u001b[39m \u001b[32m14.69092798233\u001b[39m \u001b[32m0.78\u001b[39m \u001b[32m1.996277220905e-44\u001b[39m\n", "\u001b[32m0.84\u001b[39m \u001b[32m15\u001b[39m \u001b[32m14.99262237549\u001b[39m \u001b[32m0.84\u001b[39m \u001b[32m2.970223944581e-51\u001b[39m\n", "\u001b[32m0.9\u001b[39m \u001b[32m15\u001b[39m \u001b[32m15.30345225334\u001b[39m \u001b[32m0.9\u001b[39m \u001b[32m1.625809092382e-58\u001b[39m\n", "\u001b[32m0.96\u001b[39m \u001b[32m16\u001b[39m \u001b[32m15.60361862183\u001b[39m \u001b[32m0.96\u001b[39m \u001b[32m3.065464820924e-66\u001b[39m\n", "\u001b[32m1.02\u001b[39m \u001b[32m16\u001b[39m \u001b[32m15.89481163025\u001b[39m \u001b[32m1.02\u001b[39m \u001b[32m2.158397475032e-74\u001b[39m\n", "\u001b[32m1.08\u001b[39m \u001b[32m16\u001b[39m \u001b[32m16.2053592205\u001b[39m \u001b[32m1.08\u001b[39m \u001b[32m5.307692599663e-83\u001b[39m\n", "\u001b[32m1.14\u001b[39m \u001b[32m17\u001b[39m \u001b[32m16.50043964386\u001b[39m \u001b[32m1.14\u001b[39m \u001b[32m4.71594745842e-92\u001b[39m\n", "\u001b[32m1.2\u001b[39m \u001b[32m17\u001b[39m \u001b[32m16.80608057976\u001b[39m \u001b[32m1.2\u001b[39m \u001b[32m1.489067902142e-101\u001b[39m\n", "\u001b[38;5;66;03m#C Tue Nov 25 10:47:48 2025. num_events_label_start_motor = 1\u001b[39;00m\n", "\u001b[38;5;66;03m#C Tue Nov 25 10:47:48 2025. num_events_primary = 41\u001b[39;00m\n", "\u001b[38;5;66;03m#C Tue Nov 25 10:47:48 2025. exit_status = success\u001b[39;00m\n" ] } ], "source": [ "%pycat spec1.dat" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that the output of the `specfile_example()` command includes the content of the SPEC file. For the remaining examples, we'll skip this additional step to view the SPEC file contents from disk." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## a specific scan\n", "\n", "The `cat` object allows us to access scans by UUID (or any shorter version that remains unique in the database). We show an example but have commented it out since those runs do not exist in our temporary databroker catalog." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# specfile_example(cat[\"37c188c0\"], filename=\"spec3.dat\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## specify a list of scans by UID\n", "\n", "Suppose we have a list of scans where we know the UID of each one, we can build a list of headers and write a SPEC data file with that list. Here, we have such a list of tuning scans. We show an example but have commented it out since those runs do not exist in our temporary databroker catalog." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# runs = [cat[uid] for uid in \"957d83c c354fe37-e39f 42c\".split()]\n", "# specfile_example(runs, filename=\"spec_tunes.dat\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Find specific plans within a range of dates\n", "\n", "The `cat` object allows for filtering arguments based on any keywords in the *start* document and also by time. Here, we filter between certain dates and also by `plan name`. The dates are specified in [ISO8601 format](https://www.iso.org/iso-8601-date-and-time-format.html) and can include precision beyond a millisecond. Here, we use the `v2` interface to do the searches. We show examples how to pick between a set of dates.\n", "\n", "Also, we write to the default data file: `test_specdata.txt`." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "de507b9d 2025-11-25 10:47:31.736537\n", "Look at SPEC data file: test_specdata.txt\n" ] } ], "source": [ "from databroker.queries import TimeRange\n", "import datetime\n", "\n", "test_specdata_txt = pathlib.Path(\"test_specdata.txt\")\n", "if test_specdata_txt.exists(): # will re-write the file\n", " test_specdata_txt.unlink()\n", "\n", "query = {}\n", "query.update(TimeRange(since=\"2019-02-19 17:00\"))\n", "query.update(TimeRange(until=\"2032-02-19 17:11:30\"))\n", "query.update(dict(plan_name=\"scan\"))\n", "\n", "runs = cat.v2.search(query)\n", "for uid in runs:\n", " run = runs[uid]\n", " start_time = run.metadata[\"start\"][\"time\"]\n", " isodate = datetime.datetime.fromtimestamp(start_time).isoformat(sep=\" \")\n", " print(uid[:8], isodate)\n", "specfile_example(runs, test_specdata_txt)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[38;5;66;03m#F test_specdata.txt\u001b[39;00m\n", "\u001b[38;5;66;03m#E 1764089251.7365375\u001b[39;00m\n", "\u001b[38;5;66;03m#D Tue Nov 25 10:47:31 2025\u001b[39;00m\n", "\u001b[38;5;66;03m#C Bluesky user = prjemian host = arf.jemian.org\u001b[39;00m\n", "\u001b[38;5;66;03m#O0 atth chi motor mx my mz omega phi\u001b[39;00m\n", "\u001b[38;5;66;03m#O1 ttheta\u001b[39;00m\n", "\u001b[38;5;66;03m#o0 atth chi motor mx my mz omega phi\u001b[39;00m\n", "\u001b[38;5;66;03m#o1 ttheta\u001b[39;00m\n", "\n", "\u001b[38;5;66;03m#S 1 scan(detectors=['det'], num=41, args='['motor', -1.2, 1.2]', per_step='None')\u001b[39;00m\n", "\u001b[38;5;66;03m#D Tue Nov 25 10:47:31 2025\u001b[39;00m\n", "\u001b[38;5;66;03m#C Tue Nov 25 10:47:36 2025. uid = de507b9d-c75b-465b-94f7-a7797b983f44\u001b[39;00m\n", "\u001b[38;5;66;03m#P0 0 0 1.2 0 0 0 0 0\u001b[39;00m\n", "\u001b[38;5;66;03m#P1 0\u001b[39;00m\n", "\u001b[38;5;66;03m#MD versions = {'ophyd': '1.11.0', 'bluesky': '1.14.6'}\u001b[39;00m\n", "\u001b[38;5;66;03m#MD plan_type = generator\u001b[39;00m\n", "\u001b[38;5;66;03m#MD plan_name = scan\u001b[39;00m\n", "\u001b[38;5;66;03m#MD detectors = ['det']\u001b[39;00m\n", "\u001b[38;5;66;03m#MD motors = ['motor']\u001b[39;00m\n", "\u001b[38;5;66;03m#MD num_points = 41\u001b[39;00m\n", "\u001b[38;5;66;03m#MD num_intervals = 40\u001b[39;00m\n", "\u001b[38;5;66;03m#MD plan_args = {'detectors': [\"EpicsSignal(read_pv='gp:userCalc1.VAL', name='det', timestamp=1764088504.230701, tolerance=1e-05, auto_monitor=False, string=False, write_pv='gp:userCalc1.VAL', limits=False, put_complete=False)\"], 'num': 41, 'args': [\"EpicsMotor(prefix='gp:m1', name='motor', settle_time=0.0, timeout=None, read_attrs=['user_readback', 'user_setpoint'], configuration_attrs=['user_offset', 'user_offset_dir', 'velocity', 'acceleration', 'motor_egu'])\", -1.2, 1.2], 'per_step': 'None'}\u001b[39;00m\n", "\u001b[38;5;66;03m#MD hints = {'dimensions': [[['motor'], 'primary']]}\u001b[39;00m\n", "\u001b[38;5;66;03m#MD plan_pattern = inner_product\u001b[39;00m\n", "\u001b[38;5;66;03m#MD plan_pattern_module = bluesky.plan_patterns\u001b[39;00m\n", "\u001b[38;5;66;03m#MD plan_pattern_args = {'num': 41, 'args': [\"EpicsMotor(prefix='gp:m1', name='motor', settle_time=0.0, timeout=None, read_attrs=['user_readback', 'user_setpoint'], configuration_attrs=['user_offset', 'user_offset_dir', 'velocity', 'acceleration', 'motor_egu'])\", -1.2, 1.2]}\u001b[39;00m\n", "\u001b[38;5;66;03m#N 5\u001b[39;00m\n", "\u001b[38;5;66;03m#L motor Epoch Epoch_float motor_user_setpoint det\u001b[39;00m\n", "-\u001b[32m1.2\u001b[39m \u001b[32m5\u001b[39m \u001b[32m4.798788785934\u001b[39m -\u001b[32m1.2\u001b[39m \u001b[32m4.697096076314e-70\u001b[39m\n", "-\u001b[32m1.14\u001b[39m \u001b[32m5\u001b[39m \u001b[32m5.081346988678\u001b[39m -\u001b[32m1.14\u001b[39m \u001b[32m4.114682306176e-62\u001b[39m\n", "-\u001b[32m1.08\u001b[39m \u001b[32m5\u001b[39m \u001b[32m5.382177829742\u001b[39m -\u001b[32m1.08\u001b[39m \u001b[32m1.191150081374e-54\u001b[39m\n", "-\u001b[32m1.02\u001b[39m \u001b[32m6\u001b[39m \u001b[32m5.682698965073\u001b[39m -\u001b[32m1.02\u001b[39m \u001b[32m1.287762326763e-47\u001b[39m\n", "-\u001b[32m0.96\u001b[39m \u001b[32m6\u001b[39m \u001b[32m5.984358787537\u001b[39m -\u001b[32m0.96\u001b[39m \u001b[32m4.982474832648e-41\u001b[39m\n", "-\u001b[32m0.9\u001b[39m \u001b[32m6\u001b[39m \u001b[32m6.283968687057\u001b[39m -\u001b[32m0.9\u001b[39m \u001b[32m6.816012652073e-35\u001b[39m\n", "-\u001b[32m0.84\u001b[39m \u001b[32m7\u001b[39m \u001b[32m6.58753156662\u001b[39m -\u001b[32m0.84\u001b[39m \u001b[32m3.40895401415e-29\u001b[39m\n", "-\u001b[32m0.78\u001b[39m \u001b[32m7\u001b[39m \u001b[32m6.885951042175\u001b[39m -\u001b[32m0.78\u001b[39m \u001b[32m6.102627367248e-24\u001b[39m\n", "-\u001b[32m0.72\u001b[39m \u001b[32m7\u001b[39m \u001b[32m7.186074256897\u001b[39m -\u001b[32m0.72\u001b[39m \u001b[32m3.855028249112e-19\u001b[39m\n", "-\u001b[32m0.66\u001b[39m \u001b[32m7\u001b[39m \u001b[32m7.477291345596\u001b[39m -\u001b[32m0.66\u001b[39m \u001b[32m8.37741144642e-15\u001b[39m\n", "-\u001b[32m0.6\u001b[39m \u001b[32m8\u001b[39m \u001b[32m7.788086652756\u001b[39m -\u001b[32m0.6\u001b[39m \u001b[32m6.602897660574e-11\u001b[39m\n", "-\u001b[32m0.54\u001b[39m \u001b[32m8\u001b[39m \u001b[32m8.088327646255\u001b[39m -\u001b[32m0.54\u001b[39m \u001b[32m1.981647945317e-07\u001b[39m\n", "-\u001b[32m0.48\u001b[39m \u001b[32m8\u001b[39m \u001b[32m8.388518571854\u001b[39m -\u001b[32m0.48\u001b[39m \u001b[32m0.0002010513966765\u001b[39m\n", "-\u001b[32m0.42\u001b[39m \u001b[32m9\u001b[39m \u001b[32m8.689679145813\u001b[39m -\u001b[32m0.42\u001b[39m \u001b[32m0.07198503319617\u001b[39m\n", "-\u001b[32m0.36\u001b[39m \u001b[32m9\u001b[39m \u001b[32m8.99031829834\u001b[39m -\u001b[32m0.36\u001b[39m \u001b[32m9.705444449639\u001b[39m\n", "-\u001b[32m0.3\u001b[39m \u001b[32m9\u001b[39m \u001b[32m9.290639400482\u001b[39m -\u001b[32m0.3\u001b[39m \u001b[32m444.9252801024\u001b[39m\n", "-\u001b[32m0.24\u001b[39m \u001b[32m10\u001b[39m \u001b[32m9.591261386871\u001b[39m -\u001b[32m0.24\u001b[39m \u001b[32m7559.369770398\u001b[39m\n", "-\u001b[32m0.18\u001b[39m \u001b[32m10\u001b[39m \u001b[32m9.892528533936\u001b[39m -\u001b[32m0.18\u001b[39m \u001b[32m44718.83239994\u001b[39m\n", "-\u001b[32m0.12\u001b[39m \u001b[32m10\u001b[39m \u001b[32m10.19314527512\u001b[39m -\u001b[32m0.12\u001b[39m \u001b[32m93527.29017926\u001b[39m\n", "-\u001b[32m0.06\u001b[39m \u001b[32m10\u001b[39m \u001b[32m10.48501563072\u001b[39m -\u001b[32m0.06\u001b[39m \u001b[32m72688.52312141\u001b[39m\n", "\u001b[32m0\u001b[39m \u001b[32m11\u001b[39m \u001b[32m10.79420518875\u001b[39m \u001b[32m0\u001b[39m \u001b[32m19567.78836187\u001b[39m\n", "\u001b[32m0.06\u001b[39m \u001b[32m11\u001b[39m \u001b[32m11.09540462494\u001b[39m \u001b[32m0.06\u001b[39m \u001b[32m1927.74181425\u001b[39m\n", "\u001b[32m0.12\u001b[39m \u001b[32m11\u001b[39m \u001b[32m11.39624977112\u001b[39m \u001b[32m0.12\u001b[39m \u001b[32m67.65719559994\u001b[39m\n", "\u001b[32m0.18\u001b[39m \u001b[32m12\u001b[39m \u001b[32m11.69581484795\u001b[39m \u001b[32m0.18\u001b[39m \u001b[32m0.8225804876164\u001b[39m\n", "\u001b[32m0.24\u001b[39m \u001b[32m12\u001b[39m \u001b[32m11.99742436409\u001b[39m \u001b[32m0.24\u001b[39m \u001b[32m0.003772408428037\u001b[39m\n", "\u001b[32m0.3\u001b[39m \u001b[32m12\u001b[39m \u001b[32m12.29894351959\u001b[39m \u001b[32m0.3\u001b[39m \u001b[32m5.963670063734e-06\u001b[39m\n", "\u001b[32m0.36\u001b[39m \u001b[32m13\u001b[39m \u001b[32m12.58793568611\u001b[39m \u001b[32m0.36\u001b[39m \u001b[32m3.346353217619e-09\u001b[39m\n", "\u001b[32m0.42\u001b[39m \u001b[32m13\u001b[39m \u001b[32m12.88823223114\u001b[39m \u001b[32m0.42\u001b[39m \u001b[32m6.644520253063e-13\u001b[39m\n", "\u001b[32m0.48\u001b[39m \u001b[32m13\u001b[39m \u001b[32m13.18871331215\u001b[39m \u001b[32m0.48\u001b[39m \u001b[32m4.840757860829e-17\u001b[39m\n", "\u001b[32m0.54\u001b[39m \u001b[32m13\u001b[39m \u001b[32m13.49933886528\u001b[39m \u001b[32m0.54\u001b[39m \u001b[32m1.272406018296e-21\u001b[39m\n", "\u001b[32m0.6\u001b[39m \u001b[32m14\u001b[39m \u001b[32m13.78994488716\u001b[39m \u001b[32m0.6\u001b[39m \u001b[32m1.210375244034e-26\u001b[39m\n", "\u001b[32m0.66\u001b[39m \u001b[32m14\u001b[39m \u001b[32m14.09026098251\u001b[39m \u001b[32m0.66\u001b[39m \u001b[32m4.007957513344e-32\u001b[39m\n", "\u001b[32m0.72\u001b[39m \u001b[32m14\u001b[39m \u001b[32m14.39210033417\u001b[39m \u001b[32m0.72\u001b[39m \u001b[32m4.60698256011e-38\u001b[39m\n", "\u001b[32m0.78\u001b[39m \u001b[32m15\u001b[39m \u001b[32m14.69092798233\u001b[39m \u001b[32m0.78\u001b[39m \u001b[32m1.996277220905e-44\u001b[39m\n", "\u001b[32m0.84\u001b[39m \u001b[32m15\u001b[39m \u001b[32m14.99262237549\u001b[39m \u001b[32m0.84\u001b[39m \u001b[32m2.970223944581e-51\u001b[39m\n", "\u001b[32m0.9\u001b[39m \u001b[32m15\u001b[39m \u001b[32m15.30345225334\u001b[39m \u001b[32m0.9\u001b[39m \u001b[32m1.625809092382e-58\u001b[39m\n", "\u001b[32m0.96\u001b[39m \u001b[32m16\u001b[39m \u001b[32m15.60361862183\u001b[39m \u001b[32m0.96\u001b[39m \u001b[32m3.065464820924e-66\u001b[39m\n", "\u001b[32m1.02\u001b[39m \u001b[32m16\u001b[39m \u001b[32m15.89481163025\u001b[39m \u001b[32m1.02\u001b[39m \u001b[32m2.158397475032e-74\u001b[39m\n", "\u001b[32m1.08\u001b[39m \u001b[32m16\u001b[39m \u001b[32m16.2053592205\u001b[39m \u001b[32m1.08\u001b[39m \u001b[32m5.307692599663e-83\u001b[39m\n", "\u001b[32m1.14\u001b[39m \u001b[32m17\u001b[39m \u001b[32m16.50043964386\u001b[39m \u001b[32m1.14\u001b[39m \u001b[32m4.71594745842e-92\u001b[39m\n", "\u001b[32m1.2\u001b[39m \u001b[32m17\u001b[39m \u001b[32m16.80608057976\u001b[39m \u001b[32m1.2\u001b[39m \u001b[32m1.489067902142e-101\u001b[39m\n", "\u001b[38;5;66;03m#C Tue Nov 25 10:47:48 2025. num_events_label_start_motor = 1\u001b[39;00m\n", "\u001b[38;5;66;03m#C Tue Nov 25 10:47:48 2025. num_events_primary = 41\u001b[39;00m\n", "\u001b[38;5;66;03m#C Tue Nov 25 10:47:48 2025. exit_status = success\u001b[39;00m\n" ] } ], "source": [ "%pycat test_specdata.txt" ] } ], "metadata": { "kernelspec": { "display_name": "apstools", "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.14" } }, "nbformat": 4, "nbformat_minor": 4 }