{ "cells": [ { "cell_type": "markdown", "id": "4a62c860-ef33-483c-b12d-8ad6717c0375", "metadata": {}, "source": [ "# Recording and Histogramming Noise" ] }, { "cell_type": "code", "execution_count": 1, "id": "4091e7f1-f685-49d0-bf94-b2ab84796664", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Skutils is in beta, please contact support@skutek.com with bugs, issues, and questions\n" ] } ], "source": [ "import skutils\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import tempfile\n", "import os" ] }, { "cell_type": "markdown", "id": "59d7839c-1bca-4f49-96f9-77eb43f5e81c", "metadata": {}, "source": [ "## Connect to your digitizer\n", "\n", "Fill in this spot with your own FemtoDAQ device location" ] }, { "cell_type": "code", "execution_count": 2, "id": "905c5c1d-ac3a-419a-9ed1-ada688c38aa7", "metadata": {}, "outputs": [], "source": [ "# Fill in this spot with your own FemtoDAQ device location\n", "DIGITIZER_URL = \"http://vireo-000019.tek\"\n", "digitizer = skutils.FemtoDAQController(DIGITIZER_URL, skip_version_check=True)" ] }, { "cell_type": "markdown", "id": "96f1958d-9ebb-4ced-a849-7acc42385413", "metadata": {}, "source": [ "## Configure a Data Collection Run" ] }, { "cell_type": "code", "execution_count": 3, "id": "f228ee1c-b4ab-4583-a2f6-e1869d37d042", "metadata": {}, "outputs": [], "source": [ "NUMBER_OF_EVENTS = 1000\n", "# Configuring the vireo\n", "# Configure the vireo to record both channels, with 4096 samples in the waveform\n", "# Use eventcsv as it's easier to demo\n", "recording_channels = [0, 1]\n", "digitizer.configureRecording(\n", " recording_channels,\n", " number_of_samples_to_capture=4096,\n", " file_recording_format=\"eventcsv\",\n", " file_recording_data_output=\"waveforms\",\n", ")\n", "# enable triggers\n", "digitizer.setEnableTrigger(0, True)\n", "digitizer.setEnableTrigger(1, True)\n", "# Default offset\n", "digitizer.setDigitalOffset(0, 0)\n", "digitizer.setDigitalOffset(1, 0)\n", "digitizer.setAnalogOffsetPercent(0, 0)\n", "digitizer.setAnalogOffsetPercent(1, 0)\n", "\n", "# Allow us to see the beginning of the pulse, if we wish.\n", "digitizer.setTriggerXPosition(100)\n", "# This is the only digitizer we're using here, set the global id to 0\n", "digitizer.setGlobalId(0)\n", "# We want to capture the rising edge, and we want a \"fairly\" sensitive trigger\n", "digitizer.setTriggerEdge(0, \"rising\")\n", "digitizer.setTriggerEdge(1, \"rising\")\n", "digitizer.setTriggerSensitivity(0, 1)\n", "digitizer.setTriggerSensitivity(1, 1)\n", "# Trigger windows\n", "# The trigger active window can also be called the \"Coincidence window\"\n", "digitizer.setTriggerActiveWindow(4096)\n", "digitizer.setTriggerAveragingWindow(0, 1)\n", "digitizer.setTriggerAveragingWindow(1, 1)\n", "\n", "# Coincidence settings, I want both channels to have triggered in order to be a true \"trigger\" and recording the data point\n", "digitizer.configureCoincidence(\"multiplicity\", trigger_multiplicity=1)" ] }, { "cell_type": "markdown", "id": "05d3b511-d44e-4a7a-8416-20949708bdb5", "metadata": {}, "source": [ "## Collect Data" ] }, { "cell_type": "code", "execution_count": 4, "id": "5c337dd7-6f04-4eaf-b705-a3f19092fb99", "metadata": {}, "outputs": [], "source": [ "digitizer.start(NUMBER_OF_EVENTS)\n", "\n", "# wait until we're done collecting data or 5 minutes has passed\n", "timed_out = digitizer.waitUntil(timeout_time=360)\n", "# Technically not needed, just for posterity\n", "digitizer.stop()" ] }, { "cell_type": "markdown", "id": "f356ae97-f8ff-40f3-b96f-4a84d299fecd", "metadata": {}, "source": [ "## Download your data" ] }, { "cell_type": "code", "execution_count": 5, "id": "216dbfb2-89cb-4d4a-aadc-fb856578d385", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Vireo-000019 (http://vireo-000019.tek) Controller : downloaded `API_Recording_09.53.37AM_May15_2025_seq000001.ecsv` to 'C:\\Users\\Jeff\\AppData\\Local\\Temp\\API_Recording_09.53.37AM_May15_2025_seq000001.ecsv'\n" ] } ], "source": [ "# in this case I am storing them in a temporary directory to not fill directories on my system\n", "file_list = digitizer.downloadLastRunDataFiles(tempfile.gettempdir())" ] }, { "cell_type": "markdown", "id": "8951bdde-f493-4c79-8a7b-34085c404041", "metadata": {}, "source": [ "## Calculate Pulse Heights from your Waveforms" ] }, { "cell_type": "code", "execution_count": 6, "id": "488d3b1b-dfef-42a4-9066-2ebc5aad2a4b", "metadata": {}, "outputs": [], "source": [ "pulse_heights = [[] for _ in digitizer.channels]\n", "\n", "event_count = 0\n", "for event in skutils.quickLoad(file_list):\n", " for channel in event.channel_data:\n", " assert channel.has_wave\n", " height = np.max(channel.wave)\n", "\n", " pulse_heights[channel.channel].append(height)" ] }, { "cell_type": "markdown", "id": "6535cf41-65c0-4c8e-ba7e-48962383899b", "metadata": {}, "source": [ "## Build a Histogram" ] }, { "cell_type": "code", "execution_count": 7, "id": "8d39dca3-413f-4a88-8a7b-c83e84c41aaf", "metadata": {}, "outputs": [ { "data": { "image/png": "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WbZsmdStW9fUuVGjRvLFF1+IL9db/w93795dqlSpYvazjrZbvHixx2v46z5X33zzjfzud78z9dEJrWbMmHHF6/jaPrfp5UN0f2q9d+/eHRDH+fXq7q/H+fXq7dTj3Cemur/VPv74Yxk4cKBMmzZNOnToYILH3r17Xcv1OkIaTnTW2y1btsiJEyekX79+Urx4cfM76siRI6bM4MGDzY7WSeiefvpp8x8gJsa515SYOnWqqbutXLlyrp+fe+45Ux93HTt2NFeldqcT/hw8eND1+FbN9luUdbd9+eWX0qBBA9djnc3Ypv8XnnjiCXNphm7dusmSJUtMsN21a5c0bNhQfLHeWqfGjRvL+PHjzRQAK1asMP/XdaIlraM/73OdZbNTp07mIqbz5s2TPXv2yH/+53+aSSIHDRrk0/tcjRs3zszm+fXXX3s87+/H+bXq7s/H+bXq7djjXEfx4DeXLl2y7rjjDuudd965apkvvvjCCg4OtlJTU13PzZ071woLC7OysrLM43HjxlkNGjTw+L3HHnvMiomJsZzqzjvvtGbNmpXv8rt379YRYNbmzZtdzy1YsMAKDw+3fM316n7kyBFT13/+859XLfPoo49asbGxHs+1bt3aeuaZZyx/2eeqa9eu1lNPPeX3+3zOnDnWbbfd5jqm1fjx4606der49D6338Pq1q1rJScnX/f/tT8d59eru78e5wXd5045zjnFk4um4J9++kmCg4OlWbNmpsWjS5cuHi0oiYmJplnPfVI5bRXRb1zJycmuMvrNy52W0eedTJu49duC1n3mzJlXnLZy984778g999xjmsDdnT17Vu68807TJK7NhvY2cbr81P0Pf/iDOaXXrl07+fzzzz2WBcI+t68mXr58eb/f57rfHnjgAXNpDvf9qd8g//Wvf/nsPtdrnmmr0d///ndzivp6/Ok4z2/d/e04TyvgPnfKcU5AyeXw4cOu87ATJkwwTV3aB6V9+/bmAoVKZ77NPeOt/ViXXauMhphff/1VnGjEiBGydOlS2bBhgzzzzDPmdJU2CeblwoUL5tRVXFycx/N16tSR+fPny2effSbvvfeeucbSfffdJz/++KM42fXqXrZsWfnzn/9szj1r/yR949JmXfc3r6vtc/v/hK/vc/Xhhx/Kjh07PC5J4a/7/GaOc6fuc532asCAAeYUjl5m5Hr86TjPT939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VaBti7zMnj1batSoYeqkx8z27dvFn+ilOe69914pV66cOdb1veDgwYMeZS5cuCBDhw41s2GXLVtWevXqdcXElfl5z/AlCQkJ5j1h5MiRAbkdfvrpJ3nyySdNXfV9QY/nnTt3upbreBUd1VqlShWzPDo6Wr777juP19AZ1Pv06WMmcNPJSvV95uzZs+K3dBQPbs5HH31k3XbbbdbcuXOtgwcPWsnJydYHH3zgWp6dnW01bNjQio6Otv75z39aX3zxhXX77bdb8fHxrjKHDx+2SpcubY0ePdrat2+f9cYbb1ghISHW6tWrLV8zYsQIq0uXLjo6zNTXlpGRYVWqVMnq06ePtXfvXuv999+3SpUqZb311luuMl999ZWp94wZM8x2mDBhglW8eHFrz549lq9YtWqVNWDAAGvNmjXW999/b3322WdWZGSkNWbMmIDbFrktXbrUKlGihDV//nxznAwcONCKiIiw0tLSLH8RExNjLViwwOzX3bt3W127drWioqKss2fPusoMHjzYql69urVu3Tpr586dVps2baz77ruvQO8ZvmT79u1WjRo1rMaNG1vPPvtswG2H06dPW3feead5X9i2bZt5v9f3h0OHDrnKJCQkWOHh4dann35qff3119Yf/vAHq2bNmtavv/7qKtO5c2erSZMm1tatW63/+Z//sWrVqmU98cQTlr8ioNykS5cuWXfccYf1zjvvXLWMHlTBwcFWamqq6zkNM2FhYVZWVpZ5PG7cOKtBgwYev/fYY4+ZNztfonWtW7eu+fDJHVDmzJljgpxdZzV+/HirTp06rsePPvqoFRsb6/GarVu3tp555hnLl2nI0DebQN8WrVq1soYOHep6fPnyZatq1arW9OnTLX918uRJcyxs2rTJPE5PTzdBc9myZa4y+/fvN2USExPz/Z7hK86cOWPVrl3bWrt2rfX73//eFVACaTvosd2uXburLs/JybEqV65szZw50/Vcenq6FRoaar68KP2Sottmx44dHl+GgoKCrJ9++snyR5ziuUm7du0yTXfBwcHSrFkz0zzXpUsX2bt3r6tMYmKiac5zn4QuJibGXBQqOTnZVUab9NxpGX3eV2jT7MCBA+Xvf/+7aY7NTevywAMPmEsduNdRm7//9a9/+c12yEtGRoaUL18+oLeFnuJKSkryqJMeN/rYV+uU332v7P2v2+DSpUse20FP40VFRbm2Q37eM3yFnsLRUzS5/y8H0nb4/PPPzazp//Ef/2FOU+lnxdtvv+1afuTIETNhqfu2CA8PN6dA3beFntbR17FpeT2Gtm3bJv6IgHKTDh8+bO4nT54sEyZMkBUrVpg+KO3btzfnC5X+x8s9Q679WJddq4weiL/++qs4nbbGDRgwQAYPHuxxALm7me1gL/dFhw4dkjfeeEOeeeaZgN4WP//8s1y+fNmv6nQ9eo0x7XNx//33S8OGDc1zWlcNprkveOq+HfLz/8MXLF261HyJ0345uQXSdtDPiblz50rt2rVlzZo1MmTIEBkxYoQsWrTIoy7XOjZSU1NNuHFXrFgxE3x9aVsUBAHlKp5//nnToetatwMHDpg3IPXCCy+YDl56EcQFCxaY5drBMVC2g34A6yW04+PjxV/ld1u409a1zp07m29O2rqEwKKtB9qaqh/UgSYlJUWeffZZWbx4sekQHcj0c0IHQEybNs20ngwaNMi8H8ybN8/bq+ZoXrsWj9ONGTPGtAhcy1133SUnTpwwP9evX9/1vI7C0WXa+1xVrlz5ipEKdk91XWbf5+69ro+1t7b26Hb6dli/fr1pgsx9/QhtTdFe5/pN4Wp1zM92sJd7U363he348ePy4IMPyn333Sd//etfPcr5+ra4EbfffruEhIT4VZ2uZdiwYaZFdfPmzVKtWjXX81pXPd2Vnp7u0Xrgvh3y857hdHoK5+TJk+aD2aYtaLo93nzzTdOSEAjbQempf/fPCFWvXj35+OOPPeqiddOytrS0NDMi0i6j29OdjmbSlnpf2hYF4u1OML5OR2NoRyb3TrIXL140ozbsERl2Ry/3kQq6TDt6XbhwwdVJVnuru9Pe2b7SSfaHH34wo0vsm/ZQ1/9eOsIpJSXFo2Oobh+b9sbP3TG0W7duHq/dtm1bn+sY+uOPP5qOgY8//rgZiZBbIG2L3J1khw0b5tFJVjuZ+1MnWe3wqB2BtfPvt99+e8Vyu3OoHhu2AwcO5Nk59FrvGU6XmZnp8Z6gt5YtW1pPPvmk+TlQtoP9Xp67k+zIkSPN8ezeSfaVV1654rPl/VydZHW0k03fZ/25kywBpRBor3R9k9X/LHqAxcXFmYCiQ8vch8p16tTJDDvUocMVK1bMc5jx2LFjTU/22bNn++wwY3XkyJErRvHoG5IOre3bt68ZgqlDTrXOuYfWFitWzByouh0mTZrkc0NrNZzo8L+OHTuan0+cOOG6Bdq2yE3rqW+6CxcuNG+4gwYNMsOM3Udp+LohQ4aY4aIbN2702Pfnz5/3GF6rQ4/Xr19vPnD0g8r+sMrve4Yvch/FE0jbQYdZ67H88ssvW9999521ePFic7y/9957HsOM9VjQaQm++eYbq3v37nkOM27WrJkZqvy///u/5ksQw4xxTfotWOe40FBSrlw5M2ZfP3TcHT161MwNonNd6Dh+La9DlN1t2LDBatq0qZkn4q677jJzKfiqvAKK0vH9+k1CP6Q01OlBmduHH35o3XPPPWY76NDrlStXWr5E95vWPa9boG2LvOgcP/qhpHXSFhWd08GfXG3fux/P+qHzX//1X6YVTT+oHnnkEY8Am9/3DF8PKIG0HZYvX27Clh7vOhXDX//6V4/l2ory4osvmi8uWqZjx45mXi13v/zyiwkkZcuWNa1ITz31lBnG7a+C9B9vn2YCAABwxygeAADgOAQUAADgOAQUAADgOAQUAADgOAQUAADgOAQUAADgOAQUAADgOAQUAADgOAQUAADgOAQUAADgOAQUAADgOAQUAAAgTvN/y1EIFY8johUAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "total_range = digitizer.adc_max_val - digitizer.adc_min_val\n", "total_bins = total_range // 4\n", "hist_builder = []\n", "for height_list in pulse_heights:\n", " hist_builder.append(np.histogram(height_list, bins=total_bins))\n", "\n", "\n", "fig, axes = plt.subplots(2, 1)\n", "\n", "for i in range(len(hist_builder)):\n", " hist, edges = hist_builder[i]\n", " axes[i].bar(edges[1:], hist, width=3.5, label=f\"channel {i}\")\n", " axes[i].legend()\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "id": "5d57185a-0861-409a-b261-4c92a6b58f41", "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.10" } }, "nbformat": 4, "nbformat_minor": 5 }