From ee3c7d61b636b7d91929bf765093d922b7747a58 Mon Sep 17 00:00:00 2001
From: Jan Clemens Ethodrome documentationThe docs are published at https://janclemenslab.org/ethodrome.
Requires:
mamba install sphinx furo sphinx-inline-tabs ghp-import myst-nb sphinx-panels -c conda-forge
# need the latest version for proper light/dark mode
mamba install sphinx furo sphinx-inline-tabs sphinx-copybutton ghp-import myst-nb sphinx-panels -c conda-forge
# need the latest version for proper light/dark mode
pip install sphinxcontrib-images
+
+
diff --git a/_modules/etho/call/client_old.html b/_modules/etho/call/client_old.html
index 49e769b..cd212df 100644
--- a/_modules/etho/call/client_old.html
+++ b/_modules/etho/call/client_old.html
@@ -11,6 +11,7 @@
+
@@ -679,6 +680,8 @@ Source code for etho.call.client_old
+
+
diff --git a/_modules/etho/cli.html b/_modules/etho/cli.html
index df6a441..ed1b124 100644
--- a/_modules/etho/cli.html
+++ b/_modules/etho/cli.html
@@ -11,6 +11,7 @@
+
@@ -506,6 +507,8 @@ Source code for etho.cli
+
+
diff --git a/_modules/etho/gui/app.html b/_modules/etho/gui/app.html
index 5e68b89..bd1aef0 100644
--- a/_modules/etho/gui/app.html
+++ b/_modules/etho/gui/app.html
@@ -11,6 +11,7 @@
+
@@ -763,6 +764,8 @@ Source code for etho.gui.app
+
+
diff --git a/_modules/etho/gui/wxBusyDialog.html b/_modules/etho/gui/wxBusyDialog.html
index e6599b7..d13a13e 100644
--- a/_modules/etho/gui/wxBusyDialog.html
+++ b/_modules/etho/gui/wxBusyDialog.html
@@ -11,6 +11,7 @@
+
@@ -355,6 +356,8 @@ Source code for etho.gui.wxBusyDialog
+
+
diff --git a/_modules/etho/gui/wxCam.html b/_modules/etho/gui/wxCam.html
index 3310562..920d632 100644
--- a/_modules/etho/gui/wxCam.html
+++ b/_modules/etho/gui/wxCam.html
@@ -11,6 +11,7 @@
+
@@ -367,6 +368,8 @@ Source code for etho.gui.wxCam
+
+
diff --git a/_modules/etho/gui/wxCtrl.html b/_modules/etho/gui/wxCtrl.html
index 364d6df..1f6080d 100644
--- a/_modules/etho/gui/wxCtrl.html
+++ b/_modules/etho/gui/wxCtrl.html
@@ -11,6 +11,7 @@
+
@@ -406,6 +407,8 @@ Source code for etho.gui.wxCtrl
+
+
diff --git a/_modules/etho/gui/wxCtrl_ephys.html b/_modules/etho/gui/wxCtrl_ephys.html
index c9dca38..a5cd5b2 100644
--- a/_modules/etho/gui/wxCtrl_ephys.html
+++ b/_modules/etho/gui/wxCtrl_ephys.html
@@ -11,6 +11,7 @@
+
@@ -394,6 +395,8 @@ Source code for etho.gui.wxCtrl_ephys
+
+
diff --git a/_modules/etho/gui/wxCtrl_rpi.html b/_modules/etho/gui/wxCtrl_rpi.html
index 0e6b498..2fdf568 100644
--- a/_modules/etho/gui/wxCtrl_rpi.html
+++ b/_modules/etho/gui/wxCtrl_rpi.html
@@ -11,6 +11,7 @@
+
@@ -424,6 +425,8 @@ Source code for etho.gui.wxCtrl_rpi
+
+
diff --git a/_modules/etho/gui/wxCtrl_vr.html b/_modules/etho/gui/wxCtrl_vr.html
index a173b28..017b251 100644
--- a/_modules/etho/gui/wxCtrl_vr.html
+++ b/_modules/etho/gui/wxCtrl_vr.html
@@ -11,6 +11,7 @@
+
@@ -414,6 +415,8 @@ Source code for etho.gui.wxCtrl_vr
+
+
diff --git a/_modules/etho/gui/wxDangerDialog.html b/_modules/etho/gui/wxDangerDialog.html
index 0381962..1a32cfb 100644
--- a/_modules/etho/gui/wxDangerDialog.html
+++ b/_modules/etho/gui/wxDangerDialog.html
@@ -11,6 +11,7 @@
+
@@ -409,6 +410,8 @@ Source code for etho.gui.wxDangerDialog
+
+
diff --git a/_modules/etho/services/BLTZeroService.html b/_modules/etho/services/BLTZeroService.html
index 85063c7..e0186bb 100644
--- a/_modules/etho/services/BLTZeroService.html
+++ b/_modules/etho/services/BLTZeroService.html
@@ -11,6 +11,7 @@
+
@@ -413,6 +414,8 @@ Source code for etho.services.BLTZeroService
+
+
diff --git a/_modules/etho/services/CamZeroService.html b/_modules/etho/services/CamZeroService.html
index 1945ad8..e8aa8c4 100644
--- a/_modules/etho/services/CamZeroService.html
+++ b/_modules/etho/services/CamZeroService.html
@@ -11,6 +11,7 @@
+
@@ -466,6 +467,8 @@ Source code for etho.services.CamZeroService
+
+
diff --git a/_modules/etho/services/DAQZeroService.html b/_modules/etho/services/DAQZeroService.html
index 571de7b..38500c6 100644
--- a/_modules/etho/services/DAQZeroService.html
+++ b/_modules/etho/services/DAQZeroService.html
@@ -11,6 +11,7 @@
+
@@ -597,6 +598,8 @@ Source code for etho.services.DAQZeroService
+
+
diff --git a/_modules/etho/services/DLPZeroService.html b/_modules/etho/services/DLPZeroService.html
index d8936e6..beda0da 100644
--- a/_modules/etho/services/DLPZeroService.html
+++ b/_modules/etho/services/DLPZeroService.html
@@ -11,6 +11,7 @@
+
@@ -545,6 +546,8 @@ Source code for etho.services.DLPZeroService
+
+
diff --git a/_modules/etho/services/GCMZeroService.html b/_modules/etho/services/GCMZeroService.html
index fc93824..62efffb 100644
--- a/_modules/etho/services/GCMZeroService.html
+++ b/_modules/etho/services/GCMZeroService.html
@@ -11,6 +11,7 @@
+
@@ -546,6 +547,8 @@ Source code for etho.services.GCMZeroService
+
+
diff --git a/_modules/etho/services/NICounterZeroService.html b/_modules/etho/services/NICounterZeroService.html
index 8678956..4fb1026 100644
--- a/_modules/etho/services/NICounterZeroService.html
+++ b/_modules/etho/services/NICounterZeroService.html
@@ -11,6 +11,7 @@
+
@@ -397,6 +398,8 @@ Source code for etho.services.NICounterZeroService
+
+
diff --git a/_modules/etho/services/Opt2ZeroService.html b/_modules/etho/services/Opt2ZeroService.html
index adddf80..fde4df9 100644
--- a/_modules/etho/services/Opt2ZeroService.html
+++ b/_modules/etho/services/Opt2ZeroService.html
@@ -11,6 +11,7 @@
+
@@ -459,6 +460,8 @@ Source code for etho.services.Opt2ZeroService
+
+
diff --git a/_modules/etho/services/RelayZeroService.html b/_modules/etho/services/RelayZeroService.html
index 00c0408..9e7769b 100644
--- a/_modules/etho/services/RelayZeroService.html
+++ b/_modules/etho/services/RelayZeroService.html
@@ -11,6 +11,7 @@
+
@@ -404,6 +405,8 @@ Source code for etho.services.RelayZeroService
+
+
diff --git a/_modules/etho/services/SndZeroService.html b/_modules/etho/services/SndZeroService.html
index 6e07620..cded727 100644
--- a/_modules/etho/services/SndZeroService.html
+++ b/_modules/etho/services/SndZeroService.html
@@ -11,6 +11,7 @@
+
@@ -436,6 +437,8 @@
Source code for etho.services.SndZeroService
+
+
diff --git a/_modules/etho/services/TemplateZeroService.html b/_modules/etho/services/TemplateZeroService.html
index 94eb450..a260944 100644
--- a/_modules/etho/services/TemplateZeroService.html
+++ b/_modules/etho/services/TemplateZeroService.html
@@ -11,6 +11,7 @@
+
@@ -403,6 +404,8 @@ Source code for etho.services.TemplateZeroService
+
+
diff --git a/_modules/etho/services/ThuAZeroService.html b/_modules/etho/services/ThuAZeroService.html
index 0e8af9d..892e935 100644
--- a/_modules/etho/services/ThuAZeroService.html
+++ b/_modules/etho/services/ThuAZeroService.html
@@ -11,6 +11,7 @@
+
@@ -412,6 +413,8 @@ Source code for etho.services.ThuAZeroService
+
+
diff --git a/_modules/etho/services/ThuZeroService.html b/_modules/etho/services/ThuZeroService.html
index 19e4ee9..926de9d 100644
--- a/_modules/etho/services/ThuZeroService.html
+++ b/_modules/etho/services/ThuZeroService.html
@@ -11,6 +11,7 @@
+
@@ -466,6 +467,8 @@ Source code for etho.services.ThuZeroService
+
+
diff --git a/_modules/etho/services/ZeroService.html b/_modules/etho/services/ZeroService.html
index 383ed29..ce76bf8 100644
--- a/_modules/etho/services/ZeroService.html
+++ b/_modules/etho/services/ZeroService.html
@@ -11,6 +11,7 @@
+
@@ -593,6 +594,8 @@ Source code for etho.services.ZeroService
+
+
diff --git a/_modules/etho/services/camera/spinnaker_old.html b/_modules/etho/services/camera/spinnaker_old.html
index 3cbc0ca..76f6b12 100644
--- a/_modules/etho/services/camera/spinnaker_old.html
+++ b/_modules/etho/services/camera/spinnaker_old.html
@@ -11,6 +11,7 @@
+
@@ -624,6 +625,8 @@ Source code for etho.services.camera.spinnaker_old
+
+
diff --git a/_modules/etho/services/dlp/dlp_make_warpfiles.html b/_modules/etho/services/dlp/dlp_make_warpfiles.html
index fcf5a8e..3444ba1 100644
--- a/_modules/etho/services/dlp/dlp_make_warpfiles.html
+++ b/_modules/etho/services/dlp/dlp_make_warpfiles.html
@@ -11,6 +11,7 @@
+
@@ -436,6 +437,8 @@ Source code for etho.services.dlp.dlp_make_warpfiles
+
+
diff --git a/_modules/etho/services/dlp/dlp_runners.html b/_modules/etho/services/dlp/dlp_runners.html
index c0b3017..1a1a71e 100644
--- a/_modules/etho/services/dlp/dlp_runners.html
+++ b/_modules/etho/services/dlp/dlp_runners.html
@@ -11,6 +11,7 @@
+
@@ -543,6 +544,8 @@ Source code for etho.services.dlp.dlp_runners
+
+
diff --git a/_modules/etho/services/utils/concurrent_task.html b/_modules/etho/services/utils/concurrent_task.html
index a6a47cd..0e88cf8 100644
--- a/_modules/etho/services/utils/concurrent_task.html
+++ b/_modules/etho/services/utils/concurrent_task.html
@@ -11,6 +11,7 @@
+
@@ -541,6 +542,8 @@ Source code for etho.services.utils.concurrent_task
+
+
diff --git a/_modules/etho/services/utils/log_exceptions.html b/_modules/etho/services/utils/log_exceptions.html
index 4f14750..1184c5b 100644
--- a/_modules/etho/services/utils/log_exceptions.html
+++ b/_modules/etho/services/utils/log_exceptions.html
@@ -11,6 +11,7 @@
+
@@ -344,6 +345,8 @@ Source code for etho.services.utils.log_exceptions
+
+
diff --git a/_modules/etho/utils/config.html b/_modules/etho/utils/config.html
index b7bec0f..1635191 100644
--- a/_modules/etho/utils/config.html
+++ b/_modules/etho/utils/config.html
@@ -11,6 +11,7 @@
+
@@ -342,6 +343,8 @@ Source code for etho.utils.config
+
+
diff --git a/_modules/etho/utils/runner.html b/_modules/etho/utils/runner.html
index 38544fe..6576df2 100644
--- a/_modules/etho/utils/runner.html
+++ b/_modules/etho/utils/runner.html
@@ -11,6 +11,7 @@
+
@@ -497,6 +498,8 @@ Source code for etho.utils.runner
+
+
diff --git a/_modules/etho/utils/shuffled_cycle.html b/_modules/etho/utils/shuffled_cycle.html
index d4b0efe..3a30904 100644
--- a/_modules/etho/utils/shuffled_cycle.html
+++ b/_modules/etho/utils/shuffled_cycle.html
@@ -11,6 +11,7 @@
+
@@ -350,6 +351,8 @@ Source code for etho.utils.shuffled_cycle
+
+
diff --git a/_modules/etho/utils/sound.html b/_modules/etho/utils/sound.html
index d470c4d..b3a5812 100644
--- a/_modules/etho/utils/sound.html
+++ b/_modules/etho/utils/sound.html
@@ -11,6 +11,7 @@
+
@@ -644,6 +645,8 @@ Source code for etho.utils.sound
+
+
diff --git a/_modules/etho/utils/tui.html b/_modules/etho/utils/tui.html
index 6e9756d..fff9ae2 100644
--- a/_modules/etho/utils/tui.html
+++ b/_modules/etho/utils/tui.html
@@ -11,6 +11,7 @@
+
@@ -410,6 +411,8 @@ Source code for etho.utils.tui
+
+
diff --git a/_modules/index.html b/_modules/index.html
index b52a04f..c2fec80 100644
--- a/_modules/index.html
+++ b/_modules/index.html
@@ -11,6 +11,7 @@
+
@@ -339,6 +340,8 @@ All modules for which code is available
+
+
diff --git a/_sources/README.md.txt b/_sources/README.md.txt
index a7aaa1f..90d22c9 100644
--- a/_sources/README.md.txt
+++ b/_sources/README.md.txt
@@ -4,7 +4,7 @@ The docs are published at [https://janclemenslab.org/ethodrome]().
Requires:
-- `mamba install sphinx furo sphinx-inline-tabs ghp-import myst-nb sphinx-panels -c conda-forge` # need the latest version for proper light/dark mode
+- `mamba install sphinx furo sphinx-inline-tabs sphinx-copybutton ghp-import myst-nb sphinx-panels -c conda-forge` # need the latest version for proper light/dark mode
- `pip install sphinxcontrib-images`
### Build
diff --git a/_static/check-solid.svg b/_static/check-solid.svg
new file mode 100644
index 0000000..92fad4b
--- /dev/null
+++ b/_static/check-solid.svg
@@ -0,0 +1,4 @@
+
diff --git a/_static/clipboard.min.js b/_static/clipboard.min.js
new file mode 100644
index 0000000..54b3c46
--- /dev/null
+++ b/_static/clipboard.min.js
@@ -0,0 +1,7 @@
+/*!
+ * clipboard.js v2.0.8
+ * https://clipboardjs.com/
+ *
+ * Licensed MIT © Zeno Rocha
+ */
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1
+
+
+
+
diff --git a/_static/copybutton.css b/_static/copybutton.css
new file mode 100644
index 0000000..f1916ec
--- /dev/null
+++ b/_static/copybutton.css
@@ -0,0 +1,94 @@
+/* Copy buttons */
+button.copybtn {
+ position: absolute;
+ display: flex;
+ top: .3em;
+ right: .3em;
+ width: 1.7em;
+ height: 1.7em;
+ opacity: 0;
+ transition: opacity 0.3s, border .3s, background-color .3s;
+ user-select: none;
+ padding: 0;
+ border: none;
+ outline: none;
+ border-radius: 0.4em;
+ /* The colors that GitHub uses */
+ border: #1b1f2426 1px solid;
+ background-color: #f6f8fa;
+ color: #57606a;
+}
+
+button.copybtn.success {
+ border-color: #22863a;
+ color: #22863a;
+}
+
+button.copybtn svg {
+ stroke: currentColor;
+ width: 1.5em;
+ height: 1.5em;
+ padding: 0.1em;
+}
+
+div.highlight {
+ position: relative;
+}
+
+/* Show the copybutton */
+.highlight:hover button.copybtn, button.copybtn.success {
+ opacity: 1;
+}
+
+.highlight button.copybtn:hover {
+ background-color: rgb(235, 235, 235);
+}
+
+.highlight button.copybtn:active {
+ background-color: rgb(187, 187, 187);
+}
+
+/**
+ * A minimal CSS-only tooltip copied from:
+ * https://codepen.io/mildrenben/pen/rVBrpK
+ *
+ * To use, write HTML like the following:
+ *
+ * Short
+ */
+ .o-tooltip--left {
+ position: relative;
+ }
+
+ .o-tooltip--left:after {
+ opacity: 0;
+ visibility: hidden;
+ position: absolute;
+ content: attr(data-tooltip);
+ padding: .2em;
+ font-size: .8em;
+ left: -.2em;
+ background: grey;
+ color: white;
+ white-space: nowrap;
+ z-index: 2;
+ border-radius: 2px;
+ transform: translateX(-102%) translateY(0);
+ transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1);
+}
+
+.o-tooltip--left:hover:after {
+ display: block;
+ opacity: 1;
+ visibility: visible;
+ transform: translateX(-100%) translateY(0);
+ transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1);
+ transition-delay: .5s;
+}
+
+/* By default the copy button shouldn't show up when printing a page */
+@media print {
+ button.copybtn {
+ display: none;
+ }
+}
diff --git a/_static/copybutton.js b/_static/copybutton.js
new file mode 100644
index 0000000..2ea7ff3
--- /dev/null
+++ b/_static/copybutton.js
@@ -0,0 +1,248 @@
+// Localization support
+const messages = {
+ 'en': {
+ 'copy': 'Copy',
+ 'copy_to_clipboard': 'Copy to clipboard',
+ 'copy_success': 'Copied!',
+ 'copy_failure': 'Failed to copy',
+ },
+ 'es' : {
+ 'copy': 'Copiar',
+ 'copy_to_clipboard': 'Copiar al portapapeles',
+ 'copy_success': '¡Copiado!',
+ 'copy_failure': 'Error al copiar',
+ },
+ 'de' : {
+ 'copy': 'Kopieren',
+ 'copy_to_clipboard': 'In die Zwischenablage kopieren',
+ 'copy_success': 'Kopiert!',
+ 'copy_failure': 'Fehler beim Kopieren',
+ },
+ 'fr' : {
+ 'copy': 'Copier',
+ 'copy_to_clipboard': 'Copier dans le presse-papier',
+ 'copy_success': 'Copié !',
+ 'copy_failure': 'Échec de la copie',
+ },
+ 'ru': {
+ 'copy': 'Скопировать',
+ 'copy_to_clipboard': 'Скопировать в буфер',
+ 'copy_success': 'Скопировано!',
+ 'copy_failure': 'Не удалось скопировать',
+ },
+ 'zh-CN': {
+ 'copy': '复制',
+ 'copy_to_clipboard': '复制到剪贴板',
+ 'copy_success': '复制成功!',
+ 'copy_failure': '复制失败',
+ },
+ 'it' : {
+ 'copy': 'Copiare',
+ 'copy_to_clipboard': 'Copiato negli appunti',
+ 'copy_success': 'Copiato!',
+ 'copy_failure': 'Errore durante la copia',
+ }
+}
+
+let locale = 'en'
+if( document.documentElement.lang !== undefined
+ && messages[document.documentElement.lang] !== undefined ) {
+ locale = document.documentElement.lang
+}
+
+let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT;
+if (doc_url_root == '#') {
+ doc_url_root = '';
+}
+
+/**
+ * SVG files for our copy buttons
+ */
+let iconCheck = ``
+
+// If the user specified their own SVG use that, otherwise use the default
+let iconCopy = ``;
+if (!iconCopy) {
+ iconCopy = ``
+}
+
+/**
+ * Set up copy/paste for code blocks
+ */
+
+const runWhenDOMLoaded = cb => {
+ if (document.readyState != 'loading') {
+ cb()
+ } else if (document.addEventListener) {
+ document.addEventListener('DOMContentLoaded', cb)
+ } else {
+ document.attachEvent('onreadystatechange', function() {
+ if (document.readyState == 'complete') cb()
+ })
+ }
+}
+
+const codeCellId = index => `codecell${index}`
+
+// Clears selected text since ClipboardJS will select the text when copying
+const clearSelection = () => {
+ if (window.getSelection) {
+ window.getSelection().removeAllRanges()
+ } else if (document.selection) {
+ document.selection.empty()
+ }
+}
+
+// Changes tooltip text for a moment, then changes it back
+// We want the timeout of our `success` class to be a bit shorter than the
+// tooltip and icon change, so that we can hide the icon before changing back.
+var timeoutIcon = 2000;
+var timeoutSuccessClass = 1500;
+
+const temporarilyChangeTooltip = (el, oldText, newText) => {
+ el.setAttribute('data-tooltip', newText)
+ el.classList.add('success')
+ // Remove success a little bit sooner than we change the tooltip
+ // So that we can use CSS to hide the copybutton first
+ setTimeout(() => el.classList.remove('success'), timeoutSuccessClass)
+ setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon)
+}
+
+// Changes the copy button icon for two seconds, then changes it back
+const temporarilyChangeIcon = (el) => {
+ el.innerHTML = iconCheck;
+ setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon)
+}
+
+const addCopyButtonToCodeCells = () => {
+ // If ClipboardJS hasn't loaded, wait a bit and try again. This
+ // happens because we load ClipboardJS asynchronously.
+ if (window.ClipboardJS === undefined) {
+ setTimeout(addCopyButtonToCodeCells, 250)
+ return
+ }
+
+ // Add copybuttons to all of our code cells
+ const COPYBUTTON_SELECTOR = 'div.highlight pre';
+ const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR)
+ codeCells.forEach((codeCell, index) => {
+ const id = codeCellId(index)
+ codeCell.setAttribute('id', id)
+
+ const clipboardButton = id =>
+ ``
+ codeCell.insertAdjacentHTML('afterend', clipboardButton(id))
+ })
+
+function escapeRegExp(string) {
+ return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
+}
+
+/**
+ * Removes excluded text from a Node.
+ *
+ * @param {Node} target Node to filter.
+ * @param {string} exclude CSS selector of nodes to exclude.
+ * @returns {DOMString} Text from `target` with text removed.
+ */
+function filterText(target, exclude) {
+ const clone = target.cloneNode(true); // clone as to not modify the live DOM
+ if (exclude) {
+ // remove excluded nodes
+ clone.querySelectorAll(exclude).forEach(node => node.remove());
+ }
+ return clone.innerText;
+}
+
+// Callback when a copy button is clicked. Will be passed the node that was clicked
+// should then grab the text and replace pieces of text that shouldn't be used in output
+function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") {
+ var regexp;
+ var match;
+
+ // Do we check for line continuation characters and "HERE-documents"?
+ var useLineCont = !!lineContinuationChar
+ var useHereDoc = !!hereDocDelim
+
+ // create regexp to capture prompt and remaining line
+ if (isRegexp) {
+ regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)')
+ } else {
+ regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)')
+ }
+
+ const outputLines = [];
+ var promptFound = false;
+ var gotLineCont = false;
+ var gotHereDoc = false;
+ const lineGotPrompt = [];
+ for (const line of textContent.split('\n')) {
+ match = line.match(regexp)
+ if (match || gotLineCont || gotHereDoc) {
+ promptFound = regexp.test(line)
+ lineGotPrompt.push(promptFound)
+ if (removePrompts && promptFound) {
+ outputLines.push(match[2])
+ } else {
+ outputLines.push(line)
+ }
+ gotLineCont = line.endsWith(lineContinuationChar) & useLineCont
+ if (line.includes(hereDocDelim) & useHereDoc)
+ gotHereDoc = !gotHereDoc
+ } else if (!onlyCopyPromptLines) {
+ outputLines.push(line)
+ } else if (copyEmptyLines && line.trim() === '') {
+ outputLines.push(line)
+ }
+ }
+
+ // If no lines with the prompt were found then just use original lines
+ if (lineGotPrompt.some(v => v === true)) {
+ textContent = outputLines.join('\n');
+ }
+
+ // Remove a trailing newline to avoid auto-running when pasting
+ if (textContent.endsWith("\n")) {
+ textContent = textContent.slice(0, -1)
+ }
+ return textContent
+}
+
+
+var copyTargetText = (trigger) => {
+ var target = document.querySelector(trigger.attributes['data-clipboard-target'].value);
+
+ // get filtered text
+ let exclude = '.linenos';
+
+ let text = filterText(target, exclude);
+ return formatCopyText(text, '', false, true, true, true, '', '')
+}
+
+ // Initialize with a callback so we can modify the text before copy
+ const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText})
+
+ // Update UI with error/success messages
+ clipboard.on('success', event => {
+ clearSelection()
+ temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success'])
+ temporarilyChangeIcon(event.trigger)
+ })
+
+ clipboard.on('error', event => {
+ temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure'])
+ })
+}
+
+runWhenDOMLoaded(addCopyButtonToCodeCells)
\ No newline at end of file
diff --git a/_static/copybutton_funcs.js b/_static/copybutton_funcs.js
new file mode 100644
index 0000000..dbe1aaa
--- /dev/null
+++ b/_static/copybutton_funcs.js
@@ -0,0 +1,73 @@
+function escapeRegExp(string) {
+ return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
+}
+
+/**
+ * Removes excluded text from a Node.
+ *
+ * @param {Node} target Node to filter.
+ * @param {string} exclude CSS selector of nodes to exclude.
+ * @returns {DOMString} Text from `target` with text removed.
+ */
+export function filterText(target, exclude) {
+ const clone = target.cloneNode(true); // clone as to not modify the live DOM
+ if (exclude) {
+ // remove excluded nodes
+ clone.querySelectorAll(exclude).forEach(node => node.remove());
+ }
+ return clone.innerText;
+}
+
+// Callback when a copy button is clicked. Will be passed the node that was clicked
+// should then grab the text and replace pieces of text that shouldn't be used in output
+export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") {
+ var regexp;
+ var match;
+
+ // Do we check for line continuation characters and "HERE-documents"?
+ var useLineCont = !!lineContinuationChar
+ var useHereDoc = !!hereDocDelim
+
+ // create regexp to capture prompt and remaining line
+ if (isRegexp) {
+ regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)')
+ } else {
+ regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)')
+ }
+
+ const outputLines = [];
+ var promptFound = false;
+ var gotLineCont = false;
+ var gotHereDoc = false;
+ const lineGotPrompt = [];
+ for (const line of textContent.split('\n')) {
+ match = line.match(regexp)
+ if (match || gotLineCont || gotHereDoc) {
+ promptFound = regexp.test(line)
+ lineGotPrompt.push(promptFound)
+ if (removePrompts && promptFound) {
+ outputLines.push(match[2])
+ } else {
+ outputLines.push(line)
+ }
+ gotLineCont = line.endsWith(lineContinuationChar) & useLineCont
+ if (line.includes(hereDocDelim) & useHereDoc)
+ gotHereDoc = !gotHereDoc
+ } else if (!onlyCopyPromptLines) {
+ outputLines.push(line)
+ } else if (copyEmptyLines && line.trim() === '') {
+ outputLines.push(line)
+ }
+ }
+
+ // If no lines with the prompt were found then just use original lines
+ if (lineGotPrompt.some(v => v === true)) {
+ textContent = outputLines.join('\n');
+ }
+
+ // Remove a trailing newline to avoid auto-running when pasting
+ if (textContent.endsWith("\n")) {
+ textContent = textContent.slice(0, -1)
+ }
+ return textContent
+}
diff --git a/api/etho.call.client.html b/api/etho.call.client.html
index 6959c2c..7be67db 100644
--- a/api/etho.call.client.html
+++ b/api/etho.call.client.html
@@ -12,6 +12,7 @@
+
@@ -362,6 +363,8 @@
+
+
diff --git a/api/etho.call.client_old.html b/api/etho.call.client_old.html
index deb77de..fb0b57d 100644
--- a/api/etho.call.client_old.html
+++ b/api/etho.call.client_old.html
@@ -12,6 +12,7 @@
+
@@ -343,6 +344,8 @@
+
+
diff --git a/api/etho.call.ephys.html b/api/etho.call.ephys.html
index 8bf5fd4..3b20134 100644
--- a/api/etho.call.ephys.html
+++ b/api/etho.call.ephys.html
@@ -12,6 +12,7 @@
+
@@ -326,6 +327,8 @@
+
+
diff --git a/api/etho.call.panoptikum.html b/api/etho.call.panoptikum.html
index 37fab93..dec574e 100644
--- a/api/etho.call.panoptikum.html
+++ b/api/etho.call.panoptikum.html
@@ -12,6 +12,7 @@
+
@@ -326,6 +327,8 @@
+
+
diff --git a/api/etho.call.rpi.html b/api/etho.call.rpi.html
index 6c8bc06..f623303 100644
--- a/api/etho.call.rpi.html
+++ b/api/etho.call.rpi.html
@@ -12,6 +12,7 @@
+
@@ -326,6 +327,8 @@
+
+
diff --git a/api/etho.call.vr.html b/api/etho.call.vr.html
index 67abeb5..bbfa092 100644
--- a/api/etho.call.vr.html
+++ b/api/etho.call.vr.html
@@ -12,6 +12,7 @@
+
@@ -326,6 +327,8 @@
+
+
diff --git a/api/etho.cli.html b/api/etho.cli.html
index b9bcad1..c4ca844 100644
--- a/api/etho.cli.html
+++ b/api/etho.cli.html
@@ -12,6 +12,7 @@
+
@@ -351,6 +352,8 @@
+
+
diff --git a/api/etho.gui.CamPreview.html b/api/etho.gui.CamPreview.html
index 9712f52..cd1fb24 100644
--- a/api/etho.gui.CamPreview.html
+++ b/api/etho.gui.CamPreview.html
@@ -12,6 +12,7 @@
+
@@ -327,6 +328,8 @@
+
+
diff --git a/api/etho.gui.ThuPreview.html b/api/etho.gui.ThuPreview.html
index 81fe380..06fcbf5 100644
--- a/api/etho.gui.ThuPreview.html
+++ b/api/etho.gui.ThuPreview.html
@@ -12,6 +12,7 @@
+
@@ -326,6 +327,8 @@
+
+
diff --git a/api/etho.gui.app.html b/api/etho.gui.app.html
index fea882e..54fc030 100644
--- a/api/etho.gui.app.html
+++ b/api/etho.gui.app.html
@@ -12,6 +12,7 @@
+
@@ -389,6 +390,8 @@
+
+
diff --git a/api/etho.gui.wxBusyDialog.html b/api/etho.gui.wxBusyDialog.html
index d68c879..ac66cbc 100644
--- a/api/etho.gui.wxBusyDialog.html
+++ b/api/etho.gui.wxBusyDialog.html
@@ -12,6 +12,7 @@
+
@@ -334,6 +335,8 @@
+
+
diff --git a/api/etho.gui.wxCam.html b/api/etho.gui.wxCam.html
index bde598c..e5eeb47 100644
--- a/api/etho.gui.wxCam.html
+++ b/api/etho.gui.wxCam.html
@@ -12,6 +12,7 @@
+
@@ -334,6 +335,8 @@
+
+
diff --git a/api/etho.gui.wxCtrl.html b/api/etho.gui.wxCtrl.html
index 9166336..80eb491 100644
--- a/api/etho.gui.wxCtrl.html
+++ b/api/etho.gui.wxCtrl.html
@@ -12,6 +12,7 @@
+
@@ -330,6 +331,8 @@
+
+
diff --git a/api/etho.gui.wxCtrl_ephys.html b/api/etho.gui.wxCtrl_ephys.html
index b6ce32d..bc80310 100644
--- a/api/etho.gui.wxCtrl_ephys.html
+++ b/api/etho.gui.wxCtrl_ephys.html
@@ -12,6 +12,7 @@
+
@@ -330,6 +331,8 @@
+
+
diff --git a/api/etho.gui.wxCtrl_rpi.html b/api/etho.gui.wxCtrl_rpi.html
index f4a9969..c6649fe 100644
--- a/api/etho.gui.wxCtrl_rpi.html
+++ b/api/etho.gui.wxCtrl_rpi.html
@@ -12,6 +12,7 @@
+
@@ -330,6 +331,8 @@
+
+
diff --git a/api/etho.gui.wxCtrl_vr.html b/api/etho.gui.wxCtrl_vr.html
index 1f8ceba..0af709c 100644
--- a/api/etho.gui.wxCtrl_vr.html
+++ b/api/etho.gui.wxCtrl_vr.html
@@ -12,6 +12,7 @@
+
@@ -330,6 +331,8 @@
+
+
diff --git a/api/etho.gui.wxDangerDialog.html b/api/etho.gui.wxDangerDialog.html
index 6e39db8..758902d 100644
--- a/api/etho.gui.wxDangerDialog.html
+++ b/api/etho.gui.wxDangerDialog.html
@@ -12,6 +12,7 @@
+
@@ -334,6 +335,8 @@
+
+
diff --git a/api/etho.services.BLTZeroService.html b/api/etho.services.BLTZeroService.html
index 0e027c6..718654b 100644
--- a/api/etho.services.BLTZeroService.html
+++ b/api/etho.services.BLTZeroService.html
@@ -12,6 +12,7 @@
+
@@ -356,6 +357,8 @@
+
+
diff --git a/api/etho.services.CamZeroService.html b/api/etho.services.CamZeroService.html
index 4b61643..d0494e0 100644
--- a/api/etho.services.CamZeroService.html
+++ b/api/etho.services.CamZeroService.html
@@ -12,6 +12,7 @@
+
@@ -362,6 +363,8 @@
+
+
diff --git a/api/etho.services.DAQZeroService.html b/api/etho.services.DAQZeroService.html
index 09c3dea..9d0385c 100644
--- a/api/etho.services.DAQZeroService.html
+++ b/api/etho.services.DAQZeroService.html
@@ -12,6 +12,7 @@
+
@@ -357,6 +358,8 @@
+
+
diff --git a/api/etho.services.DLPZeroService.html b/api/etho.services.DLPZeroService.html
index 5120777..d91c718 100644
--- a/api/etho.services.DLPZeroService.html
+++ b/api/etho.services.DLPZeroService.html
@@ -12,6 +12,7 @@
+
@@ -356,6 +357,8 @@
+
+
diff --git a/api/etho.services.GCMZeroService.html b/api/etho.services.GCMZeroService.html
index db160d3..c6cd72b 100644
--- a/api/etho.services.GCMZeroService.html
+++ b/api/etho.services.GCMZeroService.html
@@ -12,6 +12,7 @@
+
@@ -356,6 +357,8 @@
+
+
diff --git a/api/etho.services.NICounterZeroService.html b/api/etho.services.NICounterZeroService.html
index 5b7cfdc..0021c6b 100644
--- a/api/etho.services.NICounterZeroService.html
+++ b/api/etho.services.NICounterZeroService.html
@@ -12,6 +12,7 @@
+
@@ -357,6 +358,8 @@
+
+
diff --git a/api/etho.services.Opt2ZeroService.html b/api/etho.services.Opt2ZeroService.html
index 0a5b99a..3c98f65 100644
--- a/api/etho.services.Opt2ZeroService.html
+++ b/api/etho.services.Opt2ZeroService.html
@@ -12,6 +12,7 @@
+
@@ -359,6 +360,8 @@
+
+
diff --git a/api/etho.services.RelayZeroService.html b/api/etho.services.RelayZeroService.html
index 53182f9..95e7fb9 100644
--- a/api/etho.services.RelayZeroService.html
+++ b/api/etho.services.RelayZeroService.html
@@ -12,6 +12,7 @@
+
@@ -359,6 +360,8 @@
+
+
diff --git a/api/etho.services.SndZeroService.html b/api/etho.services.SndZeroService.html
index 30679fd..760a2ab 100644
--- a/api/etho.services.SndZeroService.html
+++ b/api/etho.services.SndZeroService.html
@@ -12,6 +12,7 @@
+
@@ -356,6 +357,8 @@
+
+
diff --git a/api/etho.services.TemplateZeroService.html b/api/etho.services.TemplateZeroService.html
index 9128c92..cb1116b 100644
--- a/api/etho.services.TemplateZeroService.html
+++ b/api/etho.services.TemplateZeroService.html
@@ -12,6 +12,7 @@
+
@@ -356,6 +357,8 @@
+
+
diff --git a/api/etho.services.ThuAZeroService.html b/api/etho.services.ThuAZeroService.html
index 3b0a33a..80f6db8 100644
--- a/api/etho.services.ThuAZeroService.html
+++ b/api/etho.services.ThuAZeroService.html
@@ -12,6 +12,7 @@
+
@@ -358,6 +359,8 @@
+
+
diff --git a/api/etho.services.ThuZeroService.html b/api/etho.services.ThuZeroService.html
index 172219a..43bd83e 100644
--- a/api/etho.services.ThuZeroService.html
+++ b/api/etho.services.ThuZeroService.html
@@ -12,6 +12,7 @@
+
@@ -358,6 +359,8 @@
+
+
diff --git a/api/etho.services.ZeroService.html b/api/etho.services.ZeroService.html
index 0fa550e..9dd00d4 100644
--- a/api/etho.services.ZeroService.html
+++ b/api/etho.services.ZeroService.html
@@ -12,6 +12,7 @@
+
@@ -401,6 +402,8 @@
+
+
diff --git a/api/etho.services.camera.base.html b/api/etho.services.camera.base.html
index 7f0785b..2cc8862 100644
--- a/api/etho.services.camera.base.html
+++ b/api/etho.services.camera.base.html
@@ -12,6 +12,7 @@
+
@@ -326,6 +327,8 @@
+
+
diff --git a/api/etho.services.camera.basler.html b/api/etho.services.camera.basler.html
index eeef0e0..fa75589 100644
--- a/api/etho.services.camera.basler.html
+++ b/api/etho.services.camera.basler.html
@@ -12,6 +12,7 @@
+
@@ -326,6 +327,8 @@
+
+
diff --git a/api/etho.services.camera.dummy.html b/api/etho.services.camera.dummy.html
index b686627..9a2f703 100644
--- a/api/etho.services.camera.dummy.html
+++ b/api/etho.services.camera.dummy.html
@@ -12,6 +12,7 @@
+
@@ -326,6 +327,8 @@
+
+
diff --git a/api/etho.services.camera.flycapture2.html b/api/etho.services.camera.flycapture2.html
index aad82d4..c551696 100644
--- a/api/etho.services.camera.flycapture2.html
+++ b/api/etho.services.camera.flycapture2.html
@@ -12,6 +12,7 @@
+
@@ -326,6 +327,8 @@
+
+
diff --git a/api/etho.services.camera.hamamatsu.html b/api/etho.services.camera.hamamatsu.html
index 395fc9e..366fdd4 100644
--- a/api/etho.services.camera.hamamatsu.html
+++ b/api/etho.services.camera.hamamatsu.html
@@ -12,6 +12,7 @@
+
@@ -326,6 +327,8 @@
+
+
diff --git a/api/etho.services.camera.spinnaker.html b/api/etho.services.camera.spinnaker.html
index 1c9c30a..a54cec6 100644
--- a/api/etho.services.camera.spinnaker.html
+++ b/api/etho.services.camera.spinnaker.html
@@ -12,6 +12,7 @@
+
@@ -326,6 +327,8 @@
+
+
diff --git a/api/etho.services.camera.spinnaker_old.html b/api/etho.services.camera.spinnaker_old.html
index b78217d..021c0d1 100644
--- a/api/etho.services.camera.spinnaker_old.html
+++ b/api/etho.services.camera.spinnaker_old.html
@@ -12,6 +12,7 @@
+
@@ -369,6 +370,8 @@
+
+
diff --git a/api/etho.services.camera.videocapture.html b/api/etho.services.camera.videocapture.html
index 81e0428..296fe38 100644
--- a/api/etho.services.camera.videocapture.html
+++ b/api/etho.services.camera.videocapture.html
@@ -12,6 +12,7 @@
+
@@ -326,6 +327,8 @@
+
+
diff --git a/api/etho.services.camera.ximea.html b/api/etho.services.camera.ximea.html
index 7b3d8d3..c7203cf 100644
--- a/api/etho.services.camera.ximea.html
+++ b/api/etho.services.camera.ximea.html
@@ -12,6 +12,7 @@
+
@@ -326,6 +327,8 @@
+
+
diff --git a/api/etho.services.dlp.dlp_make_warpfiles.html b/api/etho.services.dlp.dlp_make_warpfiles.html
index 8c68182..f82ebf5 100644
--- a/api/etho.services.dlp.dlp_make_warpfiles.html
+++ b/api/etho.services.dlp.dlp_make_warpfiles.html
@@ -12,6 +12,7 @@
+
@@ -373,6 +374,8 @@
+
+
diff --git a/api/etho.services.dlp.dlp_runners.html b/api/etho.services.dlp.dlp_runners.html
index b5ac16f..63a5c47 100644
--- a/api/etho.services.dlp.dlp_runners.html
+++ b/api/etho.services.dlp.dlp_runners.html
@@ -12,6 +12,7 @@
+
@@ -517,6 +518,8 @@
+
+
diff --git a/api/etho.services.utils.concurrent_task.html b/api/etho.services.utils.concurrent_task.html
index 0085b2a..81452cf 100644
--- a/api/etho.services.utils.concurrent_task.html
+++ b/api/etho.services.utils.concurrent_task.html
@@ -12,6 +12,7 @@
+
@@ -422,6 +423,8 @@
+
+
diff --git a/api/etho.services.utils.log_exceptions.html b/api/etho.services.utils.log_exceptions.html
index c48b54a..67cb717 100644
--- a/api/etho.services.utils.log_exceptions.html
+++ b/api/etho.services.utils.log_exceptions.html
@@ -12,6 +12,7 @@
+
@@ -338,6 +339,8 @@
+
+
diff --git a/api/etho.utils.config.html b/api/etho.utils.config.html
index 9fccf6f..0421afd 100644
--- a/api/etho.utils.config.html
+++ b/api/etho.utils.config.html
@@ -12,6 +12,7 @@
+
@@ -331,6 +332,8 @@
+
+
diff --git a/api/etho.utils.runner.html b/api/etho.utils.runner.html
index 4d4c243..4aa00b4 100644
--- a/api/etho.utils.runner.html
+++ b/api/etho.utils.runner.html
@@ -12,6 +12,7 @@
+
@@ -408,6 +409,8 @@
+
+
diff --git a/api/etho.utils.shuffled_cycle.html b/api/etho.utils.shuffled_cycle.html
index 28aa45e..a91f9eb 100644
--- a/api/etho.utils.shuffled_cycle.html
+++ b/api/etho.utils.shuffled_cycle.html
@@ -12,6 +12,7 @@
+
@@ -343,6 +344,8 @@
+
+
diff --git a/api/etho.utils.sound.html b/api/etho.utils.sound.html
index 228ebc1..94bfc34 100644
--- a/api/etho.utils.sound.html
+++ b/api/etho.utils.sound.html
@@ -12,6 +12,7 @@
+
@@ -434,6 +435,8 @@
+
+
diff --git a/api/etho.utils.tui.html b/api/etho.utils.tui.html
index 6eff341..15f1282 100644
--- a/api/etho.utils.tui.html
+++ b/api/etho.utils.tui.html
@@ -12,6 +12,7 @@
+
@@ -345,6 +346,8 @@
+
+
diff --git a/api/etho.utils.zeroclient.html b/api/etho.utils.zeroclient.html
index caa55a5..1194361 100644
--- a/api/etho.utils.zeroclient.html
+++ b/api/etho.utils.zeroclient.html
@@ -12,6 +12,7 @@
+
@@ -326,6 +327,8 @@
+
+
diff --git a/api_etho.html b/api_etho.html
index a4d9a74..f898296 100644
--- a/api_etho.html
+++ b/api_etho.html
@@ -12,6 +12,7 @@
+
@@ -483,6 +484,8 @@
+
+
diff --git a/callbacks.html b/callbacks.html
index 6d5c802..1c32004 100644
--- a/callbacks.html
+++ b/callbacks.html
@@ -12,6 +12,7 @@
+
@@ -362,6 +363,8 @@ Anatomy of a callback (make your own)
+
+
diff --git a/cli.html b/cli.html
index ecf5c4b..ad888b9 100644
--- a/cli.html
+++ b/cli.html
@@ -12,6 +12,7 @@
+
@@ -514,6 +515,8 @@ Display system, version, and hardware info
+
+
diff --git a/configuration/calibration_led.html b/configuration/calibration_led.html
index 7d5131a..b0d1536 100644
--- a/configuration/calibration_led.html
+++ b/configuration/calibration_led.html
@@ -12,6 +12,7 @@
+
@@ -327,6 +328,8 @@ LED calibration
+
+
diff --git a/configuration/calibration_speaker.html b/configuration/calibration_speaker.html
index 17c0a7c..f954a1d 100644
--- a/configuration/calibration_speaker.html
+++ b/configuration/calibration_speaker.html
@@ -12,6 +12,7 @@
+
@@ -406,6 +407,8 @@ Analyze the results
+
+
diff --git a/configuration/configuration.html b/configuration/configuration.html
index bcf843f..70529bd 100644
--- a/configuration/configuration.html
+++ b/configuration/configuration.html
@@ -12,6 +12,7 @@
+
@@ -335,6 +336,8 @@
+
+
diff --git a/configuration/global.html b/configuration/global.html
index 002aaaf..407e1f9 100644
--- a/configuration/global.html
+++ b/configuration/global.html
@@ -12,6 +12,7 @@
+
@@ -407,6 +408,8 @@ For RPI
+
+
diff --git a/configuration/playlist.html b/configuration/playlist.html
index b5c159f..15f60d2 100644
--- a/configuration/playlist.html
+++ b/configuration/playlist.html
@@ -12,6 +12,7 @@
+
@@ -487,6 +488,8 @@ Parsing
+
+
diff --git a/configuration/protocol.html b/configuration/protocol.html
index 5d9e6fe..2108c24 100644
--- a/configuration/protocol.html
+++ b/configuration/protocol.html
@@ -12,6 +12,7 @@
+
@@ -453,6 +454,8 @@ Parse
+
+
diff --git a/genindex.html b/genindex.html
index 26eb30b..1b87745 100644
--- a/genindex.html
+++ b/genindex.html
@@ -10,6 +10,7 @@
+
@@ -1232,6 +1233,8 @@ V
+
+
diff --git a/hardware/camera.html b/hardware/camera.html
index 4b65325..cf5e8a5 100644
--- a/hardware/camera.html
+++ b/hardware/camera.html
@@ -12,6 +12,7 @@
+
@@ -326,6 +327,8 @@ Cameras
+
+
diff --git a/hardware/hardware.html b/hardware/hardware.html
index 5892529..e1dec10 100644
--- a/hardware/hardware.html
+++ b/hardware/hardware.html
@@ -12,6 +12,7 @@
+
@@ -328,6 +329,8 @@
+
+
diff --git a/hardware/nidaq.html b/hardware/nidaq.html
index 539af79..8a155d2 100644
--- a/hardware/nidaq.html
+++ b/hardware/nidaq.html
@@ -12,6 +12,7 @@
+
@@ -326,6 +327,8 @@ National Instruments DAQmx cards
+
+
diff --git a/hardware/projector.html b/hardware/projector.html
index 5e2f520..ec28934 100644
--- a/hardware/projector.html
+++ b/hardware/projector.html
@@ -12,6 +12,7 @@
+
@@ -326,6 +327,8 @@ DLP projector
+
+
diff --git a/hardware/rpi.html b/hardware/rpi.html
index dd87cb8..e4c1998 100644
--- a/hardware/rpi.html
+++ b/hardware/rpi.html
@@ -12,6 +12,7 @@
+
@@ -328,6 +329,8 @@ Raspberry PI
+
+
diff --git a/hardware/scanimage.html b/hardware/scanimage.html
index efc316b..3b26e2b 100644
--- a/hardware/scanimage.html
+++ b/hardware/scanimage.html
@@ -12,6 +12,7 @@
+
@@ -367,6 +368,8 @@ Stimulus control
+
+
diff --git a/index.html b/index.html
index 2230e24..9ef8ef7 100644
--- a/index.html
+++ b/index.html
@@ -12,6 +12,7 @@
+
@@ -318,6 +319,8 @@ Etho documentation
+
+
diff --git a/install.html b/install.html
index 6f07230..c7ffffe 100644
--- a/install.html
+++ b/install.html
@@ -12,6 +12,7 @@
+
@@ -429,6 +430,8 @@ Optional packages (hardware, software)
+
+
diff --git a/logging.html b/logging.html
index 698c5a2..fd3101f 100644
--- a/logging.html
+++ b/logging.html
@@ -12,6 +12,7 @@
+
@@ -329,6 +330,8 @@ Logging
+
+
diff --git a/py-modindex.html b/py-modindex.html
index 0c6e933..cea7d87 100644
--- a/py-modindex.html
+++ b/py-modindex.html
@@ -10,6 +10,7 @@
+
@@ -617,6 +618,8 @@ Python Module Index
+
+
diff --git a/search.html b/search.html
index 496c228..0c38790 100644
--- a/search.html
+++ b/search.html
@@ -9,6 +9,7 @@
+
@@ -313,6 +314,8 @@
+
+
diff --git a/searchindex.js b/searchindex.js
index 9452ca6..a8466ab 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({docnames:["README","api/etho.call.client","api/etho.call.client_old","api/etho.call.ephys","api/etho.call.panoptikum","api/etho.call.rpi","api/etho.call.vr","api/etho.cli","api/etho.gui.CamPreview","api/etho.gui.ThuPreview","api/etho.gui.app","api/etho.gui.wxBusyDialog","api/etho.gui.wxCam","api/etho.gui.wxCtrl","api/etho.gui.wxCtrl_ephys","api/etho.gui.wxCtrl_rpi","api/etho.gui.wxCtrl_vr","api/etho.gui.wxDangerDialog","api/etho.services.BLTZeroService","api/etho.services.CamZeroService","api/etho.services.DAQZeroService","api/etho.services.DLPZeroService","api/etho.services.GCMZeroService","api/etho.services.NICounterZeroService","api/etho.services.Opt2ZeroService","api/etho.services.RelayZeroService","api/etho.services.SndZeroService","api/etho.services.TemplateZeroService","api/etho.services.ThuAZeroService","api/etho.services.ThuZeroService","api/etho.services.ZeroService","api/etho.services.camera.base","api/etho.services.camera.basler","api/etho.services.camera.dummy","api/etho.services.camera.flycapture2","api/etho.services.camera.hamamatsu","api/etho.services.camera.spinnaker","api/etho.services.camera.spinnaker_old","api/etho.services.camera.videocapture","api/etho.services.camera.ximea","api/etho.services.dlp.dlp_make_warpfiles","api/etho.services.dlp.dlp_runners","api/etho.services.utils.concurrent_task","api/etho.services.utils.log_exceptions","api/etho.utils.config","api/etho.utils.runner","api/etho.utils.shuffled_cycle","api/etho.utils.sound","api/etho.utils.tui","api/etho.utils.zeroclient","api_etho","callbacks","cli","configuration/calibration_led","configuration/calibration_speaker","configuration/configuration","configuration/global","configuration/playlist","configuration/protocol","hardware/camera","hardware/hardware","hardware/nidaq","hardware/projector","hardware/rpi","hardware/scanimage","index","install","logging","tutorial"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["README.md","api/etho.call.client.rst","api/etho.call.client_old.rst","api/etho.call.ephys.rst","api/etho.call.panoptikum.rst","api/etho.call.rpi.rst","api/etho.call.vr.rst","api/etho.cli.rst","api/etho.gui.CamPreview.rst","api/etho.gui.ThuPreview.rst","api/etho.gui.app.rst","api/etho.gui.wxBusyDialog.rst","api/etho.gui.wxCam.rst","api/etho.gui.wxCtrl.rst","api/etho.gui.wxCtrl_ephys.rst","api/etho.gui.wxCtrl_rpi.rst","api/etho.gui.wxCtrl_vr.rst","api/etho.gui.wxDangerDialog.rst","api/etho.services.BLTZeroService.rst","api/etho.services.CamZeroService.rst","api/etho.services.DAQZeroService.rst","api/etho.services.DLPZeroService.rst","api/etho.services.GCMZeroService.rst","api/etho.services.NICounterZeroService.rst","api/etho.services.Opt2ZeroService.rst","api/etho.services.RelayZeroService.rst","api/etho.services.SndZeroService.rst","api/etho.services.TemplateZeroService.rst","api/etho.services.ThuAZeroService.rst","api/etho.services.ThuZeroService.rst","api/etho.services.ZeroService.rst","api/etho.services.camera.base.rst","api/etho.services.camera.basler.rst","api/etho.services.camera.dummy.rst","api/etho.services.camera.flycapture2.rst","api/etho.services.camera.hamamatsu.rst","api/etho.services.camera.spinnaker.rst","api/etho.services.camera.spinnaker_old.rst","api/etho.services.camera.videocapture.rst","api/etho.services.camera.ximea.rst","api/etho.services.dlp.dlp_make_warpfiles.rst","api/etho.services.dlp.dlp_runners.rst","api/etho.services.utils.concurrent_task.rst","api/etho.services.utils.log_exceptions.rst","api/etho.utils.config.rst","api/etho.utils.runner.rst","api/etho.utils.shuffled_cycle.rst","api/etho.utils.sound.rst","api/etho.utils.tui.rst","api/etho.utils.zeroclient.rst","api_etho.rst","callbacks.md","cli.ipynb","configuration/calibration_led.md","configuration/calibration_speaker.md","configuration/configuration.rst","configuration/global.md","configuration/playlist.md","configuration/protocol.md","hardware/camera.md","hardware/hardware.rst","hardware/nidaq.md","hardware/projector.md","hardware/rpi.md","hardware/scanimage.md","index.rst","install.md","logging.md","tutorial.md"],objects:{"etho.call":[[1,0,0,"-","client"],[2,0,0,"-","client_old"],[3,0,0,"-","ephys"],[4,0,0,"-","panoptikum"],[5,0,0,"-","rpi"],[6,0,0,"-","vr"]],"etho.call.client":[[1,1,1,"","cli_progress"],[1,1,1,"","client"]],"etho.call.client_old":[[2,1,1,"","client"]],"etho.cli":[[7,1,1,"","init"],[7,1,1,"","main"],[7,1,1,"","no_gui"],[7,1,1,"","version"]],"etho.gui":[[8,0,0,"-","CamPreview"],[9,0,0,"-","ThuPreview"],[10,0,0,"-","app"],[11,0,0,"-","wxBusyDialog"],[12,0,0,"-","wxCam"],[13,0,0,"-","wxCtrl"],[14,0,0,"-","wxCtrl_ephys"],[15,0,0,"-","wxCtrl_rpi"],[16,0,0,"-","wxCtrl_vr"],[17,0,0,"-","wxDangerDialog"]],"etho.gui.app":[[10,2,1,"","MainWindow"],[10,2,1,"","PandasModel"],[10,2,1,"","RunDialog"],[10,2,1,"","TableView"],[10,1,1,"","main"]],"etho.gui.app.PandasModel":[[10,3,1,"","columnCount"],[10,3,1,"","data"],[10,3,1,"","flags"],[10,3,1,"","headerData"],[10,3,1,"","rowCount"],[10,3,1,"","setData"]],"etho.gui.app.RunDialog":[[10,3,1,"","accept"],[10,3,1,"","reject"]],"etho.gui.wxBusyDialog":[[11,2,1,"","BusyDialog"],[11,2,1,"","Example"]],"etho.gui.wxCam":[[12,2,1,"","Frame"],[12,2,1,"","Panel"]],"etho.gui.wxCtrl":[[13,2,1,"","Frame"]],"etho.gui.wxCtrl_ephys":[[14,2,1,"","Frame"]],"etho.gui.wxCtrl_rpi":[[15,2,1,"","Frame"]],"etho.gui.wxCtrl_vr":[[16,2,1,"","Frame"]],"etho.gui.wxDangerDialog":[[17,2,1,"","DangerDialog"],[17,2,1,"","Example"]],"etho.services":[[18,0,0,"-","BLTZeroService"],[19,0,0,"-","CamZeroService"],[20,0,0,"-","DAQZeroService"],[21,0,0,"-","DLPZeroService"],[22,0,0,"-","GCMZeroService"],[23,0,0,"-","NICounterZeroService"],[24,0,0,"-","Opt2ZeroService"],[25,0,0,"-","RelayZeroService"],[26,0,0,"-","SndZeroService"],[27,0,0,"-","TemplateZeroService"],[28,0,0,"-","ThuAZeroService"],[29,0,0,"-","ThuZeroService"],[30,0,0,"-","ZeroService"]],"etho.services.BLTZeroService":[[18,2,1,"","BLT"]],"etho.services.BLTZeroService.BLT":[[18,3,1,"","cleanup"],[18,3,1,"","is_busy"],[18,3,1,"","test"]],"etho.services.CamZeroService":[[19,2,1,"","CAM"]],"etho.services.CamZeroService.CAM":[[19,3,1,"","cleanup"],[19,3,1,"","is_busy"],[19,3,1,"","test"]],"etho.services.DAQZeroService":[[20,2,1,"","DAQ"]],"etho.services.DAQZeroService.DAQ":[[20,3,1,"","cleanup"],[20,3,1,"","is_busy"],[20,3,1,"","test"]],"etho.services.DLPZeroService":[[21,2,1,"","DLP"]],"etho.services.DLPZeroService.DLP":[[21,3,1,"","cleanup"],[21,3,1,"","is_busy"],[21,3,1,"","test"]],"etho.services.GCMZeroService":[[22,2,1,"","GCM"]],"etho.services.GCMZeroService.GCM":[[22,3,1,"","cleanup"],[22,3,1,"","is_busy"],[22,3,1,"","test"]],"etho.services.NICounterZeroService":[[23,2,1,"","NIC"]],"etho.services.NICounterZeroService.NIC":[[23,3,1,"","cleanup"],[23,3,1,"","is_busy"],[23,3,1,"","test"]],"etho.services.Opt2ZeroService":[[24,2,1,"","OPT2"]],"etho.services.Opt2ZeroService.OPT2":[[24,3,1,"","cleanup"],[24,3,1,"","is_busy"],[24,3,1,"","test"]],"etho.services.RelayZeroService":[[25,2,1,"","REL"]],"etho.services.RelayZeroService.REL":[[25,3,1,"","cleanup"],[25,3,1,"","is_busy"],[25,3,1,"","test"]],"etho.services.SndZeroService":[[26,2,1,"","SND"]],"etho.services.SndZeroService.SND":[[26,3,1,"","cleanup"],[26,3,1,"","is_busy"],[26,3,1,"","test"]],"etho.services.TemplateZeroService":[[27,2,1,"","TMP"]],"etho.services.TemplateZeroService.TMP":[[27,3,1,"","cleanup"],[27,3,1,"","is_busy"],[27,3,1,"","test"]],"etho.services.ThuAZeroService":[[28,2,1,"","THUA"]],"etho.services.ThuAZeroService.THUA":[[28,3,1,"","cleanup"],[28,3,1,"","is_busy"],[28,3,1,"","test"]],"etho.services.ThuZeroService":[[29,2,1,"","THU"]],"etho.services.ThuZeroService.THU":[[29,3,1,"","cleanup"],[29,3,1,"","is_busy"],[29,3,1,"","test"]],"etho.services.ZeroService":[[30,2,1,"","BaseZeroService"]],"etho.services.ZeroService.BaseZeroService":[[30,3,1,"","cleanup"],[30,3,1,"","information"],[30,3,1,"","init_local_logger"],[30,3,1,"","is_busy"],[30,3,1,"","service_start"],[30,3,1,"","service_stop"],[30,3,1,"","test"]],"etho.services.camera":[[31,0,0,"-","base"],[32,0,0,"-","basler"],[33,0,0,"-","dummy"],[34,0,0,"-","flycapture2"],[35,0,0,"-","hamamatsu"],[36,0,0,"-","spinnaker"],[37,0,0,"-","spinnaker_old"],[38,0,0,"-","videocapture"],[39,0,0,"-","ximea"]],"etho.services.camera.spinnaker_old":[[37,2,1,"","Spinnaker_OLD"]],"etho.services.camera.spinnaker_old.Spinnaker_OLD":[[37,3,1,"","get"],[37,3,1,"","reset"]],"etho.services.dlp":[[40,0,0,"-","dlp_make_warpfiles"],[41,0,0,"-","dlp_runners"]],"etho.services.dlp.dlp_make_warpfiles":[[40,1,1,"","create_warpfile"],[40,1,1,"","get_transformation_matrices"]],"etho.services.dlp.dlp_runners":[[41,2,1,"","DLP_runner"],[41,2,1,"","LED_blinker"],[41,2,1,"","ObjectCirclesGrid"],[41,2,1,"","ObjectMoverSizer"],[41,1,1,"","register_runner"]],"etho.services.dlp.dlp_runners.DLP_runner":[[41,3,1,"","destroy"],[41,3,1,"","status"],[41,3,1,"","update"]],"etho.services.dlp.dlp_runners.LED_blinker":[[41,3,1,"","destroy"],[41,3,1,"","status"],[41,3,1,"","update"]],"etho.services.dlp.dlp_runners.ObjectCirclesGrid":[[41,3,1,"","status"],[41,3,1,"","update"]],"etho.services.dlp.dlp_runners.ObjectMoverSizer":[[41,3,1,"","status"],[41,3,1,"","update"]],"etho.services.utils":[[42,0,0,"-","concurrent_task"],[43,0,0,"-","log_exceptions"]],"etho.services.utils.concurrent_task":[[42,2,1,"","ConcurrentTask"],[42,2,1,"","Faucet"],[42,2,1,"","SharedNumpyArray"]],"etho.services.utils.concurrent_task.Faucet":[[42,3,1,"","get"]],"etho.services.utils.concurrent_task.SharedNumpyArray":[[42,3,1,"","get"],[42,3,1,"","poll"],[42,3,1,"","put"],[42,4,1,"","stale"]],"etho.services.utils.log_exceptions":[[43,1,1,"","for_all_methods"],[43,1,1,"","log_exceptions"]],"etho.utils":[[44,0,0,"-","config"],[45,0,0,"-","runner"],[46,0,0,"-","shuffled_cycle"],[47,0,0,"-","sound"],[48,0,0,"-","tui"],[49,0,0,"-","zeroclient"]],"etho.utils.config":[[44,1,1,"","defaultify"]],"etho.utils.runner":[[45,2,1,"","Runner"]],"etho.utils.runner.Runner":[[45,3,1,"","is_online"],[45,3,1,"","is_running"],[45,3,1,"","kill"],[45,3,1,"","kill_python"],[45,3,1,"","pid"],[45,3,1,"","run"]],"etho.utils.shuffled_cycle":[[46,2,1,"","shuffled_cycle"]],"etho.utils.sound":[[47,1,1,"","build_playlist"],[47,1,1,"","make_pulse"],[47,1,1,"","make_sine"],[47,1,1,"","normalize_table"],[47,1,1,"","parse_cell"],[47,1,1,"","parse_pulse_parameters"],[47,1,1,"","parse_table"],[47,1,1,"","select_channels_from_playlist"]],"etho.utils.tui":[[48,1,1,"","df_to_table"]],etho:[[7,0,0,"-","cli"]]},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"],"4":["py","property","Python property"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method","4":"py:property"},terms:{"0":[30,37,40,41,42,52,56,57,58,64,66],"001":42,"011111111111111112":41,"04":54,"08":54,"0m":52,"0servic":30,"1":[18,19,20,21,22,23,24,25,26,27,28,29,30,40,41,52,54,56,57,58,64,67],"10":[37,58,66],"100":[56,57,58],"1000":[56,57,58],"10000":[54,58],"1080":40,"10800":41,"10cm":54,"10m":58,"11":52,"110423":68,"1280x720":19,"129":67,"13":[19,52],"1300":58,"14":52,"1420":56,"1442":56,"1443":56,"1444":56,"1445":56,"1447":56,"1448":56,"1449":56,"1461":56,"15":52,"150":56,"1500":56,"16":[52,58],"1640x1232":19,"168":[18,19,20,21,22,23,24,25,26,27,28,29,30,56,58,67],"169":56,"17":58,"180":[41,58],"192":[18,19,20,21,22,23,24,25,26,27,28,29,30,56,58],"1920":40,"1v":57,"2":[40,52,56,57,58,68],"20":58,"200":[56,57,58],"2000":[56,57],"2019":54,"20200818":54,"2023":52,"21":52,"22":58,"23":66,"24":58,"25":[52,58],"250":56,"2m":[57,64],"3":[25,41,52,56,58,66],"30":[56,58],"300":56,"30959651":58,"350":56,"360":[41,58],"38":52,"3v":25,"4":[40,56,68],"400":56,"40fp":19,"42":58,"4242":56,"4243":56,"4244":56,"4245":56,"4247":56,"4248":56,"4249":56,"44100":58,"450":56,"4m":52,"5":[56,57],"500":56,"5000":58,"5400":41,"5_000":58,"5m":[57,58],"5v":25,"6":[52,56,57,66],"60":41,"600":56,"640":58,"64bit":52,"7":[56,58,66],"700":56,"78":58,"8":[52,56],"800":56,"9":[52,56],"90":58,"900":56,"90fp":19,"abstract":30,"break":54,"class":[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,37,41,42,43,45,46,47,51],"default":[1,7,10,18,19,20,21,22,23,24,25,26,27,28,29,30,37,41,42,45,48,52,56,58,64,66,68],"do":[19,41,57,66,68],"export":54,"float":[37,41,42,45,47,57],"function":[18,19,20,21,22,23,24,25,26,27,28,29,30,40,42,43,44],"import":[0,7,52,56,57,58],"int":[10,18,19,20,21,22,23,24,25,26,27,28,29,30,40,41,45],"new":54,"return":[18,19,20,21,22,23,24,25,26,27,28,29,30,37,40,41,42,45,47,48,57],"static":0,"true":[1,30,42,45,47,48,58],"try":[28,29,54],"while":68,A:[0,43,48,54,55],Be:54,For:[7,41,42,51,58,66,68],If:[45,57],Is:68,It:54,NOT:[52,68],ON:58,ONES:56,OR:58,One:57,Or:57,THE:[56,68],TO:56,The:[0,40,43,48,54,57,58,64],Then:41,Will:[40,41,57],_build:0,_description_:[1,2,45,52],_dlp:58,_done_ev:1,_queue:1,_stop_ev:1,_summary_:[1,2,45],_type_:1,abbrevi:58,abcd:46,about:[30,68],abov:67,absolut:40,absolute_path_to_fil:41,acbd:46,accbbdbdcaba:46,accept:[10,41],access:[0,42,56],accord:54,acq:[37,64],acquisit:[57,64],across:57,activ:66,adafruit:[28,29,66],adafruit_dht:66,adafruit_python_dht:[28,29],add:[41,48,57,64,68],address:45,adjust:57,advertis:56,after:[54,56,57],ai0:[54,58,68],ai1:68,ai2:68,aliv:30,all:[30,37,41,43,45,54,56,57,58,68],allow:55,alreadi:42,also:[57,68],alwai:42,amp:[54,68],amplitud:[24,58],an:[1,54,56],analog:[20,54,57,68],analog_chans_in:58,analog_chans_out:58,analog_in:68,analog_in_info:68,analog_out:68,analog_out_info:68,analysi:54,ani:[1,10,30,41,42,68],annotate_frame_num:58,anyth:37,ao0:[58,68],ao1:[58,68],api:66,appli:58,apt:66,ar:[0,42,54,55,58,64,67,68],arduino:[28,29],arg:[11,17,18,19,20,21,22,23,24,25,26,27,28,29,30,41,42],argument:52,arm64:52,arm:[52,64],arrai:[37,41,42,47,57,66],assess:42,associ:68,asynchron:45,attach:42,attenu:[54,56,57],attribut:45,audio:[58,68],avail:52,avi:58,back:68,backend:58,backlight:58,ball_info:41,bandwidth:51,base:[30,41,58],basecallback:51,basezeroservic:30,basi:55,basler:66,bdca:46,been:[42,67],befor:[57,64],begin:54,being:[51,57],below:[41,57,58],between:42,bin3:58,binari:58,blink:41,blinker:41,block:[42,46,47,58,68],blt:18,bnc:54,book:0,bool:[1,2,7,10,42,45,47,48],both:58,box:54,bracket:57,bright:58,broadcast:67,build_playlist:47,built:0,bundl:20,busi:[18,19,20,21,22,23,24,25,26,27,28,29,30],busydialog:11,button:64,c:[0,37,54,56,58,66,68],c_doubl:42,calcul:54,calib:54,calibr:68,call:[30,41,42,52,68],callabl:[41,42,47],callback:[57,58,68],cam:[19,37,56,58,68],cam_serialnumb:58,cam_typ:[58,68],camera:[19,51,56,58,66,68],can:[19,24,45,51,56,57,58,67,68],cannot:25,card:68,cast:[47,57],cdab:46,cell:[47,57],center:54,chang:[30,54,68],channel:[47,54,58,64,68],channels_to_keep:47,check:[7,30,56],child:10,chunk:51,circl:41,circuitpython:66,cl:41,clang:52,classnam:[41,58],clean:0,cleanli:45,cleanup:[18,19,20,21,22,23,24,25,26,27,28,29,30],cli:52,cli_progress:1,click:54,client:[2,68],clock:[57,64],clock_pulsedur_pulsepau:57,clock_sourc:58,clockwis:40,close:[30,41],cm2:53,cmd:45,cmdline:45,cmo:66,code:55,coincid:54,col:47,collect:44,column:[48,57],columncount:10,com:[0,28,29,66],come:66,comm:42,comma:57,command:[7,45],common:42,comms_kwarg:42,commun:[30,42],concaten:[47,57],concurrenttask:42,conda:[0,52,66,68],condadir:68,config:[7,56,58,66],config_file_nam:54,configur:[57,58,64],connect:[28,29,42,54,68],consist:42,consol:67,construct:42,contain:[42,57,58],content:56,continu:[37,57],control:[24,55,57,58,68],convert:[37,44,48,57],coolcallback:51,coordin:40,copi:54,core:[47,48,66],corner:40,correct:[54,56,57,64],correctli:54,correspond:54,could:[7,41],count:48,coupl:51,creat:[40,54,57,66,68],create_warpfil:40,crf:58,csv:54,ctype:42,current:[42,57,58],cut:54,cycl:46,d:[44,52],da:[7,68],dangerdialog:17,daq:[20,41,51,56,58,64,68],daqexpress:54,daqmx:[52,66],dark:0,data:[10,40,42,51,54,58,64],datafram:[30,47,48,57],date:54,datenam:64,db:57,dcam:66,de:25,debug:[1,2,7,52,68],decor:[41,43],defaultdict:44,defaultfactori:44,defaultifi:44,defin:[30,41,54,55,57],defopt:66,delai:[57,64],delaypost:57,deleg:42,delimit:57,dep:66,deriv:30,desc:2,descript:[18,19,20,21,22,23,24,25,26,27,28,29,30,37,41,42,47,57],desir:[47,54],destroi:41,detail:[57,64],determin:47,df_to_tabl:48,dht22:[28,29],dht:66,diagram:68,dict:[1,30,41,42,44,51],dictionari:[1,56,57],didnt:45,differ:[53,57,58,68],differenti:54,digit:[20,57,64],digital_chans_out:64,directli:[28,29],directori:[40,56,57,58,68],disabl:68,disown:45,disp:58,disp_fast:58,displai:[7,30,42,67],displayrol:10,distanc:54,dlp:[21,58],dlpzeroservic:41,doc:[0,7,57,64,66],document:54,doe:57,don:42,done:1,done_ev:[1,10],doubl:54,down:30,drive:53,driver:[66,68],dtype:[47,57],duplic:[47,57],dur:64,durat:[1,47,57],dure:[41,68],e:[41,45,47,54,55,57,58,66,68],each:[47,51,55,56,57,58,64,67,68],ed:42,edit:10,editrol:10,eg:40,either:[42,47,58],element:57,empty_valu:42,en:[19,66],enabl:64,end:[42,54,57,64],ensur:[41,42],entri:[47,57,68],env:[58,68],environ:[56,66,68],essenti:68,etc:[18,19,20,21,22,23,24,25,26,27,28,29,30,41,55],etho:[52,58,64,66,68],ethoconfig:[52,54,56,57,68],ethoconfig_rpi7_10cm_aft:54,ethoconfig_rpi7_10cm_befor:54,ethomast:[56,57,58,67],ethoservic:30,eu:66,even:[45,57],event:[1,51],everi:[41,51,54,58],everyth:54,ex:[56,58,68],exampl:[11,17,41,54,68],except:[7,43,52],execut:[56,68],exit:[45,52],expect:[1,41],experi:[1,55,58],expos:42,exposur:58,exposuremod:58,expt:1,extens:57,extern:[41,57,64,68],exterrn:64,extra:41,fabric:[45,66],factor:56,fail:[7,18,19,20,21,22,23,24,25,26,27,28,29,30,52],failur:45,fall:[57,64],fals:[1,2,7,10,30,45,52,58],faster:58,faucet:42,feb:52,feedback:42,fewer:57,ffmpeg:58,ffmpeg_param:58,fictrac:41,field:[41,57,58],fig:54,figur:56,file:[0,7,10,30,40,41,51,54,55,56,57,58,64,66,67],filenam:[41,57],fill:57,finish:[30,54],first:[41,42,54,57,64,68],fixedfp:58,flag:10,flammkuchen:66,flash:66,flea3:37,flir:[37,66,68],float64:42,flow:55,fly:[54,57],flybal:58,flycaptur:[52,66,68],flycapture2:58,focu:64,folder:[7,10,54,55,56,66,68],follow:[30,57,58,68],for_all_method:43,forg:[0,52,66],forget:68,format:[37,58],fov:19,fp:56,frame:[12,13,14,15,16,41,47,48,51,55,57,58,64],frame_height:58,frame_numb:41,frame_offi:58,frame_offx:58,frame_r:58,frame_width:58,frameheight:58,framer:58,framewidth:58,free:[18,19,20,21,22,23,24,25,26,27,28,29,30,37,41],freq:57,frequenc:[47,56,57],fresh:42,friendli:51,from:[1,8,10,37,40,41,47,52,54,56,57,58,64,66,68],fs:[47,57],full:[19,46,51,57,68],fulli:0,fun:1,func:41,furo:0,futur:66,g:[41,45,47,54,55,57,58,66,68],gain:58,gamma:58,gcm:[22,58,68],gener:[41,56,57,58,68],geometr:41,get:[37,40,42,45,66],get_transformation_matric:40,gevent:66,gh:0,ghp:0,git:66,github:[0,28,29,66],give:[48,54],given:57,global:[30,55,57],go:54,goal:54,goe:37,good:54,gpio:[24,25,58],gpiozero:[24,25,66],gpu:58,graph:54,graphic:10,grasshopp:37,great:42,green:58,grid:41,grid_direct:41,grid_direction_change_fram:41,grid_spe:41,gui:[7,52,66],h5:58,h5py:[52,66],h:52,ha:[42,47,55,58,67],hacki:25,hamamatsu:66,hardwar:[7,30,55,63],have:[41,42,57,66,68],hdf:58,head:[10,30,52,56,67],head_ip:[18,19,20,21,22,23,24,25,26,27,28,29,30],header:57,headerdata:10,headlogg:67,height:[19,40],help:52,helper:42,here:[41,56,68],hhmmss:68,hierarchi:54,home:56,homographi:40,host:[1,2,12,13,14,15,16,17,45,52,56,58],host_is_remot:45,host_is_win:45,host_yyyymmdd:68,how:[7,41],html:[0,7,19,66],http:[0,19,24,28,29,66],humid:[28,29,51,58,66],hz:[47,57,58],i:54,ideal:68,identifi:30,idl:[18,19,20,21,22,23,24,25,26,27,28,29,30],ignor:41,illumin:58,imag:[0,37,40,52,64],image_height:40,image_timestamp:37,image_width:40,implement:30,implicitli:57,importantli:68,includ:[54,68],independ:[24,42],index:48,index_nam:48,indic:[30,42],individu:[24,51,58,68],inf:64,info:[7,67],inform:[30,67,68],ini:57,init:[7,37,41,52,66],init_local_logg:[30,67],initi:[7,25,41,67],inlin:0,input:[20,54,68],insid:54,instal:[0,7,63],instanc:[18,19,20,21,22,23,24,25,26,27,28,29,30,41,48,57],instruct:[7,68],instrument:[54,68],intens:[47,57,68],intercept:67,interfac:[7,10,42,58],interv:58,intial:[1,57],invok:45,io:[19,24,66],ip:[15,16,45,56,67],ip_address:30,ipynb:54,ipython:66,ir:58,is_busi:[18,19,20,21,22,23,24,25,26,27,28,29,30],is_onlin:45,is_run:45,item:57,itemdatarol:10,itemflag:10,iter:46,its:54,janclemenslab:[0,7,66],just:57,kei:57,kill:45,kill_python:45,kw:[11,17],kwarg:[18,19,20,21,22,23,24,25,26,27,28,29,30,41,42],kwignor:41,lab:54,lambda:44,larg:64,last:[42,57,64],latest:[0,66],least:45,leav:64,led:[24,41,58,68],led_blink:[41,58],led_blinker_fil:41,led_dur:[41,58],led_fram:[41,58],led_po:41,led_siz:41,ledamp:58,ledd1b:68,left:40,length:47,letter:[30,58],level:67,libgpiod2:66,librari:[25,52,68],lighcraft:66,light:[0,57],like:[42,51,57],limit:[19,58],line1:64,line2:64,line3:64,line:7,list:[41,42,45,47,54,56,57,58,68],liter:42,live:8,load:57,load_sound:57,local:[30,45,67],localhost:[1,56,68],localhost_20230401:68,locallu:45,log:[30,41,43,51,56,58,68],logfilenam:[30,67],logger:[43,56,67],logging_port:[18,19,20,21,22,23,24,25,26,27,28,29,30,67],loggingfold:56,logic:42,longest:57,loop:[41,51,64],loopback:68,loos:42,loss:42,low:51,lower:68,m:68,machin:45,maco:52,main:[7,10,52],mainwindow:10,make:[0,47,57,68],make_puls:47,make_sin:47,mamba:[0,66],mambaforg:68,manag:45,manipul:41,manual:54,map:57,match:[45,57],matplotlib:58,matric:40,maxdur:58,measur:[53,54],mediocre_stim:57,mesh:40,mess:55,messag:[30,41,52,67],method:[30,43,47],mgen:56,mic:54,mic_calibr:54,mic_calibration_20190408:54,micromanipul:54,microphon:54,mimic:42,mind:42,miniconda3:56,miniconda:58,miniforg:66,minim:68,mirror:57,mirror_l:57,miss:54,mm2:57,mm:57,mode:[0,19,57],model:10,model_dict:41,modul:67,more:68,move:41,mq013cg:58,ms:[47,57,68],msgpack:66,much:58,multidimension:57,multipl:24,multiprocess:42,must:42,mw:[53,57],myst:0,n:66,name:[1,40,41,45,48,51,54,55,56,58,68],nation:[54,68],nb:[0,64],nb_sampl:47,nb_screen:40,nb_screensx3x3:40,ncb:[54,56,58],ncircl:41,ndarrai:[37,40],need:[0,30,41,54,56,57,58],nest:44,network:30,never:[42,58],new_consol:45,next:[57,64],ni:[52,66,68],nic:[23,68],nm:57,no_gui:7,node:[58,67],none:[1,2,10,12,18,19,20,21,22,23,24,25,26,27,28,29,30,37,42,43,45,46,47,48,57],nonzero:45,normal:[40,47,54,57],normalize_t:[47,57],note:[41,57,66],notebook:54,np:[37,41,42,47],npz:41,ns:58,number:[41,52,57,58,64],numpi:[40,42,47,52,57,66],nvidia:58,o:[55,57],obj:48,object:[41,42,43,58],objectcirclesgrid:41,objectmovers:41,occur:43,off:25,offset:54,old:66,older:[37,66,68],onboardclock:58,one:[43,45,47,57],onli:[37,47,58,66],onlin:45,onset:54,open:[10,54,68],opencv:[58,66],oper:63,opt2:[24,58],optim:37,option:[1,2,10,12,18,19,20,21,22,23,24,25,26,27,28,29,30,37,41,42,43,45,47,48,52,58,67,68],opto:[58,68],orca:66,order:58,org:[0,7,66],orient:10,os:10,out:[51,54,56,58],output:[20,54,57,64,68],outsid:1,over:[42,51,56],overrid:45,own:41,p:52,packag:52,pad:57,page:0,pair:56,panda:[47,48,52,57,66],pandas_datafram:48,pandasmodel:10,panel:[0,12],param:[41,43,48,58],paramet:[1,2,7,10,18,19,20,21,22,23,24,25,26,27,28,29,30,37,40,41,42,45,46,47,56,58,68],parent:[10,12,68],pars:[47,56],parse_cel:47,parse_pulse_paramet:47,parse_t:[47,57],parsed_t:57,part:54,partial:[37,45],pass:[41,42,43,48,51],path:[40,58,68],pathlik:10,pattern:24,paus:57,pb_ui:64,pc:[54,66],pd:[30,47,57],pdur:57,pend:57,per:[55,57,58],period:47,phase:[47,57],photodiod:41,photomet:53,pi:[8,24,47,58,66],picamera:[19,58,66],pickl:58,pid:45,pillow:66,pin:[24,25,58],ping:[30,45],pip3:66,pip:[0,66],pipe:42,pixel:[37,40,58,64],place:54,plai:[55,68],playback:[54,57,58,68],playback_calibr:54,playlist:[10,47,52,54,55,56,64],playlist_channel:58,playlist_fold:[10,52],playlistfil:[1,2,52],playlistfilenam:57,playlistfold:[10,52,56],plot:58,plot_fast:58,point:[54,56],pointer:37,pointgrei:[66,68],poll:42,pong:30,popul:48,port0:64,port:[30,56,68],portrang:56,posit:[41,52],possibl:[19,28,29],post:57,postpop:66,power:54,ppau:57,practic:54,pre:[57,66],prefix:52,prepend:58,preview:[1,12,52],primit:42,print:[30,54,58],probabl:[42,58],problem:19,problemat:57,process:[42,45,51],produc:51,product:66,program:52,progress:[30,52],proj_roi:40,project:[40,66],projection_height:40,projection_width:40,projector:58,projector_dir:40,promis:45,proper:0,properti:[30,42],prot:[41,58],protfil:68,protocol:[10,41,51,52,54,55,56,64],protocol_filenam:12,protocol_fold:[10,52],protocolfil:[1,2,52,58],protocolfold:[10,52,56],provid:42,psutil:66,psychopi:[41,58],ptg:56,publish:30,pul:57,pul_5_10_10_0:57,pul_pulsedur_pulsepau_pulsenumber_pulsedelai:57,pull:37,puls:[47,57],pulsedelai:47,pulsedur:47,pulsenumb:47,pulsepau:47,push:0,put:42,py:54,pydaqmx:[66,68],pygam:58,pylab:66,pylablib:66,pylon:66,pypylon:66,pyqtgraph:[52,58,66],pyseri:66,pyside2:52,pyside6:66,python:[45,52,56,58,67,68],python_ex:[45,56,58,68],pyyaml:[56,66],pyzmq:66,qmodelindex:10,qt:[10,52],qtpy:[52,66],queri:45,queue:[1,42],queue_tot:10,quickli:68,rad:57,rais:[37,42,45],random:58,raspberi:66,raspberri:24,raspbian:66,rate:[47,51,54,55],raw:57,raw_tabl:57,re:54,read:[41,42,51,56,58],read_tabl:57,readconfig:58,readthedoc:[19,24,66],realtim:42,receiv:8,recogn:45,recommend:66,record:[19,54,58,64,68],recording_nam:54,rect:[41,58],red:58,register_runn:41,reject:10,rel:[25,58],relai:[25,58],releas:19,remain:[57,66],remot:[45,56,57,64],render:0,replac:68,requir:[0,25,57,66,68],reset:37,resiz:41,resourc:[18,19,20,21,22,23,24,25,26,27,28,29,30,37,41],respons:30,result:45,rich:[48,66],rich_inform:30,rig:[54,57],rise:[57,64],robust:41,roi:40,role:[10,55],roughli:54,row:[47,48,57],rowcount:10,rpi3:56,rpi4:56,rpi5:56,rpi6:56,rpi7:[54,56],rpi7_10cm_aft:54,rpi7_10cm_befor:54,rpi8:56,rpi9:56,rpi:[25,28,29,54,66],run:[0,30,42,45,58],run_loc:45,rundialog:10,runner:[41,58],s0:54,s:[51,52,54,57,58,67],safe:42,same:[41,57],sampl:[41,47,54,55,57,64],samplingr:[47,58],save:[40,42,52,54,57,58,64,66,68],save_avi:[58,68],save_avi_fast:58,save_avi_vidread:58,save_directori:[58,68],save_h5:[58,68],save_prefix:[1,2,52],save_timestamp:[58,68],savedlp_h5:58,savefilenam:64,scale:57,scan:64,scanimag:57,scanimage_next:57,scipi:[52,66],scm:56,screen:41,sdk:[37,52,66,68],second:[37,47,51,58,68],section:56,see:[41,45,57,58,64],select:[41,47,54,64,68],select_channels_from_playlist:47,self:[10,30,67],send:42,sensor:[19,28,29,51,58,66],sent:64,separ:[57,64],serial:[18,19,20,21,22,23,24,25,26,27,28,29,30,58],serialnumb:37,server:[30,54],server_start:30,server_stop:30,servic:[1,56,58,67],service_nam:30,service_port:[18,19,20,21,22,23,24,25,26,27,28,29,30],service_start:30,service_stop:30,serviceeas:30,services_logging_port:56,services_working_port:56,session:64,set:[1,19,37,41,55,57,58],setdata:10,setup:[30,68],shape:[40,42],share:42,sharednumpyarrai:42,shorter:57,shortli:19,should:[30,37,40,41,43,54,57,58,64,66],show:[48,52],show_index:48,show_progress:1,show_test_imag:2,shuffl:[46,47,57,58,64],shut:30,shutter:68,shutter_spe:58,shutterspe:58,si_next:[57,64],si_start:[57,64],si_stop:[57,64],signal:[1,57,64],silencepost:[57,64],silencepr:[57,64],silent:54,simpli:57,simplic:51,sin:57,sin_100_0_3000:57,sin_200_0_2000:57,sin_frequency_phase_dur:57,sinc:[25,42,57],singl:57,sinusoid:[47,57],size:[41,55,56],sle:56,sleep:37,slower:42,slp:56,small:68,snd:[26,56,58],so:[25,57],some:66,someth:68,sound:[55,57,58,68],sound_ord:47,soundboard:66,soundlist:47,sourc:[1,2,7,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,37,40,41,42,43,44,45,46,47,48],specif:[55,57,58,66],specifi:[41,54,64,67,68],speed:42,sphinx:0,sphinxcontrib:0,spinnak:[37,52,58,66,68],squar:[41,47,57],ssh:[45,56],stabl:66,stale:42,stamp:37,start:[1,30,54,56,57,64,66,68],state:[18,19,20,21,22,23,24,25,26,27,28,29,30],statu:[41,56],step:68,sth:37,stim2:57,stim:[41,56],stim_on_chan1:57,stim_on_chan2:57,stimfilenam:[47,57],stimfold:[56,57],stimuli:[57,58,64],stimulu:[47,54,55,58],stop:[1,30,42,54,57,64],stop_ev:[1,10],store:[40,68],str:[1,2,10,12,18,19,20,21,22,23,24,25,26,27,28,29,30,40,41,42,45,46,47,48,57],stream:8,streamwatch:45,string:[41,47],strip:57,stuff:66,subfold:68,sudo:66,summari:[18,19,20,21,22,23,24,25,26,27,28,29,30,37,42,47],superstimulu:57,suppli:54,support:[37,52,58,66],sure:[47,54,57],surround:57,sync:[41,58],synchron:[20,42],system:[7,37,55],system_timestamp:37,t:[42,57],tab:[0,54,57],tabl:[47,48,57],tableview:10,task:[1,20,42,54],task_kwarg:42,taskstopsign:42,tcp:30,tell:42,temperatur:[28,29,51,58,66],tempor:24,termin:[30,64],test:[18,19,20,21,22,23,24,25,26,27,28,29,30,52,54,68],test_calibr:54,text:57,than:[19,57],thei:55,thi:[0,41,52,57,58,64,68],thorlab:[53,68],those:19,thread:[1,42],three:[30,57],through:68,throughput:37,throught:64,thu:[29,58],thua:[28,56,58],time:[37,54,57],timeout:[37,42,45],timestamp:58,tmp:27,todo:66,toggl:25,tool:42,top:40,total:57,trace:58,trail:68,train:[47,57],transform:40,transformation_matric:40,translat:47,tree:0,trial:47,trigger:[57,64,68],tui:30,tupl:[30,37,42],turn:25,two:[47,68],txt:54,type:[37,40,41,42,44,45,47,48,54,55,57],typic:[57,68],ug:56,ukme04:54,unaccept:42,under:[40,54],unexpectedexit:45,union:[10,45,47],uniqu:30,unit:[54,57],unknown:42,uns:42,unspecifi:41,unus:[56,57,58],up:[19,41],updat:[41,42],us:[1,8,24,25,41,53,54,56,57,58,66,67,68],usag:52,use_servic:[58,68],use_warp:58,user:[10,54,55,56,58],usual:[19,54],utc:37,util:[30,57,58],v0:52,v1:52,v2:52,v3:52,v5:52,valid:58,valu:[10,41,42,48,52,54,56,57,64],valueerror:[37,42],variant:41,veri:[25,64],version:[0,7,66],via:[0,24,28,29,42,45,56,57,58,64,67,68],video:[8,58,66,68],video_denois:58,videoprocessingframework:58,videowrit:58,vidgear:66,vidread:[58,66],visual:[41,58],voltag:53,vpf:58,vpf_bin_path:58,w:[55,57],wa:45,wai:55,walk:68,want:[19,42,66],warn:[45,52,67],warp:40,warpfil:[40,58],warpmesh_1140x912:58,warpmesh_:40,watchererror:45,wav:57,waveform:47,we:[25,66,68],were:54,what:57,when:[30,41,42,54,56],where:[40,58,68],whether:[18,19,20,21,22,23,24,25,26,27,28,29,30,42],which:[40,45,47,56,57,68],whitespac:57,whole:54,width:[19,40],wiki:66,win:41,window:41,wire:68,work:[41,56,58,66,68],working_directori:58,would:54,wrap:[42,43,47],wrapper:42,write:42,wrong:37,www:66,wxctrl:68,x:[37,40],ximea:[58,66,68],y:[37,40,66],yaml:[56,58],yml:[10,52,54,68],you:[19,42,66,68],your:[41,68],z:58,zero:57,zeromq:8,zerorpc:66},titles:["Ethodrome documentation","etho.call.client","etho.call.client_old","etho.call.ephys","etho.call.panoptikum","etho.call.rpi","etho.call.vr","etho.cli","etho.gui.CamPreview","etho.gui.ThuPreview","etho.gui.app","etho.gui.wxBusyDialog","etho.gui.wxCam","etho.gui.wxCtrl","etho.gui.wxCtrl_ephys","etho.gui.wxCtrl_rpi","etho.gui.wxCtrl_vr","etho.gui.wxDangerDialog","etho.services.BLTZeroService","etho.services.CamZeroService","etho.services.DAQZeroService","etho.services.DLPZeroService","etho.services.GCMZeroService","etho.services.NICounterZeroService","etho.services.Opt2ZeroService","etho.services.RelayZeroService","etho.services.SndZeroService","etho.services.TemplateZeroService","etho.services.ThuAZeroService","etho.services.ThuZeroService","etho.services.ZeroService","etho.services.camera.base","etho.services.camera.basler","etho.services.camera.dummy","etho.services.camera.flycapture2","etho.services.camera.hamamatsu","etho.services.camera.spinnaker","etho.services.camera.spinnaker_old","etho.services.camera.videocapture","etho.services.camera.ximea","etho.services.dlp.dlp_make_warpfiles","etho.services.dlp.dlp_runners","etho.services.utils.concurrent_task","etho.services.utils.log_exceptions","etho.utils.config","etho.utils.runner","etho.utils.shuffled_cycle","etho.utils.sound","etho.utils.tui","etho.utils.zeroclient","Developer API","Callbacks","Command-line interface","LED calibration","Speaker calibration","Configuration","Global configuration","Stimulus playlists","Experimental protocols","Cameras","Supported Hardware","National Instruments DAQmx cards","DLP projector","Raspberry PI","ScanImage","Etho documentation","Installation","Logging","Tutorial"],titleterms:{For:56,There:57,an:[52,68],analyz:54,anatomi:51,api:50,app:10,ar:57,base:31,basler:32,bltzeroservic:18,build:0,calibr:[53,54],call:[1,2,3,4,5,6],callback:51,camera:[31,32,33,34,35,36,37,38,39,59],campreview:8,camzeroservic:19,card:61,channel:57,cli:[7,68],client:1,client_old:2,command:52,concurrent_task:42,config:[44,52],configur:[55,56,66,68],control:64,daqmx:61,daqzeroservic:20,data:57,develop:50,displai:52,dlp:[40,41,62],dlp_make_warpfil:40,dlp_runner:41,dlpzeroservic:21,document:[0,65],dummi:33,ephi:3,etho:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,65],ethodrom:0,experi:[52,68],experiment:58,file:[52,68],flycapture2:34,folder:52,format:57,gcmzeroservic:22,global:56,graphic:52,gui:[8,9,10,11,12,13,14,15,16,17,68],hamamatsu:35,hardwar:[52,54,60,66,68],host:68,info:52,initi:[52,66],instal:[66,68],instrument:61,interfac:52,led:53,line:52,log:67,log_except:43,magic:57,make:[51,58],multi:57,name:57,nation:61,nicounterzeroservic:23,open:52,opt2zeroservic:24,option:66,own:51,packag:66,panoptikum:4,pars:[57,58],pi:63,playlist:[57,68],produc:68,projector:62,protocol:[58,68],publish:0,python:66,raspberri:63,relayzeroservic:25,result:54,rpi:[5,56],run:[54,68],runner:45,scanimag:64,servic:[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,51,68],set:[54,64],setup:54,sever:57,shuffled_cycl:46,sndzeroservic:26,softwar:[54,66],sound:47,speaker:54,specifi:57,spinnak:36,spinnaker_old:37,start:52,stimul:57,stimulu:[57,64],support:60,system:[52,68],templatezeroservic:27,test:66,thuazeroservic:28,thupreview:9,thuzeroservic:29,tui:48,tutori:68,up:54,usag:51,user:52,util:[42,43,44,45,46,47,48,49],version:52,videocaptur:38,vr:6,wai:57,wxbusydialog:11,wxcam:12,wxctrl:13,wxctrl_ephi:14,wxctrl_rpi:15,wxctrl_vr:16,wxdangerdialog:17,ximea:39,your:51,zerocli:49,zeroservic:30}})
\ No newline at end of file
+Search.setIndex({docnames:["README","api/etho.call.client","api/etho.call.client_old","api/etho.call.ephys","api/etho.call.panoptikum","api/etho.call.rpi","api/etho.call.vr","api/etho.cli","api/etho.gui.CamPreview","api/etho.gui.ThuPreview","api/etho.gui.app","api/etho.gui.wxBusyDialog","api/etho.gui.wxCam","api/etho.gui.wxCtrl","api/etho.gui.wxCtrl_ephys","api/etho.gui.wxCtrl_rpi","api/etho.gui.wxCtrl_vr","api/etho.gui.wxDangerDialog","api/etho.services.BLTZeroService","api/etho.services.CamZeroService","api/etho.services.DAQZeroService","api/etho.services.DLPZeroService","api/etho.services.GCMZeroService","api/etho.services.NICounterZeroService","api/etho.services.Opt2ZeroService","api/etho.services.RelayZeroService","api/etho.services.SndZeroService","api/etho.services.TemplateZeroService","api/etho.services.ThuAZeroService","api/etho.services.ThuZeroService","api/etho.services.ZeroService","api/etho.services.camera.base","api/etho.services.camera.basler","api/etho.services.camera.dummy","api/etho.services.camera.flycapture2","api/etho.services.camera.hamamatsu","api/etho.services.camera.spinnaker","api/etho.services.camera.spinnaker_old","api/etho.services.camera.videocapture","api/etho.services.camera.ximea","api/etho.services.dlp.dlp_make_warpfiles","api/etho.services.dlp.dlp_runners","api/etho.services.utils.concurrent_task","api/etho.services.utils.log_exceptions","api/etho.utils.config","api/etho.utils.runner","api/etho.utils.shuffled_cycle","api/etho.utils.sound","api/etho.utils.tui","api/etho.utils.zeroclient","api_etho","callbacks","cli","configuration/calibration_led","configuration/calibration_speaker","configuration/configuration","configuration/global","configuration/playlist","configuration/protocol","hardware/camera","hardware/hardware","hardware/nidaq","hardware/projector","hardware/rpi","hardware/scanimage","index","install","logging","tutorial"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["README.md","api/etho.call.client.rst","api/etho.call.client_old.rst","api/etho.call.ephys.rst","api/etho.call.panoptikum.rst","api/etho.call.rpi.rst","api/etho.call.vr.rst","api/etho.cli.rst","api/etho.gui.CamPreview.rst","api/etho.gui.ThuPreview.rst","api/etho.gui.app.rst","api/etho.gui.wxBusyDialog.rst","api/etho.gui.wxCam.rst","api/etho.gui.wxCtrl.rst","api/etho.gui.wxCtrl_ephys.rst","api/etho.gui.wxCtrl_rpi.rst","api/etho.gui.wxCtrl_vr.rst","api/etho.gui.wxDangerDialog.rst","api/etho.services.BLTZeroService.rst","api/etho.services.CamZeroService.rst","api/etho.services.DAQZeroService.rst","api/etho.services.DLPZeroService.rst","api/etho.services.GCMZeroService.rst","api/etho.services.NICounterZeroService.rst","api/etho.services.Opt2ZeroService.rst","api/etho.services.RelayZeroService.rst","api/etho.services.SndZeroService.rst","api/etho.services.TemplateZeroService.rst","api/etho.services.ThuAZeroService.rst","api/etho.services.ThuZeroService.rst","api/etho.services.ZeroService.rst","api/etho.services.camera.base.rst","api/etho.services.camera.basler.rst","api/etho.services.camera.dummy.rst","api/etho.services.camera.flycapture2.rst","api/etho.services.camera.hamamatsu.rst","api/etho.services.camera.spinnaker.rst","api/etho.services.camera.spinnaker_old.rst","api/etho.services.camera.videocapture.rst","api/etho.services.camera.ximea.rst","api/etho.services.dlp.dlp_make_warpfiles.rst","api/etho.services.dlp.dlp_runners.rst","api/etho.services.utils.concurrent_task.rst","api/etho.services.utils.log_exceptions.rst","api/etho.utils.config.rst","api/etho.utils.runner.rst","api/etho.utils.shuffled_cycle.rst","api/etho.utils.sound.rst","api/etho.utils.tui.rst","api/etho.utils.zeroclient.rst","api_etho.rst","callbacks.md","cli.ipynb","configuration/calibration_led.md","configuration/calibration_speaker.md","configuration/configuration.rst","configuration/global.md","configuration/playlist.md","configuration/protocol.md","hardware/camera.md","hardware/hardware.rst","hardware/nidaq.md","hardware/projector.md","hardware/rpi.md","hardware/scanimage.md","index.rst","install.md","logging.md","tutorial.md"],objects:{"etho.call":[[1,0,0,"-","client"],[2,0,0,"-","client_old"],[3,0,0,"-","ephys"],[4,0,0,"-","panoptikum"],[5,0,0,"-","rpi"],[6,0,0,"-","vr"]],"etho.call.client":[[1,1,1,"","cli_progress"],[1,1,1,"","client"]],"etho.call.client_old":[[2,1,1,"","client"]],"etho.cli":[[7,1,1,"","init"],[7,1,1,"","main"],[7,1,1,"","no_gui"],[7,1,1,"","version"]],"etho.gui":[[8,0,0,"-","CamPreview"],[9,0,0,"-","ThuPreview"],[10,0,0,"-","app"],[11,0,0,"-","wxBusyDialog"],[12,0,0,"-","wxCam"],[13,0,0,"-","wxCtrl"],[14,0,0,"-","wxCtrl_ephys"],[15,0,0,"-","wxCtrl_rpi"],[16,0,0,"-","wxCtrl_vr"],[17,0,0,"-","wxDangerDialog"]],"etho.gui.app":[[10,2,1,"","MainWindow"],[10,2,1,"","PandasModel"],[10,2,1,"","RunDialog"],[10,2,1,"","TableView"],[10,1,1,"","main"]],"etho.gui.app.PandasModel":[[10,3,1,"","columnCount"],[10,3,1,"","data"],[10,3,1,"","flags"],[10,3,1,"","headerData"],[10,3,1,"","rowCount"],[10,3,1,"","setData"]],"etho.gui.app.RunDialog":[[10,3,1,"","accept"],[10,3,1,"","reject"]],"etho.gui.wxBusyDialog":[[11,2,1,"","BusyDialog"],[11,2,1,"","Example"]],"etho.gui.wxCam":[[12,2,1,"","Frame"],[12,2,1,"","Panel"]],"etho.gui.wxCtrl":[[13,2,1,"","Frame"]],"etho.gui.wxCtrl_ephys":[[14,2,1,"","Frame"]],"etho.gui.wxCtrl_rpi":[[15,2,1,"","Frame"]],"etho.gui.wxCtrl_vr":[[16,2,1,"","Frame"]],"etho.gui.wxDangerDialog":[[17,2,1,"","DangerDialog"],[17,2,1,"","Example"]],"etho.services":[[18,0,0,"-","BLTZeroService"],[19,0,0,"-","CamZeroService"],[20,0,0,"-","DAQZeroService"],[21,0,0,"-","DLPZeroService"],[22,0,0,"-","GCMZeroService"],[23,0,0,"-","NICounterZeroService"],[24,0,0,"-","Opt2ZeroService"],[25,0,0,"-","RelayZeroService"],[26,0,0,"-","SndZeroService"],[27,0,0,"-","TemplateZeroService"],[28,0,0,"-","ThuAZeroService"],[29,0,0,"-","ThuZeroService"],[30,0,0,"-","ZeroService"]],"etho.services.BLTZeroService":[[18,2,1,"","BLT"]],"etho.services.BLTZeroService.BLT":[[18,3,1,"","cleanup"],[18,3,1,"","is_busy"],[18,3,1,"","test"]],"etho.services.CamZeroService":[[19,2,1,"","CAM"]],"etho.services.CamZeroService.CAM":[[19,3,1,"","cleanup"],[19,3,1,"","is_busy"],[19,3,1,"","test"]],"etho.services.DAQZeroService":[[20,2,1,"","DAQ"]],"etho.services.DAQZeroService.DAQ":[[20,3,1,"","cleanup"],[20,3,1,"","is_busy"],[20,3,1,"","test"]],"etho.services.DLPZeroService":[[21,2,1,"","DLP"]],"etho.services.DLPZeroService.DLP":[[21,3,1,"","cleanup"],[21,3,1,"","is_busy"],[21,3,1,"","test"]],"etho.services.GCMZeroService":[[22,2,1,"","GCM"]],"etho.services.GCMZeroService.GCM":[[22,3,1,"","cleanup"],[22,3,1,"","is_busy"],[22,3,1,"","test"]],"etho.services.NICounterZeroService":[[23,2,1,"","NIC"]],"etho.services.NICounterZeroService.NIC":[[23,3,1,"","cleanup"],[23,3,1,"","is_busy"],[23,3,1,"","test"]],"etho.services.Opt2ZeroService":[[24,2,1,"","OPT2"]],"etho.services.Opt2ZeroService.OPT2":[[24,3,1,"","cleanup"],[24,3,1,"","is_busy"],[24,3,1,"","test"]],"etho.services.RelayZeroService":[[25,2,1,"","REL"]],"etho.services.RelayZeroService.REL":[[25,3,1,"","cleanup"],[25,3,1,"","is_busy"],[25,3,1,"","test"]],"etho.services.SndZeroService":[[26,2,1,"","SND"]],"etho.services.SndZeroService.SND":[[26,3,1,"","cleanup"],[26,3,1,"","is_busy"],[26,3,1,"","test"]],"etho.services.TemplateZeroService":[[27,2,1,"","TMP"]],"etho.services.TemplateZeroService.TMP":[[27,3,1,"","cleanup"],[27,3,1,"","is_busy"],[27,3,1,"","test"]],"etho.services.ThuAZeroService":[[28,2,1,"","THUA"]],"etho.services.ThuAZeroService.THUA":[[28,3,1,"","cleanup"],[28,3,1,"","is_busy"],[28,3,1,"","test"]],"etho.services.ThuZeroService":[[29,2,1,"","THU"]],"etho.services.ThuZeroService.THU":[[29,3,1,"","cleanup"],[29,3,1,"","is_busy"],[29,3,1,"","test"]],"etho.services.ZeroService":[[30,2,1,"","BaseZeroService"]],"etho.services.ZeroService.BaseZeroService":[[30,3,1,"","cleanup"],[30,3,1,"","information"],[30,3,1,"","init_local_logger"],[30,3,1,"","is_busy"],[30,3,1,"","service_start"],[30,3,1,"","service_stop"],[30,3,1,"","test"]],"etho.services.camera":[[31,0,0,"-","base"],[32,0,0,"-","basler"],[33,0,0,"-","dummy"],[34,0,0,"-","flycapture2"],[35,0,0,"-","hamamatsu"],[36,0,0,"-","spinnaker"],[37,0,0,"-","spinnaker_old"],[38,0,0,"-","videocapture"],[39,0,0,"-","ximea"]],"etho.services.camera.spinnaker_old":[[37,2,1,"","Spinnaker_OLD"]],"etho.services.camera.spinnaker_old.Spinnaker_OLD":[[37,3,1,"","get"],[37,3,1,"","reset"]],"etho.services.dlp":[[40,0,0,"-","dlp_make_warpfiles"],[41,0,0,"-","dlp_runners"]],"etho.services.dlp.dlp_make_warpfiles":[[40,1,1,"","create_warpfile"],[40,1,1,"","get_transformation_matrices"]],"etho.services.dlp.dlp_runners":[[41,2,1,"","DLP_runner"],[41,2,1,"","LED_blinker"],[41,2,1,"","ObjectCirclesGrid"],[41,2,1,"","ObjectMoverSizer"],[41,1,1,"","register_runner"]],"etho.services.dlp.dlp_runners.DLP_runner":[[41,3,1,"","destroy"],[41,3,1,"","status"],[41,3,1,"","update"]],"etho.services.dlp.dlp_runners.LED_blinker":[[41,3,1,"","destroy"],[41,3,1,"","status"],[41,3,1,"","update"]],"etho.services.dlp.dlp_runners.ObjectCirclesGrid":[[41,3,1,"","status"],[41,3,1,"","update"]],"etho.services.dlp.dlp_runners.ObjectMoverSizer":[[41,3,1,"","status"],[41,3,1,"","update"]],"etho.services.utils":[[42,0,0,"-","concurrent_task"],[43,0,0,"-","log_exceptions"]],"etho.services.utils.concurrent_task":[[42,2,1,"","ConcurrentTask"],[42,2,1,"","Faucet"],[42,2,1,"","SharedNumpyArray"]],"etho.services.utils.concurrent_task.Faucet":[[42,3,1,"","get"]],"etho.services.utils.concurrent_task.SharedNumpyArray":[[42,3,1,"","get"],[42,3,1,"","poll"],[42,3,1,"","put"],[42,4,1,"","stale"]],"etho.services.utils.log_exceptions":[[43,1,1,"","for_all_methods"],[43,1,1,"","log_exceptions"]],"etho.utils":[[44,0,0,"-","config"],[45,0,0,"-","runner"],[46,0,0,"-","shuffled_cycle"],[47,0,0,"-","sound"],[48,0,0,"-","tui"],[49,0,0,"-","zeroclient"]],"etho.utils.config":[[44,1,1,"","defaultify"]],"etho.utils.runner":[[45,2,1,"","Runner"]],"etho.utils.runner.Runner":[[45,3,1,"","is_online"],[45,3,1,"","is_running"],[45,3,1,"","kill"],[45,3,1,"","kill_python"],[45,3,1,"","pid"],[45,3,1,"","run"]],"etho.utils.shuffled_cycle":[[46,2,1,"","shuffled_cycle"]],"etho.utils.sound":[[47,1,1,"","build_playlist"],[47,1,1,"","make_pulse"],[47,1,1,"","make_sine"],[47,1,1,"","normalize_table"],[47,1,1,"","parse_cell"],[47,1,1,"","parse_pulse_parameters"],[47,1,1,"","parse_table"],[47,1,1,"","select_channels_from_playlist"]],"etho.utils.tui":[[48,1,1,"","df_to_table"]],etho:[[7,0,0,"-","cli"]]},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"],"4":["py","property","Python property"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method","4":"py:property"},terms:{"0":[30,37,40,41,42,52,56,57,58,64,66],"001":42,"011111111111111112":41,"04":54,"08":54,"0m":52,"0servic":30,"1":[18,19,20,21,22,23,24,25,26,27,28,29,30,40,41,52,54,56,57,58,64,67],"10":[37,58,66],"100":[56,57,58],"1000":[56,57,58],"10000":[54,58],"1080":40,"10800":41,"10cm":54,"10m":58,"11":52,"110423":68,"1280x720":19,"129":67,"13":[19,52],"1300":58,"14":52,"1420":56,"1442":56,"1443":56,"1444":56,"1445":56,"1447":56,"1448":56,"1449":56,"1461":56,"15":52,"150":56,"1500":56,"16":[52,58],"1640x1232":19,"168":[18,19,20,21,22,23,24,25,26,27,28,29,30,56,58,67],"169":56,"17":58,"180":[41,58],"192":[18,19,20,21,22,23,24,25,26,27,28,29,30,56,58],"1920":40,"1v":57,"2":[40,52,56,57,58,68],"20":58,"200":[56,57,58],"2000":[56,57],"2019":54,"20200818":54,"2023":52,"21":52,"22":58,"23":66,"24":58,"25":[52,58],"250":56,"2m":[57,64],"3":[25,41,52,56,58,66],"30":[56,58],"300":56,"30959651":58,"350":56,"360":[41,58],"38":52,"3v":25,"4":[40,56,68],"400":56,"40fp":19,"42":58,"4242":56,"4243":56,"4244":56,"4245":56,"4247":56,"4248":56,"4249":56,"44100":58,"450":56,"4m":52,"5":[56,57],"500":56,"5000":58,"5400":41,"5_000":58,"5m":[57,58],"5v":25,"6":[52,56,57,66],"60":41,"600":56,"640":58,"64bit":52,"7":[56,58,66],"700":56,"78":58,"8":[52,56],"800":56,"9":[52,56],"90":58,"900":56,"90fp":19,"abstract":30,"break":54,"class":[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,37,41,42,43,45,46,47,51],"default":[1,7,10,18,19,20,21,22,23,24,25,26,27,28,29,30,37,41,42,45,48,52,56,58,64,66,68],"do":[19,41,57,66,68],"export":54,"float":[37,41,42,45,47,57],"function":[18,19,20,21,22,23,24,25,26,27,28,29,30,40,42,43,44],"import":[0,7,52,56,57,58],"int":[10,18,19,20,21,22,23,24,25,26,27,28,29,30,40,41,45],"new":54,"return":[18,19,20,21,22,23,24,25,26,27,28,29,30,37,40,41,42,45,47,48,57],"static":0,"true":[1,30,42,45,47,48,58],"try":[28,29,54],"while":68,A:[0,43,48,54,55],Be:54,For:[7,41,42,51,58,66,68],If:[45,57],Is:68,It:54,NOT:[52,68],ON:58,ONES:56,OR:58,One:57,Or:57,THE:[56,68],TO:56,The:[0,40,43,48,54,57,58,64],Then:41,Will:[40,41,57],_build:0,_description_:[1,2,45,52],_dlp:58,_done_ev:1,_queue:1,_stop_ev:1,_summary_:[1,2,45],_type_:1,abbrevi:58,abcd:46,about:[30,68],abov:67,absolut:40,absolute_path_to_fil:41,acbd:46,accbbdbdcaba:46,accept:[10,41],access:[0,42,56],accord:54,acq:[37,64],acquisit:[57,64],across:57,activ:66,adafruit:[28,29,66],adafruit_dht:66,adafruit_python_dht:[28,29],add:[41,48,57,64,68],address:45,adjust:57,advertis:56,after:[54,56,57],ai0:[54,58,68],ai1:68,ai2:68,aliv:30,all:[30,37,41,43,45,54,56,57,58,68],allow:55,alreadi:42,also:[57,68],alwai:42,amp:[54,68],amplitud:[24,58],an:[1,54,56],analog:[20,54,57,68],analog_chans_in:58,analog_chans_out:58,analog_in:68,analog_in_info:68,analog_out:68,analog_out_info:68,analysi:54,ani:[1,10,30,41,42,68],annotate_frame_num:58,anyth:37,ao0:[58,68],ao1:[58,68],api:66,appli:58,apt:66,ar:[0,42,54,55,58,64,67,68],arduino:[28,29],arg:[11,17,18,19,20,21,22,23,24,25,26,27,28,29,30,41,42],argument:52,arm64:52,arm:[52,64],arrai:[37,41,42,47,57,66],assess:42,associ:68,asynchron:45,attach:42,attenu:[54,56,57],attribut:45,audio:[58,68],avail:52,avi:58,back:68,backend:58,backlight:58,ball_info:41,bandwidth:51,base:[30,41,58],basecallback:51,basezeroservic:30,basi:55,basler:66,bdca:46,been:[42,67],befor:[57,64],begin:54,being:[51,57],below:[41,57,58],between:42,bin3:58,binari:58,blink:41,blinker:41,block:[42,46,47,58,68],blt:18,bnc:54,book:0,bool:[1,2,7,10,42,45,47,48],both:58,box:54,bracket:57,bright:58,broadcast:67,build_playlist:47,built:0,bundl:20,busi:[18,19,20,21,22,23,24,25,26,27,28,29,30],busydialog:11,button:64,c:[0,37,54,56,58,66,68],c_doubl:42,calcul:54,calib:54,calibr:68,call:[30,41,42,52,68],callabl:[41,42,47],callback:[57,58,68],cam:[19,37,56,58,68],cam_serialnumb:58,cam_typ:[58,68],camera:[19,51,56,58,66,68],can:[19,24,45,51,56,57,58,67,68],cannot:25,card:68,cast:[47,57],cdab:46,cell:[47,57],center:54,chang:[30,54,68],channel:[47,54,58,64,68],channels_to_keep:47,check:[7,30,56],child:10,chunk:51,circl:41,circuitpython:66,cl:41,clang:52,classnam:[41,58],clean:0,cleanli:45,cleanup:[18,19,20,21,22,23,24,25,26,27,28,29,30],cli:52,cli_progress:1,click:54,client:[2,68],clock:[57,64],clock_pulsedur_pulsepau:57,clock_sourc:58,clockwis:40,close:[30,41],cm2:53,cmd:45,cmdline:45,cmo:66,code:55,coincid:54,col:47,collect:44,column:[48,57],columncount:10,com:[0,28,29,66],come:66,comm:42,comma:57,command:[7,45],common:42,comms_kwarg:42,commun:[30,42],concaten:[47,57],concurrenttask:42,conda:[0,52,66,68],condadir:68,config:[7,56,58,66],config_file_nam:54,configur:[57,58,64],connect:[28,29,42,54,68],consist:42,consol:67,construct:42,contain:[42,57,58],content:56,continu:[37,57],control:[24,55,57,58,68],convert:[37,44,48,57],coolcallback:51,coordin:40,copi:54,copybutton:0,core:[47,48,66],corner:40,correct:[54,56,57,64],correctli:54,correspond:54,could:[7,41],count:48,coupl:51,creat:[40,54,57,66,68],create_warpfil:40,crf:58,csv:54,ctype:42,current:[42,57,58],cut:54,cycl:46,d:[44,52],da:[7,68],dangerdialog:17,daq:[20,41,51,56,58,64,68],daqexpress:54,daqmx:[52,66],dark:0,data:[10,40,42,51,54,58,64],datafram:[30,47,48,57],date:54,datenam:64,db:57,dcam:66,de:25,debug:[1,2,7,52,68],decor:[41,43],defaultdict:44,defaultfactori:44,defaultifi:44,defin:[30,41,54,55,57],defopt:66,delai:[57,64],delaypost:57,deleg:42,delimit:57,dep:66,deriv:30,desc:2,descript:[18,19,20,21,22,23,24,25,26,27,28,29,30,37,41,42,47,57],desir:[47,54],destroi:41,detail:[57,64],determin:47,df_to_tabl:48,dht22:[28,29],dht:66,diagram:68,dict:[1,30,41,42,44,51],dictionari:[1,56,57],didnt:45,differ:[53,57,58,68],differenti:54,digit:[20,57,64],digital_chans_out:64,directli:[28,29],directori:[40,56,57,58,68],disabl:68,disown:45,disp:58,disp_fast:58,displai:[7,30,42,67],displayrol:10,distanc:54,dlp:[21,58],dlpzeroservic:41,doc:[0,7,57,64,66],document:54,doe:57,don:42,done:1,done_ev:[1,10],doubl:54,down:30,drive:53,driver:[66,68],dtype:[47,57],duplic:[47,57],dur:64,durat:[1,47,57],dure:[41,68],e:[41,45,47,54,55,57,58,66,68],each:[47,51,55,56,57,58,64,67,68],ed:42,edit:10,editrol:10,eg:40,either:[42,47,58],element:57,empty_valu:42,en:[19,66],enabl:64,end:[42,54,57,64],ensur:[41,42],entri:[47,57,68],env:[58,68],environ:[56,66,68],essenti:68,etc:[18,19,20,21,22,23,24,25,26,27,28,29,30,41,55],etho:[52,58,64,66,68],ethoconfig:[52,54,56,57,68],ethoconfig_rpi7_10cm_aft:54,ethoconfig_rpi7_10cm_befor:54,ethomast:[56,57,58,67],ethoservic:30,eu:66,even:[45,57],event:[1,51],everi:[41,51,54,58],everyth:54,ex:[56,58,68],exampl:[11,17,41,54,68],except:[7,43,52],execut:[56,68],exit:[45,52],expect:[1,41],experi:[1,55,58],expos:42,exposur:58,exposuremod:58,expt:1,extens:57,extern:[41,57,64,68],exterrn:64,extra:41,fabric:[45,66],factor:56,fail:[7,18,19,20,21,22,23,24,25,26,27,28,29,30,52],failur:45,fall:[57,64],fals:[1,2,7,10,30,45,52,58],faster:58,faucet:42,feb:52,feedback:42,fewer:57,ffmpeg:58,ffmpeg_param:58,fictrac:41,field:[41,57,58],fig:54,figur:56,file:[0,7,10,30,40,41,51,54,55,56,57,58,64,66,67],filenam:[41,57],fill:57,finish:[30,54],first:[41,42,54,57,64,68],fixedfp:58,flag:10,flammkuchen:66,flash:66,flea3:37,flir:[37,66,68],float64:42,flow:55,fly:[54,57],flybal:58,flycaptur:[52,66,68],flycapture2:58,focu:64,folder:[7,10,54,55,56,66,68],follow:[30,57,58,68],for_all_method:43,forg:[0,52,66],forget:68,format:[37,58],fov:19,fp:56,frame:[12,13,14,15,16,41,47,48,51,55,57,58,64],frame_height:58,frame_numb:41,frame_offi:58,frame_offx:58,frame_r:58,frame_width:58,frameheight:58,framer:58,framewidth:58,free:[18,19,20,21,22,23,24,25,26,27,28,29,30,37,41],freq:57,frequenc:[47,56,57],fresh:42,friendli:51,from:[1,8,10,37,40,41,47,52,54,56,57,58,64,66,68],fs:[47,57],full:[19,46,51,57,68],fulli:0,fun:1,func:41,furo:0,futur:66,g:[41,45,47,54,55,57,58,66,68],gain:58,gamma:58,gcm:[22,58,68],gener:[41,56,57,58,68],geometr:41,get:[37,40,42,45,66],get_transformation_matric:40,gevent:66,gh:0,ghp:0,git:66,github:[0,28,29,66],give:[48,54],given:57,global:[30,55,57],go:54,goal:54,goe:37,good:54,gpio:[24,25,58],gpiozero:[24,25,66],gpu:58,graph:54,graphic:10,grasshopp:37,great:42,green:58,grid:41,grid_direct:41,grid_direction_change_fram:41,grid_spe:41,gui:[7,52,66],h5:58,h5py:[52,66],h:52,ha:[42,47,55,58,67],hacki:25,hamamatsu:66,hardwar:[7,30,55,63],have:[41,42,57,66,68],hdf:58,head:[10,30,52,56,67],head_ip:[18,19,20,21,22,23,24,25,26,27,28,29,30],header:57,headerdata:10,headlogg:67,height:[19,40],help:52,helper:42,here:[41,56,68],hhmmss:68,hierarchi:54,home:56,homographi:40,host:[1,2,12,13,14,15,16,17,45,52,56,58],host_is_remot:45,host_is_win:45,host_yyyymmdd:68,how:[7,41],html:[0,7,19,66],http:[0,19,24,28,29,66],humid:[28,29,51,58,66],hz:[47,57,58],i:54,ideal:68,identifi:30,idl:[18,19,20,21,22,23,24,25,26,27,28,29,30],ignor:41,illumin:58,imag:[0,37,40,52,64],image_height:40,image_timestamp:37,image_width:40,implement:30,implicitli:57,importantli:68,includ:[54,68],independ:[24,42],index:48,index_nam:48,indic:[30,42],individu:[24,51,58,68],inf:64,info:[7,67],inform:[30,67,68],ini:57,init:[7,37,41,52,66],init_local_logg:[30,67],initi:[7,25,41,67],inlin:0,input:[20,54,68],insid:54,instal:[0,7,63],instanc:[18,19,20,21,22,23,24,25,26,27,28,29,30,41,48,57],instruct:[7,68],instrument:[54,68],intens:[47,57,68],intercept:67,interfac:[7,10,42,58],interv:58,intial:[1,57],invok:45,io:[19,24,66],ip:[15,16,45,56,67],ip_address:30,ipynb:54,ipython:66,ir:58,is_busi:[18,19,20,21,22,23,24,25,26,27,28,29,30],is_onlin:45,is_run:45,item:57,itemdatarol:10,itemflag:10,iter:46,its:54,janclemenslab:[0,7,66],just:57,kei:57,kill:45,kill_python:45,kw:[11,17],kwarg:[18,19,20,21,22,23,24,25,26,27,28,29,30,41,42],kwignor:41,lab:54,lambda:44,larg:64,last:[42,57,64],latest:[0,66],least:45,leav:64,led:[24,41,58,68],led_blink:[41,58],led_blinker_fil:41,led_dur:[41,58],led_fram:[41,58],led_po:41,led_siz:41,ledamp:58,ledd1b:68,left:40,length:47,letter:[30,58],level:67,libgpiod2:66,librari:[25,52,68],lighcraft:66,light:[0,57],like:[42,51,57],limit:[19,58],line1:64,line2:64,line3:64,line:7,list:[41,42,45,47,54,56,57,58,68],liter:42,live:8,load:57,load_sound:57,local:[30,45,67],localhost:[1,56,68],localhost_20230401:68,locallu:45,log:[30,41,43,51,56,58,68],logfilenam:[30,67],logger:[43,56,67],logging_port:[18,19,20,21,22,23,24,25,26,27,28,29,30,67],loggingfold:56,logic:42,longest:57,loop:[41,51,64],loopback:68,loos:42,loss:42,low:51,lower:68,m:68,machin:45,maco:52,main:[7,10,52],mainwindow:10,make:[0,47,57,68],make_puls:47,make_sin:47,mamba:[0,66],mambaforg:68,manag:45,manipul:41,manual:54,map:57,match:[45,57],matplotlib:58,matric:40,maxdur:58,measur:[53,54],mediocre_stim:57,mesh:40,mess:55,messag:[30,41,52,67],method:[30,43,47],mgen:56,mic:54,mic_calibr:54,mic_calibration_20190408:54,micromanipul:54,microphon:54,mimic:42,mind:42,miniconda3:56,miniconda:58,miniforg:66,minim:68,mirror:57,mirror_l:57,miss:54,mm2:57,mm:57,mode:[0,19,57],model:10,model_dict:41,modul:67,more:68,move:41,mq013cg:58,ms:[47,57,68],msgpack:66,much:58,multidimension:57,multipl:24,multiprocess:42,must:42,mw:[53,57],myst:0,n:66,name:[1,40,41,45,48,51,54,55,56,58,68],nation:[54,68],nb:[0,64],nb_sampl:47,nb_screen:40,nb_screensx3x3:40,ncb:[54,56,58],ncircl:41,ndarrai:[37,40],need:[0,30,41,54,56,57,58],nest:44,network:30,never:[42,58],new_consol:45,next:[57,64],ni:[52,66,68],nic:[23,68],nm:57,no_gui:7,node:[58,67],none:[1,2,10,12,18,19,20,21,22,23,24,25,26,27,28,29,30,37,42,43,45,46,47,48,57],nonzero:45,normal:[40,47,54,57],normalize_t:[47,57],note:[41,57,66],notebook:54,np:[37,41,42,47],npz:41,ns:58,number:[41,52,57,58,64],numpi:[40,42,47,52,57,66],nvidia:58,o:[55,57],obj:48,object:[41,42,43,58],objectcirclesgrid:41,objectmovers:41,occur:43,off:25,offset:54,old:66,older:[37,66,68],onboardclock:58,one:[43,45,47,57],onli:[37,47,58,66],onlin:45,onset:54,open:[10,54,68],opencv:[58,66],oper:63,opt2:[24,58],optim:37,option:[1,2,10,12,18,19,20,21,22,23,24,25,26,27,28,29,30,37,41,42,43,45,47,48,52,58,67,68],opto:[58,68],orca:66,order:58,org:[0,7,66],orient:10,os:10,out:[51,54,56,58],output:[20,54,57,64,68],outsid:1,over:[42,51,56],overrid:45,own:41,p:52,packag:52,pad:57,page:0,pair:56,panda:[47,48,52,57,66],pandas_datafram:48,pandasmodel:10,panel:[0,12],param:[41,43,48,58],paramet:[1,2,7,10,18,19,20,21,22,23,24,25,26,27,28,29,30,37,40,41,42,45,46,47,56,58,68],parent:[10,12,68],pars:[47,56],parse_cel:47,parse_pulse_paramet:47,parse_t:[47,57],parsed_t:57,part:54,partial:[37,45],pass:[41,42,43,48,51],path:[40,58,68],pathlik:10,pattern:24,paus:57,pb_ui:64,pc:[54,66],pd:[30,47,57],pdur:57,pend:57,per:[55,57,58],period:47,phase:[47,57],photodiod:41,photomet:53,pi:[8,24,47,58,66],picamera:[19,58,66],pickl:58,pid:45,pillow:66,pin:[24,25,58],ping:[30,45],pip3:66,pip:[0,66],pipe:42,pixel:[37,40,58,64],place:54,plai:[55,68],playback:[54,57,58,68],playback_calibr:54,playlist:[10,47,52,54,55,56,64],playlist_channel:58,playlist_fold:[10,52],playlistfil:[1,2,52],playlistfilenam:57,playlistfold:[10,52,56],plot:58,plot_fast:58,point:[54,56],pointer:37,pointgrei:[66,68],poll:42,pong:30,popul:48,port0:64,port:[30,56,68],portrang:56,posit:[41,52],possibl:[19,28,29],post:57,postpop:66,power:54,ppau:57,practic:54,pre:[57,66],prefix:52,prepend:58,preview:[1,12,52],primit:42,print:[30,54,58],probabl:[42,58],problem:19,problemat:57,process:[42,45,51],produc:51,product:66,program:52,progress:[30,52],proj_roi:40,project:[40,66],projection_height:40,projection_width:40,projector:58,projector_dir:40,promis:45,proper:0,properti:[30,42],prot:[41,58],protfil:68,protocol:[10,41,51,52,54,55,56,64],protocol_filenam:12,protocol_fold:[10,52],protocolfil:[1,2,52,58],protocolfold:[10,52,56],provid:42,psutil:66,psychopi:[41,58],ptg:56,publish:30,pul:57,pul_5_10_10_0:57,pul_pulsedur_pulsepau_pulsenumber_pulsedelai:57,pull:37,puls:[47,57],pulsedelai:47,pulsedur:47,pulsenumb:47,pulsepau:47,push:0,put:42,py:54,pydaqmx:[66,68],pygam:58,pylab:66,pylablib:66,pylon:66,pypylon:66,pyqtgraph:[52,58,66],pyseri:66,pyside2:52,pyside6:66,python:[45,52,56,58,67,68],python_ex:[45,56,58,68],pyyaml:[56,66],pyzmq:66,qmodelindex:10,qt:[10,52],qtpy:[52,66],queri:45,queue:[1,42],queue_tot:10,quickli:68,rad:57,rais:[37,42,45],random:58,raspberi:66,raspberri:24,raspbian:66,rate:[47,51,54,55],raw:57,raw_tabl:57,re:54,read:[41,42,51,56,58],read_tabl:57,readconfig:58,readthedoc:[19,24,66],realtim:42,receiv:8,recogn:45,recommend:66,record:[19,54,58,64,68],recording_nam:54,rect:[41,58],red:58,register_runn:41,reject:10,rel:[25,58],relai:[25,58],releas:19,remain:[57,66],remot:[45,56,57,64],render:0,replac:68,requir:[0,25,57,66,68],reset:37,resiz:41,resourc:[18,19,20,21,22,23,24,25,26,27,28,29,30,37,41],respons:30,result:45,rich:[48,66],rich_inform:30,rig:[54,57],rise:[57,64],robust:41,roi:40,role:[10,55],roughli:54,row:[47,48,57],rowcount:10,rpi3:56,rpi4:56,rpi5:56,rpi6:56,rpi7:[54,56],rpi7_10cm_aft:54,rpi7_10cm_befor:54,rpi8:56,rpi9:56,rpi:[25,28,29,54,66],run:[0,30,42,45,58],run_loc:45,rundialog:10,runner:[41,58],s0:54,s:[51,52,54,57,58,67],safe:42,same:[41,57],sampl:[41,47,54,55,57,64],samplingr:[47,58],save:[40,42,52,54,57,58,64,66,68],save_avi:[58,68],save_avi_fast:58,save_avi_vidread:58,save_directori:[58,68],save_h5:[58,68],save_prefix:[1,2,52],save_timestamp:[58,68],savedlp_h5:58,savefilenam:64,scale:57,scan:64,scanimag:57,scanimage_next:57,scipi:[52,66],scm:56,screen:41,sdk:[37,52,66,68],second:[37,47,51,58,68],section:56,see:[41,45,57,58,64],select:[41,47,54,64,68],select_channels_from_playlist:47,self:[10,30,67],send:42,sensor:[19,28,29,51,58,66],sent:64,separ:[57,64],serial:[18,19,20,21,22,23,24,25,26,27,28,29,30,58],serialnumb:37,server:[30,54],server_start:30,server_stop:30,servic:[1,56,58,67],service_nam:30,service_port:[18,19,20,21,22,23,24,25,26,27,28,29,30],service_start:30,service_stop:30,serviceeas:30,services_logging_port:56,services_working_port:56,session:64,set:[1,19,37,41,55,57,58],setdata:10,setup:[30,68],shape:[40,42],share:42,sharednumpyarrai:42,shorter:57,shortli:19,should:[30,37,40,41,43,54,57,58,64,66],show:[48,52],show_index:48,show_progress:1,show_test_imag:2,shuffl:[46,47,57,58,64],shut:30,shutter:68,shutter_spe:58,shutterspe:58,si_next:[57,64],si_start:[57,64],si_stop:[57,64],signal:[1,57,64],silencepost:[57,64],silencepr:[57,64],silent:54,simpli:57,simplic:51,sin:57,sin_100_0_3000:57,sin_200_0_2000:57,sin_frequency_phase_dur:57,sinc:[25,42,57],singl:57,sinusoid:[47,57],size:[41,55,56],sle:56,sleep:37,slower:42,slp:56,small:68,snd:[26,56,58],so:[25,57],some:66,someth:68,sound:[55,57,58,68],sound_ord:47,soundboard:66,soundlist:47,sourc:[1,2,7,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,37,40,41,42,43,44,45,46,47,48],specif:[55,57,58,66],specifi:[41,54,64,67,68],speed:42,sphinx:0,sphinxcontrib:0,spinnak:[37,52,58,66,68],squar:[41,47,57],ssh:[45,56],stabl:66,stale:42,stamp:37,start:[1,30,54,56,57,64,66,68],state:[18,19,20,21,22,23,24,25,26,27,28,29,30],statu:[41,56],step:68,sth:37,stim2:57,stim:[41,56],stim_on_chan1:57,stim_on_chan2:57,stimfilenam:[47,57],stimfold:[56,57],stimuli:[57,58,64],stimulu:[47,54,55,58],stop:[1,30,42,54,57,64],stop_ev:[1,10],store:[40,68],str:[1,2,10,12,18,19,20,21,22,23,24,25,26,27,28,29,30,40,41,42,45,46,47,48,57],stream:8,streamwatch:45,string:[41,47],strip:57,stuff:66,subfold:68,sudo:66,summari:[18,19,20,21,22,23,24,25,26,27,28,29,30,37,42,47],superstimulu:57,suppli:54,support:[37,52,58,66],sure:[47,54,57],surround:57,sync:[41,58],synchron:[20,42],system:[7,37,55],system_timestamp:37,t:[42,57],tab:[0,54,57],tabl:[47,48,57],tableview:10,task:[1,20,42,54],task_kwarg:42,taskstopsign:42,tcp:30,tell:42,temperatur:[28,29,51,58,66],tempor:24,termin:[30,64],test:[18,19,20,21,22,23,24,25,26,27,28,29,30,52,54,68],test_calibr:54,text:57,than:[19,57],thei:55,thi:[0,41,52,57,58,64,68],thorlab:[53,68],those:19,thread:[1,42],three:[30,57],through:68,throughput:37,throught:64,thu:[29,58],thua:[28,56,58],time:[37,54,57],timeout:[37,42,45],timestamp:58,tmp:27,todo:66,toggl:25,tool:42,top:40,total:57,trace:58,trail:68,train:[47,57],transform:40,transformation_matric:40,translat:47,tree:0,trial:47,trigger:[57,64,68],tui:30,tupl:[30,37,42],turn:25,two:[47,68],txt:54,type:[37,40,41,42,44,45,47,48,54,55,57],typic:[57,68],ug:56,ukme04:54,unaccept:42,under:[40,54],unexpectedexit:45,union:[10,45,47],uniqu:30,unit:[54,57],unknown:42,uns:42,unspecifi:41,unus:[56,57,58],up:[19,41],updat:[41,42],us:[1,8,24,25,41,53,54,56,57,58,66,67,68],usag:52,use_servic:[58,68],use_warp:58,user:[10,54,55,56,58],usual:[19,54],utc:37,util:[30,57,58],v0:52,v1:52,v2:52,v3:52,v5:52,valid:58,valu:[10,41,42,48,52,54,56,57,64],valueerror:[37,42],variant:41,veri:[25,64],version:[0,7,66],via:[0,24,28,29,42,45,56,57,58,64,67,68],video:[8,58,66,68],video_denois:58,videoprocessingframework:58,videowrit:58,vidgear:66,vidread:[58,66],visual:[41,58],voltag:53,vpf:58,vpf_bin_path:58,w:[55,57],wa:45,wai:55,walk:68,want:[19,42,66],warn:[45,52,67],warp:40,warpfil:[40,58],warpmesh_1140x912:58,warpmesh_:40,watchererror:45,wav:57,waveform:47,we:[25,66,68],were:54,what:57,when:[30,41,42,54,56],where:[40,58,68],whether:[18,19,20,21,22,23,24,25,26,27,28,29,30,42],which:[40,45,47,56,57,68],whitespac:57,whole:54,width:[19,40],wiki:66,win:41,window:41,wire:68,work:[41,56,58,66,68],working_directori:58,would:54,wrap:[42,43,47],wrapper:42,write:42,wrong:37,www:66,wxctrl:68,x:[37,40],ximea:[58,66,68],y:[37,40,66],yaml:[56,58],yml:[10,52,54,68],you:[19,42,66,68],your:[41,68],z:58,zero:57,zeromq:8,zerorpc:66},titles:["Ethodrome documentation","etho.call.client","etho.call.client_old","etho.call.ephys","etho.call.panoptikum","etho.call.rpi","etho.call.vr","etho.cli","etho.gui.CamPreview","etho.gui.ThuPreview","etho.gui.app","etho.gui.wxBusyDialog","etho.gui.wxCam","etho.gui.wxCtrl","etho.gui.wxCtrl_ephys","etho.gui.wxCtrl_rpi","etho.gui.wxCtrl_vr","etho.gui.wxDangerDialog","etho.services.BLTZeroService","etho.services.CamZeroService","etho.services.DAQZeroService","etho.services.DLPZeroService","etho.services.GCMZeroService","etho.services.NICounterZeroService","etho.services.Opt2ZeroService","etho.services.RelayZeroService","etho.services.SndZeroService","etho.services.TemplateZeroService","etho.services.ThuAZeroService","etho.services.ThuZeroService","etho.services.ZeroService","etho.services.camera.base","etho.services.camera.basler","etho.services.camera.dummy","etho.services.camera.flycapture2","etho.services.camera.hamamatsu","etho.services.camera.spinnaker","etho.services.camera.spinnaker_old","etho.services.camera.videocapture","etho.services.camera.ximea","etho.services.dlp.dlp_make_warpfiles","etho.services.dlp.dlp_runners","etho.services.utils.concurrent_task","etho.services.utils.log_exceptions","etho.utils.config","etho.utils.runner","etho.utils.shuffled_cycle","etho.utils.sound","etho.utils.tui","etho.utils.zeroclient","Developer API","Callbacks","Command-line interface","LED calibration","Speaker calibration","Configuration","Global configuration","Stimulus playlists","Experimental protocols","Cameras","Supported Hardware","National Instruments DAQmx cards","DLP projector","Raspberry PI","ScanImage","Etho documentation","Installation","Logging","Tutorial"],titleterms:{For:56,There:57,an:[52,68],analyz:54,anatomi:51,api:50,app:10,ar:57,base:31,basler:32,bltzeroservic:18,build:0,calibr:[53,54],call:[1,2,3,4,5,6],callback:51,camera:[31,32,33,34,35,36,37,38,39,59],campreview:8,camzeroservic:19,card:61,channel:57,cli:[7,68],client:1,client_old:2,command:52,concurrent_task:42,config:[44,52],configur:[55,56,66,68],control:64,daqmx:61,daqzeroservic:20,data:57,develop:50,displai:52,dlp:[40,41,62],dlp_make_warpfil:40,dlp_runner:41,dlpzeroservic:21,document:[0,65],dummi:33,ephi:3,etho:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,65],ethodrom:0,experi:[52,68],experiment:58,file:[52,68],flycapture2:34,folder:52,format:57,gcmzeroservic:22,global:56,graphic:52,gui:[8,9,10,11,12,13,14,15,16,17,68],hamamatsu:35,hardwar:[52,54,60,66,68],host:68,info:52,initi:[52,66],instal:[66,68],instrument:61,interfac:52,led:53,line:52,log:67,log_except:43,magic:57,make:[51,58],multi:57,name:57,nation:61,nicounterzeroservic:23,open:52,opt2zeroservic:24,option:66,own:51,packag:66,panoptikum:4,pars:[57,58],pi:63,playlist:[57,68],produc:68,projector:62,protocol:[58,68],publish:0,python:66,raspberri:63,relayzeroservic:25,result:54,rpi:[5,56],run:[54,68],runner:45,scanimag:64,servic:[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,51,68],set:[54,64],setup:54,sever:57,shuffled_cycl:46,sndzeroservic:26,softwar:[54,66],sound:47,speaker:54,specifi:57,spinnak:36,spinnaker_old:37,start:52,stimul:57,stimulu:[57,64],support:60,system:[52,68],templatezeroservic:27,test:66,thuazeroservic:28,thupreview:9,thuzeroservic:29,tui:48,tutori:68,up:54,usag:51,user:52,util:[42,43,44,45,46,47,48,49],version:52,videocaptur:38,vr:6,wai:57,wxbusydialog:11,wxcam:12,wxctrl:13,wxctrl_ephi:14,wxctrl_rpi:15,wxctrl_vr:16,wxdangerdialog:17,ximea:39,your:51,zerocli:49,zeroservic:30}})
\ No newline at end of file
diff --git a/tutorial.html b/tutorial.html
index 9ccf76d..b7c3cbb 100644
--- a/tutorial.html
+++ b/tutorial.html
@@ -12,6 +12,7 @@
+
@@ -449,6 +450,8 @@ Produced files
+
+