From f30ec5f7c866e40a094029a2defcfc96234583c6 Mon Sep 17 00:00:00 2001 From: cjsha Date: Sat, 7 Dec 2024 02:42:38 -0500 Subject: [PATCH 1/5] Rhs2116 hardware guide --- .../getting-started/initialize-oni-context.md | 6 +- articles/getting-started/operator-types.md | 6 +- articles/getting-started/tips-tricks.md | 2 +- articles/hardware/breakout/analog-io.md | 20 +- articles/hardware/breakout/configuration.md | 1 - articles/hardware/breakout/digital-inputs.md | 22 +- articles/hardware/breakout/digital-outputs.md | 6 +- articles/hardware/breakout/heartbeat.md | 2 +- articles/hardware/breakout/memory-monitor.md | 3 +- articles/hardware/hs64/bno055.md | 2 +- articles/hardware/hs64/configuration.md | 21 +- articles/hardware/hs64/estim.md | 2 +- articles/hardware/hs64/load-data.md | 2 +- articles/hardware/hs64/memory-monitor.md | 3 +- articles/hardware/hs64/overview.md | 17 +- articles/hardware/hs64/port-status.md | 2 +- articles/hardware/hs64/rhd2164.md | 21 +- articles/hardware/hs64/ts4231.md | 10 +- articles/hardware/hs64/workflow.md | 4 +- articles/hardware/np1e/bno055.md | 2 +- articles/hardware/np1e/configuration.md | 4 +- articles/hardware/np1e/memory-monitor.md | 3 +- articles/hardware/np1e/np1.md | 26 +- articles/hardware/np1e/port-status.md | 2 +- articles/hardware/np2e/bno055.md | 2 +- articles/hardware/np2e/configuration.md | 4 +- articles/hardware/np2e/memory-monitor.md | 3 +- articles/hardware/np2e/np2.md | 31 +- articles/hardware/np2e/port-status.md | 2 +- articles/hardware/rhs2116/configuration.md | 26 + articles/hardware/rhs2116/load-data.md | 14 + articles/hardware/rhs2116/memory-monitor.md | 8 + articles/hardware/rhs2116/overview.md | 30 + articles/hardware/rhs2116/port-status.md | 10 + articles/hardware/rhs2116/rhs2116-record.md | 29 + .../hardware/rhs2116/rhs2116-stimulate.md | 33 + articles/hardware/ucla-miniscope-v4/bno055.md | 9 + articles/hardware/ucla-miniscope-v4/camera.md | 29 + .../ucla-miniscope-v4/configuration.md | 18 + .../ucla-miniscope-v4/memory-monitor.md | 8 + .../hardware/ucla-miniscope-v4/overview.md | 30 + .../hardware/ucla-miniscope-v4/port-status.md | 9 + articles/toc.yml | 25 + includes/configuration-timestamp.md | 2 +- src/onix-bonsai-onix1 | 2 +- .../partials/hardware/bno055.tmpl.partial | 4 +- .../hardware/memoryMonitor.tmpl.partial | 2 +- .../partials/hardware/portStatus.tmpl.partial | 4 +- workflows/hardware/np1e/configuration.bonsai | 2 +- workflows/hardware/np1e/np1e.bonsai | 11 +- workflows/hardware/np2e/configuration.bonsai | 2 +- workflows/hardware/np2e/np2e.bonsai | 2 +- .../hardware/rhs2116/configuration.bonsai | 486 ++++++++++++++ workflows/hardware/rhs2116/load-rhs2116.py | 62 ++ .../hardware/rhs2116/memory-monitor.bonsai | 21 + workflows/hardware/rhs2116/port-status.bonsai | 32 + .../hardware/rhs2116/rhs2116-record.bonsai | 58 ++ .../hardware/rhs2116/rhs2116-stimulate.bonsai | 54 ++ workflows/hardware/rhs2116/rhs2116.bonsai | 600 ++++++++++++++++++ .../hardware/ucla-miniscope-v4/bno055.bonsai | 44 ++ .../hardware/ucla-miniscope-v4/camera.bonsai | 53 ++ .../ucla-miniscope-v4/configuration.bonsai | 131 ++++ .../ucla-miniscope-v4/memory-monitor.bonsai | 19 + .../ucla-miniscope-v4/port-status.bonsai | 32 + .../ucla-miniscope-v4.bonsai | 230 +++++++ 65 files changed, 2260 insertions(+), 102 deletions(-) create mode 100644 articles/hardware/rhs2116/configuration.md create mode 100644 articles/hardware/rhs2116/load-data.md create mode 100644 articles/hardware/rhs2116/memory-monitor.md create mode 100644 articles/hardware/rhs2116/overview.md create mode 100644 articles/hardware/rhs2116/port-status.md create mode 100644 articles/hardware/rhs2116/rhs2116-record.md create mode 100644 articles/hardware/rhs2116/rhs2116-stimulate.md create mode 100644 articles/hardware/ucla-miniscope-v4/bno055.md create mode 100644 articles/hardware/ucla-miniscope-v4/camera.md create mode 100644 articles/hardware/ucla-miniscope-v4/configuration.md create mode 100644 articles/hardware/ucla-miniscope-v4/memory-monitor.md create mode 100644 articles/hardware/ucla-miniscope-v4/overview.md create mode 100644 articles/hardware/ucla-miniscope-v4/port-status.md create mode 100644 workflows/hardware/rhs2116/configuration.bonsai create mode 100644 workflows/hardware/rhs2116/load-rhs2116.py create mode 100644 workflows/hardware/rhs2116/memory-monitor.bonsai create mode 100644 workflows/hardware/rhs2116/port-status.bonsai create mode 100644 workflows/hardware/rhs2116/rhs2116-record.bonsai create mode 100644 workflows/hardware/rhs2116/rhs2116-stimulate.bonsai create mode 100644 workflows/hardware/rhs2116/rhs2116.bonsai create mode 100644 workflows/hardware/ucla-miniscope-v4/bno055.bonsai create mode 100644 workflows/hardware/ucla-miniscope-v4/camera.bonsai create mode 100644 workflows/hardware/ucla-miniscope-v4/configuration.bonsai create mode 100644 workflows/hardware/ucla-miniscope-v4/memory-monitor.bonsai create mode 100644 workflows/hardware/ucla-miniscope-v4/port-status.bonsai create mode 100644 workflows/hardware/ucla-miniscope-v4/ucla-miniscope-v4.bonsai diff --git a/articles/getting-started/initialize-oni-context.md b/articles/getting-started/initialize-oni-context.md index 12755699..6ea327bb 100644 --- a/articles/getting-started/initialize-oni-context.md +++ b/articles/getting-started/initialize-oni-context.md @@ -3,7 +3,7 @@ uid: initialize-onicontext title: Initialize the ONI Context --- -The [`CreateContext`](xref:OpenEphys.Onix1.CreateContext) operator initializes the acquisition context, and it should be the first operator you add to your workflow as it provides access to the hardware device table for all other configuration operators. There are several different ways to find this operator and add it to the workflow: +The [CreateContext](xref:OpenEphys.Onix1.CreateContext) operator initializes the acquisition context, and it should be the first operator you add to your workflow as it provides access to the hardware device table for all other configuration operators. There are several different ways to find this operator and add it to the workflow: 1. From the Bonsai editor, navigate to the toolbox on the left side of the screen and expand the **Source** section. Next, expand the **OpenEphys.Onix1** section, and find the `CreateContext` line. The operator can then be added by either double-clicking it, or dragging and dropping the operator into the workflow. @@ -13,11 +13,11 @@ The [`CreateContext`](xref:OpenEphys.Onix1.CreateContext) operator initializes t ![Search for CreateContext operator from textbox](../../images/bonsai-editor-place-create-context-search.png){width=700px} -3. Hover over the image of the [`CreateContext`](xref:OpenEphys.Onix1.CreateContext) workflow below, and click on the clipboard icon in the top-right corner of the workflow image to copy the workflow to the clipboard. Navigate back to Bonsai, and paste the copied workflow into the active editor. Pasting can be done via Ctrl + V, or right-clicking in the editor and choosing **Paste**. +3. Hover over the image of the `CreateContext` workflow below, and click on the clipboard icon in the top-right corner of the workflow image to copy the workflow to the clipboard. Navigate back to Bonsai, and paste the copied workflow into the active editor. Pasting can be done via Ctrl + V, or right-clicking in the editor and choosing **Paste**. ## CreateContext Workflow -This is a nominally functional workflow that provides access to the ONI context, from which all operators can then be linked to and configured, while also demonstrating how a Breakout Board can be configured before finishing the configuration chain by placing a [`StartAcquisition`](xref:OpenEphys.Onix1.StartAcquisition) operator: +This is a nominally functional workflow that provides access to the ONI context, from which all operators can then be linked to and configured, while also demonstrating how a Breakout Board can be configured before finishing the configuration chain by placing a [StartAcquisition](xref:OpenEphys.Onix1.StartAcquisition) operator: :::workflow ![CreateContext](../../workflows/operators/ConfigureBreakoutBoard.bonsai) diff --git a/articles/getting-started/operator-types.md b/articles/getting-started/operator-types.md index c3c9e32c..fd5437b7 100644 --- a/articles/getting-started/operator-types.md +++ b/articles/getting-started/operator-types.md @@ -7,6 +7,6 @@ In Bonsai, a "workflow" is composed of ["operators"](https://bonsai-rx.org/docs/ | Operator Type | Description | Example ONIX operators | | --------- | ----------- | ------------------ | -| Source | Generate acquisition state or hardware data | [`CreateContext`](xref:OpenEphys.Onix1.CreateContext), [`Bno055Data`](xref:OpenEphys.Onix1.Bno055Data), [`NeuropixelsV1eData`](xref:OpenEphys.Onix1.NeuropixelsV1eData) | -| Sink | Configure and send data to hardware | [`ConfigureHeadstage64`](xref:OpenEphys.Onix1.ConfigureHeadstage64), [`ConfigureNeuropixelsV1eHeadstage`](xref:OpenEphys.Onix1.ConfigureNeuropixelsV1eHeadstage) | -| Combinator | Manage control flow | [`StartAcquisition`](xref:OpenEphys.Onix1.StartAcquisition) | +| Source | Generate acquisition state or hardware data | [CreateContext](xref:OpenEphys.Onix1.CreateContext), [Bno055Data](xref:OpenEphys.Onix1.Bno055Data), [NeuropixelsV1eData](xref:OpenEphys.Onix1.NeuropixelsV1eData) | +| Sink | Configure and send data to hardware | [ConfigureHeadstage64](xref:OpenEphys.Onix1.ConfigureHeadstage64), [ConfigureNeuropixelsV1eHeadstage](xref:OpenEphys.Onix1.ConfigureNeuropixelsV1eHeadstage) | +| Combinator | Manage control flow | [StartAcquisition](xref:OpenEphys.Onix1.StartAcquisition) | diff --git a/articles/getting-started/tips-tricks.md b/articles/getting-started/tips-tricks.md index f08117f0..2ea672b9 100644 --- a/articles/getting-started/tips-tricks.md +++ b/articles/getting-started/tips-tricks.md @@ -20,7 +20,7 @@ Aside from determining the order of execution, the order of operators within a w | Change order of operators in a row | Hold **Ctrl**, click and hold the first operator, drag to the right to the second operator, and release | This action does not require that the operator be selected prior to performing the action. This can change the order of any two operators that are a part of the same row; it is not constrained to adjacent operators. Note that if the new placement of the operators is not valid (such as giving a `Source` operator an input), it will knock the operator of the current row and remove any connections | > [!Note] -> In the context of `OpenEphys.Onix1`, all workflows start with (top line) a [`CreateContext`](xref:OpenEphys.Onix1.CreateContext) operator connected to an arbitrary number of `Configure*` operators, finished with a [`StartAcquisition`](xref:OpenEphys.Onix1.StartAcquisition) operator. Subsequent rows will contain the corresponding `*Data` operators for capturing data from the hardware has been configured above. +> In the context of `OpenEphys.Onix1`, all workflows start with (top line) a [CreateContext](xref:OpenEphys.Onix1.CreateContext) operator connected to an arbitrary number of `Configure*` operators, finished with a [StartAcquisition](xref:OpenEphys.Onix1.StartAcquisition) operator. Subsequent rows will contain the corresponding `*Data` operators for capturing data from the hardware has been configured above.
diff --git a/articles/hardware/breakout/analog-io.md b/articles/hardware/breakout/analog-io.md index b73cb24b..6356c230 100644 --- a/articles/hardware/breakout/analog-io.md +++ b/articles/hardware/breakout/analog-io.md @@ -73,32 +73,30 @@ does exactly this on analog IO channel 0. ::: The operator receives a sequence of -s. In the Breakout Board example workflow: +s with the following properties settings: -- The `AnalogInput`'s `DeviceName` is set to "BreakoutBoard/AnalogIO". This links the `AnalogInput` - operator to the corresponding configuration operator. -- The `AnalogInput`'s `BufferSize` is set to 50. Therefore, each frame will contain a 50-element +- `BufferSize` is set to 50. Therefore, each frame will contain a 50-element `Clock` vector and a 12-channel x 50-sample `AnalogData` matrix. The analog inputs are sampled at 100 kHz per channel so this corresponds to 500 µs of data. That's lower than the minimal latency introduced by the `BlockReadSize` setting. Therefore, the chosen value for `BufferSize` will not impose a significant effect on processing latency. The buffer will be filled essentially every time hardware is accessed and propagated instantly. -- The `AnalogInput`'s `DataType` is set to `Volts`. This means that samples will be represented as +- `DataType` is set to `Volts`. This means that samples will be represented as units of units of voltage in a single-precision floating point type. +- `DeviceName` is set to "BreakoutBoard/AnalogIO". This links the `AnalogInput` + operator to the corresponding configuration operator. -The [MemberSelector](https://bonsai-rx.org/docs/api/Bonsai.Expressions.MemberSelectorBuilder.html) +The [MemberSelector](xref:Bonsai.Expressions.MemberSelectorBuilder) operators each select a member from the `AnalogInputDataFrame`, `Clock` and `AnalogData` which contain the -based sample times and sample values, respectively. The -[MatrixWriter](https://bonsai-rx.org/docs/api/Bonsai.Dsp.MatrixWriter.html) operators saves the +[MatrixWriter](xref:Bonsai.Dsp.MatrixWriter) operators saves the selected members to files with the following format: `analog-clock_.raw` and `analog-data_.raw`, respectively. > [!Tip] -> The easiest way to add a -> [MemberSelector](https://bonsai-rx.org/docs/api/Bonsai.Expressions.MemberSelectorBuilder.html) to -> the output of an operator is to right-click the node and hover over `Output` in the resulting -> context menu to examine the output type. A MemberSelector can be added by +> The easiest way to add a `MemberSelector` to the output of an operator is to right-click the node and hover over +> `Output` in the resulting context menu to examine the output type. A MemberSelector can be added by > left-clicking the desired expanded property of the `Output` type. > > ![Add a MemberSelector](../../../images/hardware/breakout/add-member-selector.gif){width=600px,align=center} diff --git a/articles/hardware/breakout/configuration.md b/articles/hardware/breakout/configuration.md index 8c740806..11b0d276 100644 --- a/articles/hardware/breakout/configuration.md +++ b/articles/hardware/breakout/configuration.md @@ -7,7 +7,6 @@ operator: ConfigureBreakoutBoard dataRate: 2.5 timeUntilFullBuffer: 800 μs blockReadSize: 2048 -videoCaption: workflowLocation: workflow --- diff --git a/articles/hardware/breakout/digital-inputs.md b/articles/hardware/breakout/digital-inputs.md index 5f67cab1..cd7e0dfe 100644 --- a/articles/hardware/breakout/digital-inputs.md +++ b/articles/hardware/breakout/digital-inputs.md @@ -6,12 +6,28 @@ device: digital inputs videoCaption: This visualizes digital input data using Bonsai visualizers. The "Buttons" window shows which buttons are being pressed. The "HasFlags" window shows whether or not certain button are being pressed (in the case of the breakout board example workflow, "Triangle" or "X"). These visualizers correspond to actual button presses which are demonstrated by the bottom-right breakout board inset. --- -The following excerpt from the Breakout Board [example workflow](xref:breakout_workflow) demonstrates digital inputs functionality by responding to button presses and saves digital inputs data. +The following excerpt from the Breakout Board [example workflow](xref:breakout_workflow) demonstrates digital inputs +functionality by responding to button presses and saves digital inputs data. ::: workflow ![/workflows/hardware/breakout/digital-inputs.bonsai workflow](../../../workflows/hardware/breakout/digital-inputs.bonsai) ::: -The operator generates a sequence of s. Although the digital inputs are sampled at 4 Mhz, these data frames are only emitted when the port status changes (i.e., when a pin, button, or switch is toggled). The digital input ports on the Breakout Board operate at a 3.3V logic levels but are also 5V tolerant. In the Breakout Board example workflow, the `DigitalInput`'s `DeviceName` property is set to "BreakoutBoard/DigitalInput". This links the `DigitalInput` operator to the corresponding configuration operator. +The operator generates a sequence of s. +Although the digital inputs are sampled at 4 Mhz, these data frames are only emitted when the port status changes (i.e., +when a pin, button, or switch is toggled). The digital input ports on the Breakout Board operate at a 3.3V logic levels +but are also 5V tolerant. In the Breakout Board example workflow, the `DigitalInput`'s `DeviceName` property is set to +"BreakoutBoard/DigitalInput". This links the `DigitalInput` operator to the corresponding configuration operator. -The [CsvWriter](https://bonsai-rx.org/docs/api/Bonsai.IO.CsvWriter.html) operator writes the `Clock`, `DigitalInputs`, and `Buttons` members from the `DigitalInputDataFrame` to a file with the following name format: `digital-input_.csv`. Because `CsvWriter` is a _sink_ operator, its output sequence is equivalent to its input sequence. In other words, its output is equivalent to `DigitalInput`'s output. Therefore, it's possible to use [MemberSelector](https://bonsai-rx.org/docs/api/Bonsai.Expressions.MemberSelectorBuilder.html) operators on the `CsvWriter` to select members from `DigitalInputDataFrame`. This is most easily performed by clicking the relevant members that appear by hovering over the "Output" option that appears in the context menu that appears after right-clicking the `CsvWriter` node. The members selected in the workflow, and , are enumerators with values that correspond to bit positions of the breakout board's digital ports. When `DigitalPortState` or `OpenEphys.Onix1.BreakoutButtonState` is connected to a `HasFlags` operator, the names that appear in the `HasFlags`'s `Value` property's dropdown menu correspond to bit positions in the respective digital input port. In this workflow, the top `HasFlags` operator checks if `Triangle` or `X` are `True`. \ No newline at end of file +The [CsvWriter](xref:Bonsai.IO.CsvWriter) operator writes the `Clock`, `DigitalInputs`, and `Buttons` members from the +`DigitalInputDataFrame` to a file with the following name format: `digital-input_.csv`. Because `CsvWriter` +is a _sink_ operator, its output sequence is equivalent to its input sequence. In other words, its output is equivalent +to `DigitalInput`'s output. Therefore, it's possible to use +[MemberSelector](xref:Bonsai.Expressions.MemberSelectorBuilder) operators on the `CsvWriter` to select members from +`DigitalInputDataFrame`. This is most easily performed by clicking the relevant members that appear by hovering over the +"Output" option that appears in the context menu that appears after right-clicking the `CsvWriter` node. The members +selected in the workflow, and , are +enumerators with values that correspond to bit positions of the breakout board's digital ports. When `DigitalPortState` +or `OpenEphys.Onix1.BreakoutButtonState` is connected to a `HasFlags` operator, the names that appear in the +`HasFlags`'s `Value` property's dropdown menu correspond to bit positions in the respective digital input port. In this +workflow, the top `HasFlags` operator checks if `Triangle` or `X` are `True`. \ No newline at end of file diff --git a/articles/hardware/breakout/digital-outputs.md b/articles/hardware/breakout/digital-outputs.md index df00681c..29864b96 100644 --- a/articles/hardware/breakout/digital-outputs.md +++ b/articles/hardware/breakout/digital-outputs.md @@ -20,11 +20,11 @@ outputting that counter to the digital output port. ![/workflows/hardware/breakout/digital-outputs.bonsai workflow](../../../workflows/hardware/breakout/digital-outputs.bonsai) ::: -The [Timer](https://bonsai-rx.org/docs/api/Bonsai.Shaders.Timer.html) operator generates a sequence +The [Timer](xref:Bonsai.Shaders.Timer) operator generates a sequence of [64-bit signed integer](https://learn.microsoft.com/en-us/dotnet/api/system.int64?view=net-8.0)s -in ~100ms intervals. The [Int](https://bonsai-rx.org/docs/api/Bonsai.Expressions.IntProperty.html) +in ~100ms intervals. The [Int](xref:Bonsai.Expressions.IntProperty) operator emits an integer (with a value of 1 in our case) when an item is received from the upstream -sequence. The [Accumulate](https://bonsai-rx.org/docs/api/Bonsai.Reactive.Accumulate.html) operator +sequence. The [Accumulate](xref:Bonsai.Reactive.Accumulate) operator increments a value by the values of items in its upstream sequence. The `Accumulate` operator emits this value when an item is received from the upstream sequence. diff --git a/articles/hardware/breakout/heartbeat.md b/articles/hardware/breakout/heartbeat.md index cc7b8609..b89d4d58 100644 --- a/articles/hardware/breakout/heartbeat.md +++ b/articles/hardware/breakout/heartbeat.md @@ -21,6 +21,6 @@ The operator generates a sequence of interval defined during using the 's `Heartbeat BeatsPerSecond` property (in our case 10 Hz). The `HeartbeatData`'s `DeviceName` property is set to "BreakoutBoard/Heartbeat". This links the `HeartbeatData` operator to the corresponding configuration operator. The -[MemberSelector](https://bonsai-rx.org/docs/api/Bonsai.Expressions.MemberSelectorBuilder.html) operator selects the +[MemberSelector](xref:Bonsai.Expressions.MemberSelectorBuilder) operator selects the `Clock` member from the `HeartbeatDataFrame` so the user can visualize the number of clock cycles that have passed for a given heartbeat pulse if they double-click the `Clock` node. \ No newline at end of file diff --git a/articles/hardware/breakout/memory-monitor.md b/articles/hardware/breakout/memory-monitor.md index b48e2956..5529d4f4 100644 --- a/articles/hardware/breakout/memory-monitor.md +++ b/articles/hardware/breakout/memory-monitor.md @@ -3,6 +3,5 @@ uid: breakout_memory-monitor title: Memory Monitor memoryMonitor: true hardware: Breakout Board -hardwareOperator: BreakoutBoard -workflowDirectory: breakout/workflow +workflowLocation: workflow --- diff --git a/articles/hardware/hs64/bno055.md b/articles/hardware/hs64/bno055.md index 18070825..fa72cb9e 100644 --- a/articles/hardware/hs64/bno055.md +++ b/articles/hardware/hs64/bno055.md @@ -5,5 +5,5 @@ bno055: true hardware: Headstage 64 bnoOperator: Bno055Data hardwareOperator: Headstage64 -workflowDirectory: hs64/workflow +workflowLocation: workflow --- diff --git a/articles/hardware/hs64/configuration.md b/articles/hardware/hs64/configuration.md index 41fbb505..723e0b97 100644 --- a/articles/hardware/hs64/configuration.md +++ b/articles/hardware/hs64/configuration.md @@ -1,19 +1,26 @@ --- uid: hs64_configuration -title: Headstage64 Configuration -hardware: Headstage64 +title: Headstage 64 Configuration +hardware: Headstage 64 configuration: true operator: ConfigureHeadstage64 dataRate: 4.1 -timeUntilFullBuffer: 500 μs -blockReadSize: 2048 +timeUntilFullBuffer: 1000 μs +blockReadSize: 4096 workflowLocation: workflow --- -## Configuring the Breakout Board and Headstage64 +## Configuring the Breakout Board and Headstage 64 -The `ConfigureBreakoutBoard` operator configures the Onix Breakout Board. In the Headstage64 example tutorial, it is configured to enable digital inputs to serve as a trigger for the Headstage64's electrical and optical stimulation and to enable monitoring of the percentage of memory occupied. This is accomplished by leaving all of the `ConfigureBreakoutBoard` properties set to their default values except its `Memory Monitor` `Enable` property is set to `True`. +The `ConfigureBreakoutBoard` operator configures the Onix Breakout Board. In the Headstage 64 example tutorial, it is +configured to enable digital inputs to serve as a trigger for the Headstage 64's electrical and optical stimulation and +to enable monitoring of the percentage of memory occupied. This is accomplished by leaving all of the +`ConfigureBreakoutBoard` properties set to their default values except its `Memory Monitor` `Enable` property is set to +`True`. -The `ConfigureHeadstage64` operator is used to configure the Headstage64. In the Headstage64 example tutorial, it is configured to enable streaming of electrophysiology data from a Rhd2164 amplifier, orientation data from the on-board Bno055 IMU, and position data from the Ts4231. This is accomplished in the Headstage64 example workflow by leaving all of the `ConfigureHeadstage64` properties set to their default values. +The `ConfigureHeadstage64` operator is used to configure the Headstage 64. In the Headstage 64 example tutorial, it is +configured to enable streaming of electrophysiology data from a Rhd2164 amplifier, orientation data from the on-board +Bno055 IMU, and position data from the Ts4231. This is accomplished in the Headstage 64 example workflow by leaving all +of the `ConfigureHeadstage64` properties set to their default values. [!INCLUDE [timestamp-info](../../../includes/configuration-timestamp.md)] \ No newline at end of file diff --git a/articles/hardware/hs64/estim.md b/articles/hardware/hs64/estim.md index 7cdf3191..a9a78c4e 100644 --- a/articles/hardware/hs64/estim.md +++ b/articles/hardware/hs64/estim.md @@ -3,7 +3,7 @@ uid: hs64_estim title: Headstage 64 Electrical Stimulation --- -The following excerpt from the Headstage64 [example workflow](xref:hs64_workflow) demonstrates electrical stimulation by +The following excerpt from the Headstage 64 [example workflow](xref:hs64_workflow) demonstrates electrical stimulation by triggering a train of pulses following a press of the △ key on the breakout board. ::: workflow diff --git a/articles/hardware/hs64/load-data.md b/articles/hardware/hs64/load-data.md index 8f163fa1..55f16c97 100644 --- a/articles/hardware/hs64/load-data.md +++ b/articles/hardware/hs64/load-data.md @@ -3,7 +3,7 @@ uid: hs64_load-data title: Load Data --- -The following python script can be used to load and plot the data produced by the Headstage64 [example workflow](xref:hs64_workflow). +The following python script can be used to load and plot the data produced by the Headstage 64 [example workflow](xref:hs64_workflow). [!code-python[](../../../workflows/hardware/hs64/load-hs64.py)] diff --git a/articles/hardware/hs64/memory-monitor.md b/articles/hardware/hs64/memory-monitor.md index 9daf24be..feb1f191 100644 --- a/articles/hardware/hs64/memory-monitor.md +++ b/articles/hardware/hs64/memory-monitor.md @@ -3,6 +3,5 @@ uid: hs64_memory-monitor title: Memory Monitor memoryMonitor: true hardware: Headstage 64 -hardwareOperator: Headstage64 -workflowDirectory: hs64/workflow +workflowLocation: workflow --- diff --git a/articles/hardware/hs64/overview.md b/articles/hardware/hs64/overview.md index 9ee889a4..de25e0c2 100644 --- a/articles/hardware/hs64/overview.md +++ b/articles/hardware/hs64/overview.md @@ -1,16 +1,17 @@ --- -uid: hs64_hs64 +uid: hs64 title: Headstage 64 --- -These are the devices available on the Headstage64: +These are the devices available on the Headstage 64: - [Rhd2164](xref:hs64_rhd2164): - - 64 electrophysiology channels for passive probes (e.g. tetrode, silicon probe, etc.) sampled at 30 kHz with 16 bit depth + - 64 electrophysiology channels for recording from passive probes (e.g. tetrode, silicon probe, etc.) sampled at 30 + kHz with 16 bit depth - Adjustable analog band-pass filter: - Lower cutoff configurable from 0.1 Hz to 500 Hz - Upper cutoff configurable from 100 Hz to 20 kHz - - Optional adjustable digital high-pass filter with cutoff configurable from 0.146 Hz to 3309 Hz + - Optional adjustable digital high-pass filter with cutoff configurable from 0.146 Hz to 3.309 kHz - Three auxiliary ADC channels sampled at 30 kHz with 16 bit depth - [Bno055](xref:hs64_bno055): 9-axis IMU for real-time, 3D orientation tracking sampled up to ~100 Hz for easy automated commutation with Open Ephys commutators - [Ts4231](xref:hs64_ts4231): 3x HTC Vive Lighthouse receivers for real-time, 3D position tracking sampled at 30 Hz per receiver in ideal conditions @@ -20,10 +21,12 @@ These are the devices available on the Headstage64: - The stimulation waveform is highly configurable via the 's properties. > [!TIP] -> For a detailed explanation of the Rhd2164 amplifier's properties, read the [datasheet](https://intantech.com/files/Intan_RHD2164_datasheet.pdf). +> Visit the +> [Headstage 64 Hardware Guide](https://open-ephys.github.io/onix-docs/Hardware%20Guide/Headstages/headstage-64/index.html) +> to learn more about the hardware such as weight, dimensions, and proper power voltages. > [!TIP] -> Visit the [Headstage64 Hardware Guide](https://open-ephys.github.io/onix-docs/Hardware%20Guide/Headstages/headstage-64/index.html) to learn more about the hardware such as weight, dimensions, and proper power voltages. +> Visit the [Headstage 64 Hardware Guide](https://open-ephys.github.io/onix-docs/Hardware%20Guide/Headstages/headstage-64/index.html) to learn more about the hardware such as weight, dimensions, and proper power voltages. -The following pages in the Headstage64 Guide provide an example workflow and a +The following pages in the Headstage 64 Guide provide an example workflow and a breakdown of its components. \ No newline at end of file diff --git a/articles/hardware/hs64/port-status.md b/articles/hardware/hs64/port-status.md index 64c20c5b..c73a2f08 100644 --- a/articles/hardware/hs64/port-status.md +++ b/articles/hardware/hs64/port-status.md @@ -5,6 +5,6 @@ hardware: Headstage 64 portStatus: true configureHardwareOperator: ConfigureHeadstage64 hardwareOperator: Headstage64 -workflowDirectory: hs64/workflow +workflowLocation: workflow --- diff --git a/articles/hardware/hs64/rhd2164.md b/articles/hardware/hs64/rhd2164.md index 96d18e16..3513874a 100644 --- a/articles/hardware/hs64/rhd2164.md +++ b/articles/hardware/hs64/rhd2164.md @@ -1,16 +1,25 @@ --- uid: hs64_rhd2164 -title: Headstage 64 Rhd2164 +title: Rhd2164 --- -The following excerpt from the Headstage64 [example workflow](xref:hs64_hs64) demonstrates the Rhd2164 functionality by streaming and saving data from the Rhd2164 device. +The following excerpt from the Headstage 64 [example workflow](xref:hs64) demonstrates the Rhd2164 functionality by +streaming and saving data from the Rhd2164 device. ::: workflow ![/workflows/hardware/hs64/rhd2164.bonsai workflow](../../../workflows/hardware/hs64/rhd2164.bonsai) ::: -The operator generates a sequence of s using the following settings: -- `BufferSize` is set to 30. Each `Rhd2164DataFrame` will contain a [1 x 30 sample] `Clock` vector, a [64 channel x 30 sample] `AmplifierData` matrix, and a [3 channel x 30 sample] `AuxData` matrix. This corresponds to 1.2 ms of data per data frame. -- The `Headstage64Data`'s `DeviceName` property is set to "Headstage64/Rhd2164". This links the `Rhd2164Data` operator to the corresponding configuration operator. +The operator generates a sequence of s using +the following properties settings: +- `BufferSize` is set to 30. Each `Rhd2164DataFrame` will contain a [1 x 30 sample] `Clock` vector, a [64 channel x 30 + sample] `AmplifierData` matrix, and a [3 channel x 30 sample] `AuxData` matrix. This corresponds to 1 ms of data per + data frame. +- `DeviceName` is set to "Headstage64/Rhd2164". This links the `Rhd2164Data` operator + to the corresponding configuration operator. -The relevant properties are extracted from the `Rhd2164DataFrame` by right-clicking the `Rhd2164Data` operator, and choosing the following **Output** members: `Clock`, `AmplifierData`, and `AuxData`. The [`MatrixWriter`](https://bonsai-rx.org/docs/api/Bonsai.Dsp.MatrixWriter.html) operators saves the selected members to files with the following format: `rhd2164-clock_.raw`, `rhd2164-amplifier_.raw`, and `rhd2164-aux_.raw`, respectively. \ No newline at end of file +The relevant members are selected from the `Rhd2164DataFrame` by right-clicking the `Rhd2164Data` operator and +choosing the following Output members: `Clock`, `AmplifierData`, and `AuxData`. The +[MatrixWriter](xref:Bonsai.Dsp.MatrixWriter) operators saves the selected members to +files with the following format: `rhd2164-clock_.raw`, `rhd2164-amplifier_.raw`, and +`rhd2164-aux_.raw`, respectively. \ No newline at end of file diff --git a/articles/hardware/hs64/ts4231.md b/articles/hardware/hs64/ts4231.md index 92639d6a..9ec8cf90 100644 --- a/articles/hardware/hs64/ts4231.md +++ b/articles/hardware/hs64/ts4231.md @@ -3,7 +3,7 @@ uid: hs64_ts4231 title: Headstage 64 Ts4231 --- -The following excerpt from the Headstage64 [example workflow](xref:hs64_hs64) demonstrates the Headstage64's position +The following excerpt from the Headstage 64 [example workflow](xref:hs64) demonstrates the Headstage 64's position tracking capabilities. ::: workflow @@ -12,19 +12,19 @@ tracking capabilities. The operator generates a sequence of [TS4231V1PositionDataFrames](xref:OpenEphys.Onix1.TS4231V1PositionDataFrame). A `TS4231V1PositionDataFrame` is emitted -when a receiver on the Headstage64 captures a sequence of 12 optical signals from a pair of lighthouses which occurs at +when a receiver on the Headstage 64 captures a sequence of 12 optical signals from a pair of lighthouses which occurs at 30 Hz. Therefore, with no occlusions, the maximum achievable sample rate is 30 Hz per receiver. There are three -receivers on the Headstage64, so `TS4231V1PositionData` can emit up to 3 `TS4231V1PositionDataFrames` in a single 30 Hz +receivers on the Headstage 64, so `TS4231V1PositionData` can emit up to 3 `TS4231V1PositionDataFrames` in a single 30 Hz sampling cycle. Of course, if occlusions cause receivers to miss optical signals, this rate will be reduced. The `TS4231V1PositionData`'s `DeviceName` property is set to "Headstage64/TS4231V1". This links the `TS4231V1PositionData` operator to the corresponding configuration operator. -The [CsvWriter](https://bonsai-rx.org/docs/api/Bonsai.IO.CsvWriter.html) operator writes the `Clock`, and `Position` +The [CsvWriter](xref:Bonsai.IO.CsvWriter) operator writes the `Clock`, and `Position` members from the `TS4231V1PositionDataFrame` to a file with the following name format: `ts4231v1__.csv`. Because `CsvWriter` is a _sink_ operator, its output sequence is equivalent to its input sequence. In other words, its output is equivalent to `TS4231V1PositionData`'s output. Therefore, it's possible to use -[MemberSelector](https://bonsai-rx.org/docs/api/Bonsai.Expressions.MemberSelectorBuilder.html) operators on the +[MemberSelector](xref:Bonsai.Expressions.MemberSelectorBuilder) operators on the `CsvWriter` to select members from `TS4231V1PositionDataFrame`. This is most easily performed by clicking the relevant members that appear by hovering over the "Output" option that appears in the context menu that appears after right-clicking the `CsvWriter` node. The member is selected in diff --git a/articles/hardware/hs64/workflow.md b/articles/hardware/hs64/workflow.md index 92bfb045..e4b38d06 100644 --- a/articles/hardware/hs64/workflow.md +++ b/articles/hardware/hs64/workflow.md @@ -1,12 +1,12 @@ --- uid: hs64_workflow -title: Headstage64 Example Workflow +title: Headstage 64 Example Workflow --- The example workflow below can by copy/pasted into the Bonsai editor using the clipboard icon in the top right. This workflow: - Captures electrophysiology data from passive probes via the RHD2164 amplifier and saves it to disk. - Captures orientation data from the Bno055 IMU and saves it to disk. -- Monitors the Headstage64 port status. +- Monitors the Headstage 64 port status. - Automatically commutates the tether if there is a proper commutator connection. - Applies electrical stimulation triggered by pressing the breakout board's △ key. - Applies optical stimulation triggered by pressing the breakout board's ◯ key. diff --git a/articles/hardware/np1e/bno055.md b/articles/hardware/np1e/bno055.md index d3514932..bf2558c0 100644 --- a/articles/hardware/np1e/bno055.md +++ b/articles/hardware/np1e/bno055.md @@ -5,5 +5,5 @@ bno055: true hardware: NeuropixelsV1e Headstage bnoOperator: PolledBno055Data hardwareOperator: NeuropixelsV1eHeadstage -workflowDirectory: np1e/overview +workflowLocation: overview --- diff --git a/articles/hardware/np1e/configuration.md b/articles/hardware/np1e/configuration.md index d13fbc32..1df75508 100644 --- a/articles/hardware/np1e/configuration.md +++ b/articles/hardware/np1e/configuration.md @@ -5,8 +5,8 @@ hardware: NeuropixelsV1e Headstage configuration: true operator: ConfigureNeuropixelsV1eHeadstage dataRate: 20.6 -timeUntilFullBuffer: 200 μs -blockReadSize: 4096 +timeUntilFullBuffer: 400 μs +blockReadSize: 8192 workflowLocation: overview --- diff --git a/articles/hardware/np1e/memory-monitor.md b/articles/hardware/np1e/memory-monitor.md index 8d870a7a..075ef25e 100644 --- a/articles/hardware/np1e/memory-monitor.md +++ b/articles/hardware/np1e/memory-monitor.md @@ -3,6 +3,5 @@ uid: np1e_memory-monitor title: Memory Monitor memoryMonitor: true hardware: Neuropixels v1e Headstage -hardwareOperator: NeuropixelsV1eHeadstage -workflowDirectory: np1e/overview +workflowLocation: overview --- \ No newline at end of file diff --git a/articles/hardware/np1e/np1.md b/articles/hardware/np1e/np1.md index 06fa72ef..0a925862 100644 --- a/articles/hardware/np1e/np1.md +++ b/articles/hardware/np1e/np1.md @@ -4,18 +4,28 @@ title: NeuropixelsV1e Headstage Neuropixels 1.0 Probe hardware: NeuropixelsV1e Headstage --- -The following excerpt from the NeuropixelsV1e Headstage [example workflow](xref:np1e) demonstrates Neuropixels 1.0 probe functionality by streaming and saving probe data. +The following excerpt from the NeuropixelsV1e Headstage [example workflow](xref:np1e) demonstrates Neuropixels 1.0 probe +functionality by streaming and saving probe data. ::: workflow ![/workflows/hardware/np1e/np1.bonsai workflow](../../../workflows/hardware/np1e/np1.bonsai) ::: -The operator generates a sequence of s using the following settings: -- `BufferSize` is set to 36. -- The `NeuropixelsV1eData`'s `DeviceName` property is set to "NeuropixelsV1eHeadstage/NeuropixelsV1e". This links the operator to the corresponding configuration operator. +The operator generates a sequence of +s using the following properties settings: +- `BufferSize` is set to 36. Therefore, each frame will contain a [1 x 36 sample] `Clock` vector, a [384 + channel x 36 sample] `SpikeData` matrix, and a [384 channel x 3 sample] `LfpData` matrix. The Neuropixels 1.0 probe + samples AP data at 30 kHz per channel (LFP data is sampled at a rate of 1/12 of the rate AP data) so this corresponds + to 1.2 ms of data. +- `DeviceName` is set to "NeuropixelsV1eHeadstage/NeuropixelsV1e". This links the `NeuropixelsV1eData` operator to the + corresponding configuration operator. -Given the settings above, each frame will contain a [1 x 36 sample] `Clock` vector, a [384 channel x - 36 sample] `SpikeData` matrix, and a [384 channel x 3 sample] `LfpData` matrix. This corresponds to 1.2 ms of data per data frame. - `LfpData` has less samples than `Clock` and `SpikeData` because `LfpData` is sampled at a lower rate; AP data is sampled at 30 kHz while LFP data is sampled at 2.5 kHz. +Given the settings above, each frame will contain a [1 x 36 sample] `Clock` vector, a [384 channel x 36 sample] +`SpikeData` matrix, and a [384 channel x 3 sample] `LfpData` matrix. This corresponds to 1.2 ms of data per data +frame. `LfpData` has less samples than `Clock` and `SpikeData` because `LfpData` is sampled at a lower rate; AP data +is sampled at 30 kHz while LFP data is sampled at 2.5 kHz. -The relevant properties are extracted from the by right-clicking the operator, and choosing the following **Output** members: `Clock`, `SpikeData`, and `LfpData`. The [`MatrixWriter`](https://bonsai-rx.org/docs/api/Bonsai.Dsp.MatrixWriter.html) operators saves the selected members to files with the following format: `np1-clock_.raw`, `np1-spike_.raw`, and `np1-lfp_.raw`, respectively. +The relevant members are selected from the `NeuropixelsV1DataFrame` by right-clicking the `NeuropixelsV1eData` operator +and choosing the following Output members: `Clock`, `SpikeData`, and `LfpData`. The +[MatrixWriter](xref:Bonsai.Dsp.MatrixWriter) operators save the selected members to files with the following format: +`np1-clock_.raw`, `np1-spike_.raw`, and `np1-lfp_.raw`, respectively. diff --git a/articles/hardware/np1e/port-status.md b/articles/hardware/np1e/port-status.md index 4997424a..27ae492e 100644 --- a/articles/hardware/np1e/port-status.md +++ b/articles/hardware/np1e/port-status.md @@ -5,5 +5,5 @@ hardware: NeuropixelsV1e Headstage portStatus: true configureHardwareOperator: ConfigureNeuropixelsV1eHeadstage hardwareOperator: NeuropixelsV1eHeadstage -workflowDirectory: np1e/overview +workflowLocation: overview --- diff --git a/articles/hardware/np2e/bno055.md b/articles/hardware/np2e/bno055.md index 3f20dfb9..c38397ce 100644 --- a/articles/hardware/np2e/bno055.md +++ b/articles/hardware/np2e/bno055.md @@ -5,5 +5,5 @@ bno055: true hardware: NeuropixelsV2e Headstage bnoOperator: PolledBno055Data hardwareOperator: NeuropixelsV2eHeadstage -workflowDirectory: np2e/overview +workflowLocation: overview --- diff --git a/articles/hardware/np2e/configuration.md b/articles/hardware/np2e/configuration.md index 6aebeca7..76c273b8 100644 --- a/articles/hardware/np2e/configuration.md +++ b/articles/hardware/np2e/configuration.md @@ -5,8 +5,8 @@ hardware: NeuropixelsV2e Headstage configuration: true operator: ConfigureNeuropixelsV2eHeadstage dataRate: 18.1 -timeUntilFullBuffer: 220 μs -blockReadSize: 4096 +timeUntilFullBuffer: 440 μs +blockReadSize: 8192 workflowLocation: overview --- diff --git a/articles/hardware/np2e/memory-monitor.md b/articles/hardware/np2e/memory-monitor.md index 52a5f566..13d837e3 100644 --- a/articles/hardware/np2e/memory-monitor.md +++ b/articles/hardware/np2e/memory-monitor.md @@ -3,6 +3,5 @@ uid: np2e_memory-monitor title: Memory Monitor memoryMonitor: true hardware: Neuropixels V2e Headstage -hardwareOperator: NeuropixelsV2eHeadstage -workflowDirectory: np2e/overview +workflowLocation: overview --- \ No newline at end of file diff --git a/articles/hardware/np2e/np2.md b/articles/hardware/np2e/np2.md index f1a41a7f..0e818557 100644 --- a/articles/hardware/np2e/np2.md +++ b/articles/hardware/np2e/np2.md @@ -4,20 +4,31 @@ title: NeuropixelsV2e Headstage Neuropixels 2.0 Probe(s) hardware: NeuropixelsV2e Headstage --- -> [!NOTE] -> The NeuropixelsV2eBeta Headstage functions nearly identically to the NeuropixelsV2e Headstage. Simply replace `NeuropixelsV2eData` with `NeuropixelsV2eBetaData` and set its `DeviceName` property to "NeuropixelsV2eBetaHeadstage/NeuropixelsV2eBeta". +> [!NOTE] +> The NeuropixelsV2eBeta Headstage functions nearly identically to the NeuropixelsV2e Headstage. Simply replace +> `NeuropixelsV2eData` with `NeuropixelsV2eBetaData` and set its `DeviceName` property to +> "NeuropixelsV2eBetaHeadstage/NeuropixelsV2eBeta". -The following excerpt from the NeuropixelsV2e Headstage [example workflow](xref:np2e) demonstrates Neuropixels 2.0 probe functionality by streaming data and saves Neuropixels 2.0 probe data. The second chain is disabled by default, assuming that only one probe is connected to the headstage. If two probes are connected, the second `NeuropixelsV2eData` chain can be enabled to stream data from both probes simultaneously. To enable, select all nodes in the disabled chain and press Ctrl+Shift+D, or click `Enable` right-clicking the selected nodes. +The following excerpt from the NeuropixelsV2e Headstage [example workflow](xref:np2e) demonstrates Neuropixels 2.0 probe +functionality by streaming data and saves Neuropixels 2.0 probe data. The second chain is disabled by default, assuming +that only one probe is connected to the headstage. If two probes are connected, the second `NeuropixelsV2eData` chain +can be enabled to stream data from both probes simultaneously. To enable, select all nodes in the disabled chain and +press Ctrl+Shift+D, or click `Enable` right-clicking the selected nodes. ::: workflow ![/workflows/hardware/np2e/np2.bonsai workflow](../../../workflows/hardware/np2e/np2.bonsai) ::: -The operator generates a sequence of s. In the NeuropixelsV2e Headstage example workflow, -- `BufferSize` is set to 30. Therefore, each frame will contain a [1 x 30 sample] `Clock` vector and a [384 channel x - 30 sample] `AmplifierData` matrix. The Neuropixels 2.0 probe samples at 30 kHz per channel so this - corresponds to 1 ms of data. -- `DeviceName` property is set to "NeuropixelsV2eHeadstage/NeuropixelsV2e". This links the `NeuropixelsV2eData` operator to the corresponding configuration operator. -- `ProbeIndex` property is set to "ProbeA". This links the data generated by this probe to the probe in port A of the headstage. +The operator generates a sequence of +s using the following properties settings: +- `BufferSize` is set to 30. Therefore, each frame will contain a [1 x 30 sample] `Clock` vector and a [384 channel x 30 + sample] `AmplifierData` matrix. The Neuropixels 2.0 probe samples at 30 kHz per channel so this corresponds to 1 ms of + data. +- `DeviceName` is set to "NeuropixelsV2eHeadstage/NeuropixelsV2e". This links the `NeuropixelsV2eData` operator to the + corresponding configuration operator. +- `ProbeIndex` is set to "ProbeA". This links the data generated by this probe to the probe in port A of the headstage. -The relevant properties are extracted from the by right-clicking the operator, and choosing the following **Output** members: `Clock`, and `AmplifierData`. The [`MatrixWriter`](https://bonsai-rx.org/docs/api/Bonsai.Dsp.MatrixWriter.html) operators saves the selected members to files with the following format: `np2-a-clock_.raw` and `np2-a-amp.raw`, respectively. +The relevant members are selected from the `NeuropixelsV2eDataFrame` by right-clicking the `NeuropixelsV2eData` +operator and choosing the following Output members: `Clock`, and `AmplifierData`. The +[MatrixWriter](xref:Bonsai.Dsp.MatrixWriter) operators save the selected members to +files with the following format: `np2-a-clock_.raw` and `np2-a-amp.raw`, respectively. diff --git a/articles/hardware/np2e/port-status.md b/articles/hardware/np2e/port-status.md index 1f141b7f..e04c088d 100644 --- a/articles/hardware/np2e/port-status.md +++ b/articles/hardware/np2e/port-status.md @@ -5,7 +5,7 @@ hardware: NeuropixelsV2e Headstage portStatus: true configureHardwareOperator: ConfigureNeuropixelsV2eHeadstage hardwareOperator: NeuropixelsV2eHeadstage -workflowDirectory: np2e/overview +workflowLocation: overview --- > [!NOTE] diff --git a/articles/hardware/rhs2116/configuration.md b/articles/hardware/rhs2116/configuration.md new file mode 100644 index 00000000..43d37ba9 --- /dev/null +++ b/articles/hardware/rhs2116/configuration.md @@ -0,0 +1,26 @@ +--- +uid: rhs2116_configuration +title: Headstage Rhs2116 Configuration +hardware: Headstage Rhs2116 +configuration: true +operator: ConfigureHeadstageRhs2116 +dataRate: 2.1 +timeUntilFullBuffer: 1 ms +blockReadSize: 4096 +workflowLocation: workflow +--- + +## Configuring the Breakout Board and Headstage Rhs2116 + +The `ConfigureBreakoutBoard` operator configures the Onix Breakout Board. In the Headstage Rhs2116 example tutorial, it is +configured to enable digital inputs to serve as a trigger for the Headstage Rhs2116's electrical and optical stimulation +and to enable monitoring of the percentage of memory occupied. This is accomplished by leaving all of the +`ConfigureBreakoutBoard` properties set to their default values except its `Memory Monitor` `Enable` property is set to +`True`. + +The `ConfigureHeadstageRhs2116` operator is used to configure the Headstage Rhs2116. In the Headstage Rhs2116 example +tutorial, it is configured to enable streaming of electrophysiology data from a Rhs2116 amplifier, orientation data from +the on-board Bno055 IMU, and position data from the Ts4231. This is accomplished in the Headstage Rhs2116 example +workflow by leaving all of the `ConfigureHeadstageRhs2116` properties set to their default values. + +[!INCLUDE [timestamp-info](../../../includes/configuration-timestamp.md)] \ No newline at end of file diff --git a/articles/hardware/rhs2116/load-data.md b/articles/hardware/rhs2116/load-data.md new file mode 100644 index 00000000..0d46af29 --- /dev/null +++ b/articles/hardware/rhs2116/load-data.md @@ -0,0 +1,14 @@ +--- +uid: rhs2116_load-data +title: Load Data +--- + +The following python script can be used to load and plot the data produced by the Headstage Rhs2116 [example workflow](xref:rhs2116). + +[!code-python[](../../../workflows/hardware/rhs2116/load-rhs2116.py)] + +> [!NOTE] +> This script will attempt to load entire files into arrays. For long recordings, data will need to +> be split into more manageable chunks by: +> - Modifying this script to partially load files +> - Modifying the workflow to cyclically create new files after a certain duration diff --git a/articles/hardware/rhs2116/memory-monitor.md b/articles/hardware/rhs2116/memory-monitor.md new file mode 100644 index 00000000..16b861ac --- /dev/null +++ b/articles/hardware/rhs2116/memory-monitor.md @@ -0,0 +1,8 @@ +--- +uid: rhs2116_memory-monitor +title: Memory Monitor +memoryMonitor: true +hardware: Headstage Rhs2116 +hardwareOperator: HeadstageRhs2116 +workflowLocation: overview +--- diff --git a/articles/hardware/rhs2116/overview.md b/articles/hardware/rhs2116/overview.md new file mode 100644 index 00000000..a78f3170 --- /dev/null +++ b/articles/hardware/rhs2116/overview.md @@ -0,0 +1,30 @@ +--- +uid: rhs2116 +uid: rhs2116 +title: Headstage Rhs2116 +--- + +These are the devices available on the Headstage Rhs2116: + +- [Rhs2116 Pair](xref:rhs2116): + - 32 electrophysiology channels that are independently configurable to record electrophysiological signals from or + deliver electrical stimuli to passive probes. + - 30193.2367 Hz sample rate with 16 bit depth + - Adjustable analog band-pass filter: + - Lower cutoff configurable from 0.1 Hz to 1 kHz + - Upper cutoff configurable from 100 Hz to 20 kHz + - Lower cutoff during recovery immediately after stimulus configurable from 0.1 Hz to 1 kHz + - Optional adjustable digital high-pass filter with cutoff configurable from 0.146 Hz to 3.309 kHz +- [Electrical Stimulation](xref:rhs2116_stimulate): Single current source with ±15V compliance voltage and automatic electrode discharge + - The stimulation waveform is highly configurable via the 's properties. + +> [!TIP] +> Visit the +> [Headstage Rhs2116 Hardware Guide](https://open-ephys.github.io/onix-docs/Hardware%20Guide/Headstages/headstage-rhs2116.html) +> to learn more about the hardware such as weight, dimensions, and proper power voltages. + +::: workflow +![/workflows/hardware/rhs2116/rhs2116.bonsai workflow](../../../workflows/hardware/rhs2116/rhs2116.bonsai) +::: + +The following pages in the Headstage Rhs2116 Guide provide a breakdown of the above example workflow. \ No newline at end of file diff --git a/articles/hardware/rhs2116/port-status.md b/articles/hardware/rhs2116/port-status.md new file mode 100644 index 00000000..37b0db8f --- /dev/null +++ b/articles/hardware/rhs2116/port-status.md @@ -0,0 +1,10 @@ +--- +uid: rhs2116_port-status +title: Headstage Rhs2116 Port Status +hardware: Headstage Rhs2116 +portStatus: true +configureHardwareOperator: ConfigureHeadstageRhs2116 +hardwareOperator: HeadstageRhs2116 +workflowLocation: overview +--- + diff --git a/articles/hardware/rhs2116/rhs2116-record.md b/articles/hardware/rhs2116/rhs2116-record.md new file mode 100644 index 00000000..645f73c9 --- /dev/null +++ b/articles/hardware/rhs2116/rhs2116-record.md @@ -0,0 +1,29 @@ +--- +uid: rhs2116_record +title: Rhs2116 Recording +--- + +The following excerpt from the HeadstageRhs2116 [example workflow](xref:rhs2116) demonstrates the Rhs2116 +recording functionality by streaming and saving data from the Rhs2116 device. + +::: workflow +![/workflows/hardware/rhs2116/rhs2116-record.bonsai workflow](../../../workflows/hardware/rhs2116/rhs2116-record.bonsai) +::: + +The operator generates a sequence of s using +the following settings: +- `BufferSize` is set to 30. Each `Rhs2116DataFrame` will contain a [1 x 30 sample] `Clock` vector, a [32 channel x 30 + sample] `AmplifierData` matrix, and a [3 channel x 30 sample] `AuxData` matrix. This corresponds to 1.2 ms of data per + data frame. +- `DeviceName` is set to "HeadstageRhs2116/Rhs2116". This links the `Rhs2116Data` + operator to the corresponding configuration operator. + +The relevant properties are extracted from the `Rhs2116DataFrame` by right-clicking the `Rhs2116Data` operator, and +choosing the following Output members: `Clock`, `AmplifierData`, and `DcData`. The + operators saves the selected members to +files with the following format: `rhs2116pair-clock_.raw`, `rhs2116pair-dc_.raw`, and +`rhs2116pair-ac_.raw`, respectively. + +> [!TIP] +> For more details about configuring the Rhs2116 and its data, read the +> [datasheet](https://intantech.com/files/Intan_RHS2116_datasheet.pdf). \ No newline at end of file diff --git a/articles/hardware/rhs2116/rhs2116-stimulate.md b/articles/hardware/rhs2116/rhs2116-stimulate.md new file mode 100644 index 00000000..36996d99 --- /dev/null +++ b/articles/hardware/rhs2116/rhs2116-stimulate.md @@ -0,0 +1,33 @@ +--- +uid: rhs2116_stimulate +title: Rhs2116 Stimulating +--- + +The following excerpt from the HeadstageRhs2116 [example workflow](xref:rhs2116) demonstrates the Rhs2116 +stimulation functionality by streaming and saving data from the Rhs2116 device. + +::: workflow +![/workflows/hardware/rhs2116/rhs2116-stimulate.bonsai workflow](../../../workflows/hardware/rhs2116/rhs2116-stimulate.bonsai) +::: + +The operator generates a sequence of s. +Although the digital inputs are sampled at 4 Mhz, these data frames are only emitted when the port status changes (i.e., +when a pin, button, or switch is toggled). In the Breakout Board example workflow, the `DigitalInput`'s `DeviceName` +property is set to "BreakoutBoard/DigitalInput". This links the `DigitalInput` operator to the corresponding +configuration operator. + + is selected from the `DigitalInputDataFrame`. It is an enumerator with values +that correspond to bit positions of the breakout board's digital port. `Buttons` connects to `Condition` which is +inspectable with the F12 hotkey. `Condition` contains a `HasFlags` operator. Because `HasFlags`'s `Value` is +set to "Triangle", its output is "True" when the selected `BreakoutButtonState` bit field contains the "Triangle" flag. +Therefore, the conditional statement evaluates as true whenever the "Triangle" button is pressed in which case the +upstream `BreakoutButtonState` element emitted by `Condition` to `Double`. `Double` emits a value of type +to +anytime it receives an item in its upstream sequence. + +When `Rhs2116StimulusTrigger` receives a double from the upstream sequence, a stimulus waveform is triggered. The +waveform can be modified by `Rhs2116StimulusTrigger`'s properties. + +> [!TIP] +> For more details about configuring the Rhs2116 and its stimulation capabilities, read the +> [datasheet](https://intantech.com/files/Intan_RHS2116_datasheet.pdf). \ No newline at end of file diff --git a/articles/hardware/ucla-miniscope-v4/bno055.md b/articles/hardware/ucla-miniscope-v4/bno055.md new file mode 100644 index 00000000..8f003aea --- /dev/null +++ b/articles/hardware/ucla-miniscope-v4/bno055.md @@ -0,0 +1,9 @@ +--- +uid: ucla-miniscope-v4_bno055 +title: UCLA Miniscope v4 Bno055 +bno055: true +hardware: UCLA Miniscope v4 +bnoOperator: PolledBno055Data +hardwareOperator: UclaMiniscopeV4 +workflowLocation: overview +--- diff --git a/articles/hardware/ucla-miniscope-v4/camera.md b/articles/hardware/ucla-miniscope-v4/camera.md new file mode 100644 index 00000000..bc0e6922 --- /dev/null +++ b/articles/hardware/ucla-miniscope-v4/camera.md @@ -0,0 +1,29 @@ +--- +uid: ucla-miniscope-v4_camera +title: UCLA Miniscope v4 Camera Data +--- + +The following excerpt from the UCLA Miniscope v4 [example workflow](xref:ucla-miniscope-v4) demonstrates the UCLA +Miniscope v4 camera-related functionality by streaming and saving data from the UCLA Miniscope v4 camera and allowing +the user to dynamically modifying camera parameters. + +::: workflow +![/workflows/hardware/ucla-miniscope-v4/camera.bonsai workflow](../../../workflows/hardware/ucla-miniscope-v4/camera.bonsai) +::: + +The operator generates a sequence of +s using the following properties settings: +- `DataType` is set to "U8". This sets the bit depth of each pixel in the image to eight (instead of ten if `DataType` + is set to "U10") +- `DeviceName` is set to "UclaMiniscopeV4/UclaMiniscopeV4". This links the `UclaMiniscopeV4CameraData` operator to the + corresponding configuration operator. + +The relevant members are selected from the `UclaMiniscopeV4CameraFrame` by right-clicking the +`UclaMiniscopeV4CameraData` operator and choosing the following Output members: `Camera`, and `Clock`. The +[VideoWriter](xref:Bonsai.Vision.VideoWriter) saves the `Camera` to a files with the following format: +`ucla-miniscope-v4-video_.avi` with "GREY" FourCC. The [MatrixWriter](xref:Bonsai.Dsp.MatrixWriter) saves the `Clock` to a +files with the following format: `ucla-miniscope-v4-clock_.raw`. + +Try adjusting the `FrameRate`, `SensorGain`, `LEDBrightness`, and `LiquidLensVoltage` properties while the workflow is +running and observing the camera data. Follow our guide if you are not sure how to observe the +camera data. \ No newline at end of file diff --git a/articles/hardware/ucla-miniscope-v4/configuration.md b/articles/hardware/ucla-miniscope-v4/configuration.md new file mode 100644 index 00000000..ae73b61c --- /dev/null +++ b/articles/hardware/ucla-miniscope-v4/configuration.md @@ -0,0 +1,18 @@ +--- +uid: ucla-miniscope-v4_configuration +title: UCLA Miniscope v4 Configuration +hardware: UCLA Miniscope v4 +configuration: true +operator: ConfigureUclaMiniscopeV4 +dataRate: 11.1 +timeUntilFullBuffer: 740 μs +blockReadSize: 8192 +workflowLocation: overview +--- + +## Configuring the UCLA Miniscope v4 +The `UclaMiniscopeV4` operator is set to configure the UCLA Miniscope v4; this can enable streaming of video data from a +Python480 sensor and orientation data from a Bno055 IMU. This is accomplished in the UCLA Miniscope v4 example workflow by +leaving all of the `UclaMiniscopeV4` properties set to their default values. + +[!INCLUDE [timestamp-info](../../../includes/configuration-timestamp.md)] \ No newline at end of file diff --git a/articles/hardware/ucla-miniscope-v4/memory-monitor.md b/articles/hardware/ucla-miniscope-v4/memory-monitor.md new file mode 100644 index 00000000..e16b378b --- /dev/null +++ b/articles/hardware/ucla-miniscope-v4/memory-monitor.md @@ -0,0 +1,8 @@ +--- +uid: ucla-miniscope-v4_memory-monitor +title: Memory Monitor +memoryMonitor: true +hardware: UCLA Miniscope v4 +workflowLocation: overview +--- + diff --git a/articles/hardware/ucla-miniscope-v4/overview.md b/articles/hardware/ucla-miniscope-v4/overview.md new file mode 100644 index 00000000..73273706 --- /dev/null +++ b/articles/hardware/ucla-miniscope-v4/overview.md @@ -0,0 +1,30 @@ +--- +uid: ucla-miniscope-v4 +title: UCLA Miniscope v4 +--- + +These are the devices available on the UCLA Miniscope v4: + +- [UCLA Miniscope v4 Camera System](xref:ucla-miniscope-v4_camera) camera sensor: + - 0.48 Megapixel CMOS 8-bit or 10-bit image sensor (608 x 608 pixels) data + - Python480 sensor for dynamic adjustment of frame rate in discrete increments: 10, 15, 20, 25 or 30 fps + - Python480 sensor for dynamic adjustment of exposure in three discrete levels + - ETL for dynamic and continuous ~500 µm adjustment of imaging depth with off-the-shelf lens configuration + - LED driver for dynamic and continuous adjustment of excitation light intensity +- [Bno055](xref:ucla-miniscope-v4_bno055): 9-axis IMU for real-time, 3D orientation tracking updated at the same frame + rate as the camera + +> [!TIP] +> Visit the [UCLA Miniscope v4 Hardware Guide](https://open-ephys.github.io/miniscope-docs/ucla-miniscope-v4/index.html) to learn more about the hardware such as weight, dimensions, and proper power voltages. + +The example workflow below can by copy/pasted into the Bonsai editor using the clipboard icon in the top right. This workflow: +- Captures image data from the UCLA Miniscope v4 Camera System and saves it to disk. +- Captures orientation data from the Bno055 IMU and saves it to disk. +- Monitors the UCLA Miniscope v4 port status. +- Automatically commutates the tether if there is a proper commutator connection. + +::: workflow +![/workflows/hardware/ucla-miniscope-v4/ucla-miniscope-v4.bonsai workflow](../../../workflows/hardware/ucla-miniscope-v4/ucla-miniscope-v4.bonsai) +::: + +The following pages in the UCLA Miniscope v4 Guide provide a breakdown of the above example workflow. \ No newline at end of file diff --git a/articles/hardware/ucla-miniscope-v4/port-status.md b/articles/hardware/ucla-miniscope-v4/port-status.md new file mode 100644 index 00000000..062ec0d2 --- /dev/null +++ b/articles/hardware/ucla-miniscope-v4/port-status.md @@ -0,0 +1,9 @@ +--- +uid: ucla-miniscope-v4_port-status +title: UCLA Miniscope v4 Port Status +hardware: UCLA Miniscope v4 +portStatus: true +configureHardwareOperator: ConfigureUclaMiniscopeV4 +hardwareOperator: UclaMiniscopeV4 +workflowLocation: overview +--- diff --git a/articles/toc.yml b/articles/toc.yml index b0bc80fe..57333b18 100644 --- a/articles/toc.yml +++ b/articles/toc.yml @@ -82,3 +82,28 @@ - name: Memory Monitor href: hardware/hs64/memory-monitor.md - href: hardware/hs64/load-data.md + - href: hardware/rhs2116/overview.md + items: + - name: Configuration + href: hardware/rhs2116/configuration.md + - name: Port Status + href: hardware/rhs2116/port-status.md + - name: Rhs2116 Electrophysiology Data + href: hardware/rhs2116/rhs2116-record.md + - name: Rhs2116 Stimulation + href: hardware/rhs2116/rhs2116-stimulate.md + - name: Memory Monitor + href: hardware/rhs2116/memory-monitor.md + - href: hardware/rhs2116/load-data.md + - href: hardware/ucla-miniscope-v4/overview.md + items: + - name: Configuration + href: hardware/ucla-miniscope-v4/configuration.md + - name: Port Status + href: hardware/ucla-miniscope-v4/port-status.md + - name: Camera Data + href: hardware/ucla-miniscope-v4/camera.md + - name: Orientation Data & Commutation + href: hardware/ucla-miniscope-v4/bno055.md + - name: Memory Monitor + href: hardware/ucla-miniscope-v4/memory-monitor.md diff --git a/includes/configuration-timestamp.md b/includes/configuration-timestamp.md index eb7e2929..2e012baf 100644 --- a/includes/configuration-timestamp.md +++ b/includes/configuration-timestamp.md @@ -5,4 +5,4 @@ accomplished using a [TimeStamp](https://bonsai-rx.org/docs/api/Bonsai.Reactive. to capture the computer's wall clock time. This `Timestamp` is saved along with `ContextTask`'s properties (e.g., `AcquisitionClockHz`, `BlockReadSize`, `BlockWriteSize`) to a csv -file (`start-time_.csv`) when the the workflow is started. \ No newline at end of file +file (`start-time_.csv`) when the the workflow is started. \ No newline at end of file diff --git a/src/onix-bonsai-onix1 b/src/onix-bonsai-onix1 index 18dd66bc..a6c4f39f 160000 --- a/src/onix-bonsai-onix1 +++ b/src/onix-bonsai-onix1 @@ -1 +1 @@ -Subproject commit 18dd66bcf586edc00506209491035ecce7142739 +Subproject commit a6c4f39fd1e55f277ef2291a039914ff03c0aaf0 diff --git a/template/partials/hardware/bno055.tmpl.partial b/template/partials/hardware/bno055.tmpl.partial index 11f3078f..11579ff4 100644 --- a/template/partials/hardware/bno055.tmpl.partial +++ b/template/partials/hardware/bno055.tmpl.partial @@ -1,5 +1,5 @@

- The following excerpt from the {{{hardware}}} example workflow demonstrates Bno055 functionality, saves Bno055 data, and commutates the {{{hardware}}} if there is a proper commutator connection. + The following excerpt from the {{{hardware}}} example workflow demonstrates Bno055 functionality, saves Bno055 data, and commutates the {{{hardware}}} if there is a proper commutator connection.

@@ -20,5 +20,5 @@
NOTE
-

To remove automated commutation, simply delete the last node by selecting it and pressing Delete.

+

The AutoCommutator operator is included in the workflow by default because it is so commonly used with {{{hardware}}}. However, it is disabled for people without a commutator to be able to run the workflow. To enable it, select the node and press Ctrl + Shift + D or select "Enable" in the context menu that appears after right-clicking the node.

\ No newline at end of file diff --git a/template/partials/hardware/memoryMonitor.tmpl.partial b/template/partials/hardware/memoryMonitor.tmpl.partial index f91b1ee4..566fe9e8 100644 --- a/template/partials/hardware/memoryMonitor.tmpl.partial +++ b/template/partials/hardware/memoryMonitor.tmpl.partial @@ -1,5 +1,5 @@

- The following excerpt from the Breakout Board example workflow demonstrates + The following excerpt from the Breakout Board example workflow demonstrates memory monitor functionality.

diff --git a/template/partials/hardware/portStatus.tmpl.partial b/template/partials/hardware/portStatus.tmpl.partial index 2dfb1f3e..b09a2dfc 100644 --- a/template/partials/hardware/portStatus.tmpl.partial +++ b/template/partials/hardware/portStatus.tmpl.partial @@ -1,8 +1,8 @@

The Onix system reports when a headstage port connection enters or leaves an aberrant state. Such aberrant states include loss - of communication lock, detection of parity or CRC error, reception of a badly formatted packet, etc.. Knowing the time + of communication lock, detection of parity or CRC error, reception of a badly formatted packet, etc. Knowing the time and type of a communication failure is a good first step to track down its cause. The following excerpt from the - {{{hardware}}} example + {{{hardware}}} example workflow demonstrates port status functionality and saves timestamped port status data.

diff --git a/workflows/hardware/np1e/configuration.bonsai b/workflows/hardware/np1e/configuration.bonsai index f466477d..11d9e7bc 100644 --- a/workflows/hardware/np1e/configuration.bonsai +++ b/workflows/hardware/np1e/configuration.bonsai @@ -109,7 +109,7 @@ - 4096 + 8192 2048 diff --git a/workflows/hardware/np1e/np1e.bonsai b/workflows/hardware/np1e/np1e.bonsai index 69ef5bf9..b05f2eba 100644 --- a/workflows/hardware/np1e/np1e.bonsai +++ b/workflows/hardware/np1e/np1e.bonsai @@ -110,7 +110,7 @@ - 4096 + 8192 2048 @@ -204,6 +204,14 @@ true + + + BreakoutBoard/MemoryMonitor + + + + PercentUsed + @@ -222,6 +230,7 @@ + \ No newline at end of file diff --git a/workflows/hardware/np2e/configuration.bonsai b/workflows/hardware/np2e/configuration.bonsai index 3d03c92c..6acd4abc 100644 --- a/workflows/hardware/np2e/configuration.bonsai +++ b/workflows/hardware/np2e/configuration.bonsai @@ -110,7 +110,7 @@ - 4096 + 8192 2048 diff --git a/workflows/hardware/np2e/np2e.bonsai b/workflows/hardware/np2e/np2e.bonsai index efc5751b..5f4c8245 100644 --- a/workflows/hardware/np2e/np2e.bonsai +++ b/workflows/hardware/np2e/np2e.bonsai @@ -111,7 +111,7 @@ - 4096 + 8192 2048 diff --git a/workflows/hardware/rhs2116/configuration.bonsai b/workflows/hardware/rhs2116/configuration.bonsai new file mode 100644 index 00000000..07beaa17 --- /dev/null +++ b/workflows/hardware/rhs2116/configuration.bonsai @@ -0,0 +1,486 @@ + + + + + + + riffa + 0 + + + + + BreakoutBoard + + BreakoutBoard/Heartbeat + 0 + true + 10 + + + BreakoutBoard/AnalogIO + 6 + false + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + Input + Input + Input + Input + Input + Input + Input + Input + Input + Input + Input + Input + + + BreakoutBoard/DigitalIO + 7 + false + + + BreakoutBoard/OutputClock + 5 + false + 1000000 + 50 + 0 + + + BreakoutBoard/HarpSyncInput + 12 + false + Breakout + + + BreakoutBoard/MemoryMonitor + 10 + true + 10 + + + + + + HeadstageRhs2116 + + HeadstageRhs2116/Rhs2116Pair + 256 + true + Off + Low100mHz + Low250Hz + High10000Hz + + + HeadstageRhs2116/StimulusTrigger + 258 + Local + eyJzcGVjaWZpY2F0aW9uIjoicHJvYmVpbnRlcmZhY2UiLCJ2ZXJzaW9uIjoiMC4yLjIxIiwicHJvYmVzIjpbeyJuZGltIjoyLCJzaV91bml0cyI6Im1tIiwiYW5ub3RhdGlvbnMiOnsibmFtZSI6IlJoczIxMTZBIiwibWFudWZhY3R1cmVyIjoiIn0sImNvbnRhY3RfYW5ub3RhdGlvbnMiOnsiQW5ub3RhdGlvbnMiOm51bGx9LCJjb250YWN0X3Bvc2l0aW9ucyI6W1sxNi4wLDMuMF0sWzE1LjAsMy4wXSxbMTQuMCwzLjBdLFsxMy4wLDMuMF0sWzEyLjAsMy4wXSxbMTEuMCwzLjBdLFsxMC4wLDMuMF0sWzkuMCwzLjBdLFs4LjAsMy4wXSxbNy4wLDMuMF0sWzYuMCwzLjBdLFs1LjAsMy4wXSxbNC4wLDMuMF0sWzMuMCwzLjBdLFsyLjAsMy4wXSxbMS4wLDMuMF1dLCJjb250YWN0X3BsYW5lX2F4ZXMiOltbWzEuMCwwLjBdLFswLjAsMS4wXV0sW1sxLjAsMC4wXSxbMC4wLDEuMF1dLFtbMS4wLDAuMF0sWzAuMCwxLjBdXSxbWzEuMCwwLjBdLFswLjAsMS4wXV0sW1sxLjAsMC4wXSxbMC4wLDEuMF1dLFtbMS4wLDAuMF0sWzAuMCwxLjBdXSxbWzEuMCwwLjBdLFswLjAsMS4wXV0sW1sxLjAsMC4wXSxbMC4wLDEuMF1dLFtbMS4wLDAuMF0sWzAuMCwxLjBdXSxbWzEuMCwwLjBdLFswLjAsMS4wXV0sW1sxLjAsMC4wXSxbMC4wLDEuMF1dLFtbMS4wLDAuMF0sWzAuMCwxLjBdXSxbWzEuMCwwLjBdLFswLjAsMS4wXV0sW1sxLjAsMC4wXSxbMC4wLDEuMF1dLFtbMS4wLDAuMF0sWzAuMCwxLjBdXSxbWzEuMCwwLjBdLFswLjAsMS4wXV1dLCJjb250YWN0X3NoYXBlcyI6WyJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiXSwiY29udGFjdF9zaGFwZV9wYXJhbXMiOlt7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfV0sInByb2JlX3BsYW5hcl9jb250b3VyIjpbWzAuNSwyLjVdLFsxNi41LDIuNV0sWzE2LjUsMy41XSxbMC41LDMuNV0sWzAuNSwyLjVdXSwiZGV2aWNlX2NoYW5uZWxfaW5kaWNlcyI6WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTVdLCJjb250YWN0X2lkcyI6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1Il0sInNoYW5rX2lkcyI6WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiXX0seyJuZGltIjoyLCJzaV91bml0cyI6Im1tIiwiYW5ub3RhdGlvbnMiOnsibmFtZSI6IlJoczIxMTZCIiwibWFudWZhY3R1cmVyIjoiIn0sImNvbnRhY3RfYW5ub3RhdGlvbnMiOnsiQW5ub3RhdGlvbnMiOm51bGx9LCJjb250YWN0X3Bvc2l0aW9ucyI6W1sxLjAsMS4wXSxbMi4wLDEuMF0sWzMuMCwxLjBdLFs0LjAsMS4wXSxbNS4wLDEuMF0sWzYuMCwxLjBdLFs3LjAsMS4wXSxbOC4wLDEuMF0sWzkuMCwxLjBdLFsxMC4wLDEuMF0sWzExLjAsMS4wXSxbMTIuMCwxLjBdLFsxMy4wLDEuMF0sWzE0LjAsMS4wXSxbMTUuMCwxLjBdLFsxNi4wLDEuMF1dLCJjb250YWN0X3BsYW5lX2F4ZXMiOltbWzEuMCwwLjBdLFswLjAsMS4wXV0sW1sxLjAsMC4wXSxbMC4wLDEuMF1dLFtbMS4wLDAuMF0sWzAuMCwxLjBdXSxbWzEuMCwwLjBdLFswLjAsMS4wXV0sW1sxLjAsMC4wXSxbMC4wLDEuMF1dLFtbMS4wLDAuMF0sWzAuMCwxLjBdXSxbWzEuMCwwLjBdLFswLjAsMS4wXV0sW1sxLjAsMC4wXSxbMC4wLDEuMF1dLFtbMS4wLDAuMF0sWzAuMCwxLjBdXSxbWzEuMCwwLjBdLFswLjAsMS4wXV0sW1sxLjAsMC4wXSxbMC4wLDEuMF1dLFtbMS4wLDAuMF0sWzAuMCwxLjBdXSxbWzEuMCwwLjBdLFswLjAsMS4wXV0sW1sxLjAsMC4wXSxbMC4wLDEuMF1dLFtbMS4wLDAuMF0sWzAuMCwxLjBdXSxbWzEuMCwwLjBdLFswLjAsMS4wXV1dLCJjb250YWN0X3NoYXBlcyI6WyJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiXSwiY29udGFjdF9zaGFwZV9wYXJhbXMiOlt7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfV0sInByb2JlX3BsYW5hcl9jb250b3VyIjpbWzAuNSwwLjVdLFsxNi41LDAuNV0sWzE2LjUsMS41XSxbMC41LDEuNV0sWzAuNSwwLjVdXSwiZGV2aWNlX2NoYW5uZWxfaW5kaWNlcyI6WzE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxXSwiY29udGFjdF9pZHMiOlsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSJdLCJzaGFua19pZHMiOlsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIl19XX0= + + + + 1 + true + 0 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 3000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 6000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 9000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 12000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 15000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 18000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 21000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 24000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 27000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 30000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 33000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 36000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 39000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 42000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 45000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 48000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 51000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 54000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 57000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 60000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 63000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 66000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 69000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 72000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 75000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 78000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 81000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 84000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 87000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 90000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 93000 + 0 + 100 + 3 + 100 + 3 + 0 + + + Step10000nA + + + PortA + + + + + + 2048 + 2048 + + + + + + + start-time_.csv + false + false + FileCount + false + Timestamp,Value.AcquisitionClockHz,Value.BlockReadSize,Value.BlockWriteSize + + + + + + + + + + + \ No newline at end of file diff --git a/workflows/hardware/rhs2116/load-rhs2116.py b/workflows/hardware/rhs2116/load-rhs2116.py new file mode 100644 index 00000000..f5f479fc --- /dev/null +++ b/workflows/hardware/rhs2116/load-rhs2116.py @@ -0,0 +1,62 @@ +import os +import numpy as np +import matplotlib.pyplot as plt + +plt.close('all') + +#%% Set Parameters for Loading Data + +suffix = '0'; # Change to match file names' suffix +# Change this to the directory of your data. In this example, data's in the same directory as this data loading Python script +data_directory = os.path.dirname(os.path.realpath(__file__)) +start_t = 1.0 # when to start plotting data (seconds) +dur = 1.0 # duration of data to plot + +#%% Metadata + +dt = {'names': ('time', 'acq_clk_hz', 'block_read_sz', 'block_write_sz'), + 'formats': ('datetime64[us]', 'u4', 'u4', 'u4')} +meta = np.genfromtxt(os.path.join(data_directory, f'start-time_{suffix}.csv'), delimiter=',', dtype=dt) +print(f"Recording was started at {meta['time']} GMT") + +#%% RHS2116 ephys data + +start_t = 1.0 # when to start plotting data (seconds) +dur = 1.0 # duration of data to plot + +rhs2116 = {} +rhs2116['time'] = np.fromfile(os.path.join(data_directory, f'rhs2116-clock_{suffix}.raw'), dtype=np.uint64) / meta['acq_clk_hz'] +b = np.bitwise_and(rhs2116['time'] >= start_t, rhs2116['time'] < start_t + dur) +time = rhs2116['time'][b] + +# AC data +rhs2116['ac'] = np.reshape(np.fromfile(os.path.join(data_directory, f'rhs2116-ac_{suffix}.raw'), dtype=np.uint16), (-1, 32)) +rhs2116_ac = rhs2116['ac'][b, :].astype(np.double) +bit_depth = 16 +scalar = 0.195 +offset = (2 ** (bit_depth - 1)) * scalar +rhs2116_ac_converted = rhs2116_ac * scalar - offset + np.arange(rhs2116_ac.shape[1])[None, :] * offset / 4 + +# DC data +rhs2116['dc'] = np.reshape(np.fromfile(os.path.join(data_directory, f'rhs2116-dc_{suffix}.raw'), dtype=np.uint16), (-1, 32)) +rhs2116_dc = rhs2116['dc'][b, :].astype(np.double) +bit_depth = 10 +scalar = -19.23 +offset = (2 ** (bit_depth - 1)) * -scalar +rhs2116_dc_converted = rhs2116_dc * scalar - offset + np.arange(rhs2116_dc.shape[1])[None, :] * offset / 4 + +def setup_subplot(ax): + ax.set_yticks([]) + ax.set_ylabel("channel") + ax.set_xlabel("time (s)") + +fig, (ax_ac, ax_dc) = plt.subplots(nrows=1, ncols=2, figsize=(10,8)) +ax_ac.plot(time, rhs2116_ac_converted, 'k', linewidth=0.25) +ax_ac.set_title('RHS2116 AC Data') +setup_subplot(ax_ac) +ax_dc.plot(time, rhs2116_dc_converted, 'k', linewidth=0.25) +ax_dc.set_title('RHS2116 DC Data') +setup_subplot(ax_dc) +fig.suptitle('RHS2116 Data') +plt.tight_layout() +plt.show() \ No newline at end of file diff --git a/workflows/hardware/rhs2116/memory-monitor.bonsai b/workflows/hardware/rhs2116/memory-monitor.bonsai new file mode 100644 index 00000000..7e2cccd7 --- /dev/null +++ b/workflows/hardware/rhs2116/memory-monitor.bonsai @@ -0,0 +1,21 @@ + + + + + + + BreakoutBoard/MemoryMonitor + + + + PercentUsed + + + + + + + \ No newline at end of file diff --git a/workflows/hardware/rhs2116/port-status.bonsai b/workflows/hardware/rhs2116/port-status.bonsai new file mode 100644 index 00000000..30ae8a86 --- /dev/null +++ b/workflows/hardware/rhs2116/port-status.bonsai @@ -0,0 +1,32 @@ + + + + + + + HeadstageRhs2116/LinkController + + + + + + + port-status_.csv + false + false + FileCount + false + Timestamp,Value + + + + + + + + \ No newline at end of file diff --git a/workflows/hardware/rhs2116/rhs2116-record.bonsai b/workflows/hardware/rhs2116/rhs2116-record.bonsai new file mode 100644 index 00000000..726890ad --- /dev/null +++ b/workflows/hardware/rhs2116/rhs2116-record.bonsai @@ -0,0 +1,58 @@ + + + + + + + HeadstageRhs2116/Rhs2116Pair + 30 + + + + Clock + + + + rhs2116pair-clock_.raw + FileCount + false + ColumnMajor + + + + DCData + + + + rhs2116pair-dc_.raw + FileCount + false + ColumnMajor + + + + AmplifierData + + + + rhs2116pair-ac_.raw + FileCount + false + ColumnMajor + + + + + + + + + + + + + \ No newline at end of file diff --git a/workflows/hardware/rhs2116/rhs2116-stimulate.bonsai b/workflows/hardware/rhs2116/rhs2116-stimulate.bonsai new file mode 100644 index 00000000..7f761c91 --- /dev/null +++ b/workflows/hardware/rhs2116/rhs2116-stimulate.bonsai @@ -0,0 +1,54 @@ + + + + + + + BreakoutBoard/DigitalIO + + + + Buttons + + + + + + Source1 + + + + Square + + + + + + + + + + + + + 0 + + + + + HeadstageRhs2116/StimulusTrigger + + + + + + + + + + + \ No newline at end of file diff --git a/workflows/hardware/rhs2116/rhs2116.bonsai b/workflows/hardware/rhs2116/rhs2116.bonsai new file mode 100644 index 00000000..b7f2185b --- /dev/null +++ b/workflows/hardware/rhs2116/rhs2116.bonsai @@ -0,0 +1,600 @@ + + + + + + + riffa + 0 + + + + + BreakoutBoard + + BreakoutBoard/Heartbeat + 0 + true + 10 + + + BreakoutBoard/AnalogIO + 6 + false + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + Input + Input + Input + Input + Input + Input + Input + Input + Input + Input + Input + Input + + + BreakoutBoard/DigitalIO + 7 + false + + + BreakoutBoard/OutputClock + 5 + false + 1000000 + 50 + 0 + + + BreakoutBoard/HarpSyncInput + 12 + false + Breakout + + + BreakoutBoard/MemoryMonitor + 10 + true + 10 + + + + + + HeadstageRhs2116 + + HeadstageRhs2116/Rhs2116Pair + 256 + true + Off + Low100mHz + Low250Hz + High10000Hz + + + HeadstageRhs2116/StimulusTrigger + 258 + Local + eyJzcGVjaWZpY2F0aW9uIjoicHJvYmVpbnRlcmZhY2UiLCJ2ZXJzaW9uIjoiMC4yLjIxIiwicHJvYmVzIjpbeyJuZGltIjoyLCJzaV91bml0cyI6Im1tIiwiYW5ub3RhdGlvbnMiOnsibmFtZSI6IlJoczIxMTZBIiwibWFudWZhY3R1cmVyIjoiIn0sImNvbnRhY3RfYW5ub3RhdGlvbnMiOnsiQW5ub3RhdGlvbnMiOm51bGx9LCJjb250YWN0X3Bvc2l0aW9ucyI6W1sxNi4wLDMuMF0sWzE1LjAsMy4wXSxbMTQuMCwzLjBdLFsxMy4wLDMuMF0sWzEyLjAsMy4wXSxbMTEuMCwzLjBdLFsxMC4wLDMuMF0sWzkuMCwzLjBdLFs4LjAsMy4wXSxbNy4wLDMuMF0sWzYuMCwzLjBdLFs1LjAsMy4wXSxbNC4wLDMuMF0sWzMuMCwzLjBdLFsyLjAsMy4wXSxbMS4wLDMuMF1dLCJjb250YWN0X3BsYW5lX2F4ZXMiOltbWzEuMCwwLjBdLFswLjAsMS4wXV0sW1sxLjAsMC4wXSxbMC4wLDEuMF1dLFtbMS4wLDAuMF0sWzAuMCwxLjBdXSxbWzEuMCwwLjBdLFswLjAsMS4wXV0sW1sxLjAsMC4wXSxbMC4wLDEuMF1dLFtbMS4wLDAuMF0sWzAuMCwxLjBdXSxbWzEuMCwwLjBdLFswLjAsMS4wXV0sW1sxLjAsMC4wXSxbMC4wLDEuMF1dLFtbMS4wLDAuMF0sWzAuMCwxLjBdXSxbWzEuMCwwLjBdLFswLjAsMS4wXV0sW1sxLjAsMC4wXSxbMC4wLDEuMF1dLFtbMS4wLDAuMF0sWzAuMCwxLjBdXSxbWzEuMCwwLjBdLFswLjAsMS4wXV0sW1sxLjAsMC4wXSxbMC4wLDEuMF1dLFtbMS4wLDAuMF0sWzAuMCwxLjBdXSxbWzEuMCwwLjBdLFswLjAsMS4wXV1dLCJjb250YWN0X3NoYXBlcyI6WyJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiXSwiY29udGFjdF9zaGFwZV9wYXJhbXMiOlt7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfV0sInByb2JlX3BsYW5hcl9jb250b3VyIjpbWzAuNSwyLjVdLFsxNi41LDIuNV0sWzE2LjUsMy41XSxbMC41LDMuNV0sWzAuNSwyLjVdXSwiZGV2aWNlX2NoYW5uZWxfaW5kaWNlcyI6WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTVdLCJjb250YWN0X2lkcyI6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1Il0sInNoYW5rX2lkcyI6WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiXX0seyJuZGltIjoyLCJzaV91bml0cyI6Im1tIiwiYW5ub3RhdGlvbnMiOnsibmFtZSI6IlJoczIxMTZCIiwibWFudWZhY3R1cmVyIjoiIn0sImNvbnRhY3RfYW5ub3RhdGlvbnMiOnsiQW5ub3RhdGlvbnMiOm51bGx9LCJjb250YWN0X3Bvc2l0aW9ucyI6W1sxLjAsMS4wXSxbMi4wLDEuMF0sWzMuMCwxLjBdLFs0LjAsMS4wXSxbNS4wLDEuMF0sWzYuMCwxLjBdLFs3LjAsMS4wXSxbOC4wLDEuMF0sWzkuMCwxLjBdLFsxMC4wLDEuMF0sWzExLjAsMS4wXSxbMTIuMCwxLjBdLFsxMy4wLDEuMF0sWzE0LjAsMS4wXSxbMTUuMCwxLjBdLFsxNi4wLDEuMF1dLCJjb250YWN0X3BsYW5lX2F4ZXMiOltbWzEuMCwwLjBdLFswLjAsMS4wXV0sW1sxLjAsMC4wXSxbMC4wLDEuMF1dLFtbMS4wLDAuMF0sWzAuMCwxLjBdXSxbWzEuMCwwLjBdLFswLjAsMS4wXV0sW1sxLjAsMC4wXSxbMC4wLDEuMF1dLFtbMS4wLDAuMF0sWzAuMCwxLjBdXSxbWzEuMCwwLjBdLFswLjAsMS4wXV0sW1sxLjAsMC4wXSxbMC4wLDEuMF1dLFtbMS4wLDAuMF0sWzAuMCwxLjBdXSxbWzEuMCwwLjBdLFswLjAsMS4wXV0sW1sxLjAsMC4wXSxbMC4wLDEuMF1dLFtbMS4wLDAuMF0sWzAuMCwxLjBdXSxbWzEuMCwwLjBdLFswLjAsMS4wXV0sW1sxLjAsMC4wXSxbMC4wLDEuMF1dLFtbMS4wLDAuMF0sWzAuMCwxLjBdXSxbWzEuMCwwLjBdLFswLjAsMS4wXV1dLCJjb250YWN0X3NoYXBlcyI6WyJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiLCJjaXJjbGUiXSwiY29udGFjdF9zaGFwZV9wYXJhbXMiOlt7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfSx7InJhZGl1cyI6MC4zLCJ3aWR0aCI6bnVsbCwiaGVpZ2h0IjpudWxsfV0sInByb2JlX3BsYW5hcl9jb250b3VyIjpbWzAuNSwwLjVdLFsxNi41LDAuNV0sWzE2LjUsMS41XSxbMC41LDEuNV0sWzAuNSwwLjVdXSwiZGV2aWNlX2NoYW5uZWxfaW5kaWNlcyI6WzE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxXSwiY29udGFjdF9pZHMiOlsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSJdLCJzaGFua19pZHMiOlsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIl19XX0= + + + + 1 + true + 0 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 3000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 6000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 9000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 12000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 15000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 18000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 21000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 24000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 27000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 30000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 33000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 36000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 39000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 42000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 45000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 48000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 51000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 54000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 57000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 60000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 63000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 66000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 69000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 72000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 75000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 78000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 81000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 84000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 87000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 90000 + 0 + 100 + 3 + 100 + 3 + 0 + + + 1 + true + 93000 + 0 + 100 + 3 + 100 + 3 + 0 + + + Step10000nA + + + PortA + + + + + + 2048 + 2048 + + + + + + + start-time_.csv + false + false + FileCount + false + Timestamp,Value.AcquisitionClockHz,Value.BlockReadSize,Value.BlockWriteSize + + + + HeadstageRhs2116/LinkController + + + + + + + port-status_.csv + false + false + FileCount + false + Timestamp,Value + + + + BreakoutBoard/DigitalIO + + + + Buttons + + + + + + Source1 + + + + Square + + + + + + + + + + + + + 0 + + + + + HeadstageRhs2116/StimulusTrigger + + + + + HeadstageRhs2116/Rhs2116Pair + 30 + + + + Clock + + + + rhs2116pair-clock_.raw + FileCount + false + ColumnMajor + + + + DCData + + + + rhs2116pair-dc_.raw + FileCount + false + ColumnMajor + + + + AmplifierData + + + + rhs2116pair-ac_.raw + FileCount + false + ColumnMajor + + + + + BreakoutBoard/MemoryMonitor + + + + PercentUsed + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/workflows/hardware/ucla-miniscope-v4/bno055.bonsai b/workflows/hardware/ucla-miniscope-v4/bno055.bonsai new file mode 100644 index 00000000..1568dcb3 --- /dev/null +++ b/workflows/hardware/ucla-miniscope-v4/bno055.bonsai @@ -0,0 +1,44 @@ + + + + + + + UclaMiniscopeV4/PolledBno055 + All + + + + bno055_.csv + false + false + FileCount + false + Clock,EulerAngle,Quaternion,Acceleration,Gravity,Temperature + + + Quaternion + + + + + 0 + 0 + 1 + + true + COM4 + + + + + + + + + + \ No newline at end of file diff --git a/workflows/hardware/ucla-miniscope-v4/camera.bonsai b/workflows/hardware/ucla-miniscope-v4/camera.bonsai new file mode 100644 index 00000000..d8daf9e9 --- /dev/null +++ b/workflows/hardware/ucla-miniscope-v4/camera.bonsai @@ -0,0 +1,53 @@ + + + + + + + UclaMiniscopeV4/UclaMiniscopeV4 + U8 + + + + Image + + + + video_.avi + FileCount + true + false + GREY + 30 + + 0 + 0 + + NearestNeighbor + + + + Clock + + + + video-clock_.raw + FileCount + false + ColumnMajor + + + + + + + + + + + \ No newline at end of file diff --git a/workflows/hardware/ucla-miniscope-v4/configuration.bonsai b/workflows/hardware/ucla-miniscope-v4/configuration.bonsai new file mode 100644 index 00000000..5e9df2ac --- /dev/null +++ b/workflows/hardware/ucla-miniscope-v4/configuration.bonsai @@ -0,0 +1,131 @@ + + + + + + + riffa + 0 + + + + + BreakoutBoard + + BreakoutBoard/Heartbeat + 0 + true + 10 + + + BreakoutBoard/AnalogIO + 6 + false + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + Input + Input + Input + Input + Input + Input + Input + Input + Input + Input + Input + Input + + + BreakoutBoard/DigitalIO + 7 + false + + + BreakoutBoard/OutputClock + 5 + false + 1000000 + 50 + 0 + + + BreakoutBoard/HarpSyncInput + 12 + false + Breakout + + + BreakoutBoard/MemoryMonitor + 10 + false + 10 + + + + + + UclaMiniscopeV4 + + UclaMiniscopeV4/UclaMiniscopeV4 + 256 + true + Fps30Hz + High + false + 30 + 50 + + + UclaMiniscopeV4/PolledBno055 + 257 + true + ZYX + MirrorZ MirrorY MirrorX + + PortA + 5.2 + + + + + 8192 + 2048 + + + + + + + start-time_.csv + false + false + FileCount + true + Timestamp,Value.AcquisitionClockHz,Value.BlockReadSize,Value.BlockWriteSize + + + + + + + + + + + \ No newline at end of file diff --git a/workflows/hardware/ucla-miniscope-v4/memory-monitor.bonsai b/workflows/hardware/ucla-miniscope-v4/memory-monitor.bonsai new file mode 100644 index 00000000..89e79b2c --- /dev/null +++ b/workflows/hardware/ucla-miniscope-v4/memory-monitor.bonsai @@ -0,0 +1,19 @@ + + + + + + + + + PercentUsed + + + + + + + \ No newline at end of file diff --git a/workflows/hardware/ucla-miniscope-v4/port-status.bonsai b/workflows/hardware/ucla-miniscope-v4/port-status.bonsai new file mode 100644 index 00000000..50afef2d --- /dev/null +++ b/workflows/hardware/ucla-miniscope-v4/port-status.bonsai @@ -0,0 +1,32 @@ + + + + + + + UclaMiniscopeV4/PortController + + + + + + + port-status_.csv + false + false + FileCount + false + Timestamp,Value.Clock,Value.StatusCode,Value.SerdesLocked,Value.SerdesPass + + + + + + + + \ No newline at end of file diff --git a/workflows/hardware/ucla-miniscope-v4/ucla-miniscope-v4.bonsai b/workflows/hardware/ucla-miniscope-v4/ucla-miniscope-v4.bonsai new file mode 100644 index 00000000..c022a40f --- /dev/null +++ b/workflows/hardware/ucla-miniscope-v4/ucla-miniscope-v4.bonsai @@ -0,0 +1,230 @@ + + + + + + + riffa + 0 + + + + + BreakoutBoard + + BreakoutBoard/Heartbeat + 0 + true + 10 + + + BreakoutBoard/AnalogIO + 6 + false + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + TenVolts + Input + Input + Input + Input + Input + Input + Input + Input + Input + Input + Input + Input + + + BreakoutBoard/DigitalIO + 7 + false + + + BreakoutBoard/OutputClock + 5 + false + 1000000 + 50 + 0 + + + BreakoutBoard/HarpSyncInput + 12 + false + Breakout + + + BreakoutBoard/MemoryMonitor + 10 + false + 10 + + + + + + UclaMiniscopeV4 + + UclaMiniscopeV4/UclaMiniscopeV4 + 256 + true + Fps30Hz + High + false + 30 + 24.4 + + + UclaMiniscopeV4/PolledBno055 + 257 + true + ZYX + MirrorZ MirrorY MirrorX + + PortA + + + + + + 8192 + 2048 + + + + + + + start-time_.csv + false + false + FileCount + true + Timestamp,Value.AcquisitionClockHz,Value.BlockReadSize,Value.BlockWriteSize + + + + UclaMiniscopeV4/PortController + + + + + + + port-status_.csv + false + false + FileCount + false + Timestamp,Value.Clock,Value.StatusCode,Value.SerdesLocked,Value.SerdesPass + + + + UclaMiniscopeV4/UclaMiniscopeV4 + U8 + + + + Image + + + + ucla-miniscope-v4-video_.avi + FileCount + true + false + GREY + 30 + + 0 + 0 + + NearestNeighbor + + + + Clock + + + + ucla-miniscope-v4-clock_.raw + FileCount + false + ColumnMajor + + + + + UclaMiniscopeV4/PolledBno055 + All + + + + bno055_.csv + false + false + FileCount + false + Clock,EulerAngle,Quaternion,Acceleration,Gravity,Temperature + + + Quaternion + + + + + 0 + -1 + 0 + + true + COM4 + + + + + BreakoutBoard/MemoryMonitor + + + + PercentUsed + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 4e042d944ad7cf0786649ce1ae1ecdef5e8ec60f Mon Sep 17 00:00:00 2001 From: bparks13 Date: Mon, 23 Dec 2024 15:15:22 -0500 Subject: [PATCH 2/5] Add Rhs2116 GUI documentation --- articles/hardware/np2e/gui.md | 2 +- articles/hardware/rhs2116/configuration.md | 8 +- articles/hardware/rhs2116/gui.md | 273 ++++++++++++++++++ articles/hardware/rhs2116/overview.md | 2 +- .../hardware/rhs2116/rhs2116-stimulate.md | 5 +- articles/toc.yml | 2 + .../rhs2116-gui-tut/bonsai-where-to-click.png | Bin 0 -> 71520 bytes .../channel-selection-7-8-23-24.png | Bin 0 -> 12480 bytes images/rhs2116-gui-tut/define-stimuli-a.png | Bin 0 -> 11277 bytes ...define-stimuli-read-applied-parameters.png | Bin 0 -> 11766 bytes .../define-stimuli-read-defaults.png | Bin 0 -> 11047 bytes images/rhs2116-gui-tut/gui-no-waveforms.png | Bin 0 -> 31538 bytes images/rhs2116-gui-tut/table.png | Bin 0 -> 22726 bytes .../rhs2116-gui-tut/waveforms-7-8-23-24-a.png | Bin 0 -> 44799 bytes img-src/rhs2116-gui/bonsai-where-to-click.xcf | Bin 0 -> 213731 bytes 15 files changed, 285 insertions(+), 7 deletions(-) create mode 100644 articles/hardware/rhs2116/gui.md create mode 100644 images/rhs2116-gui-tut/bonsai-where-to-click.png create mode 100644 images/rhs2116-gui-tut/channel-selection-7-8-23-24.png create mode 100644 images/rhs2116-gui-tut/define-stimuli-a.png create mode 100644 images/rhs2116-gui-tut/define-stimuli-read-applied-parameters.png create mode 100644 images/rhs2116-gui-tut/define-stimuli-read-defaults.png create mode 100644 images/rhs2116-gui-tut/gui-no-waveforms.png create mode 100644 images/rhs2116-gui-tut/table.png create mode 100644 images/rhs2116-gui-tut/waveforms-7-8-23-24-a.png create mode 100644 img-src/rhs2116-gui/bonsai-where-to-click.xcf diff --git a/articles/hardware/np2e/gui.md b/articles/hardware/np2e/gui.md index 6a2c37d5..63590c6e 100644 --- a/articles/hardware/np2e/gui.md +++ b/articles/hardware/np2e/gui.md @@ -38,7 +38,7 @@ In addition to the absolute number of channels, there are other restrictions in ### Keeping or discarding configuration settings -While the GUI is open, any changes to the configuration settings can be freely modified and will not affect the configuration unless `Okay` is pressed. This includes all aspects of the configuration, such as which electrodes are enabled, the chosen reference channel, and the probe calibration file. +While the GUI is open, any changes to the configuration settings can be freely modified and will not affect the configuration unless Ok is pressed. This includes all aspects of the configuration, such as which electrodes are enabled, the chosen reference channel, and the probe calibration file. > [!NOTE] > The hardware is not actually configured until the workflow starts. diff --git a/articles/hardware/rhs2116/configuration.md b/articles/hardware/rhs2116/configuration.md index 43d37ba9..e2e52cd1 100644 --- a/articles/hardware/rhs2116/configuration.md +++ b/articles/hardware/rhs2116/configuration.md @@ -7,7 +7,7 @@ operator: ConfigureHeadstageRhs2116 dataRate: 2.1 timeUntilFullBuffer: 1 ms blockReadSize: 4096 -workflowLocation: workflow +workflowLocation: overview --- ## Configuring the Breakout Board and Headstage Rhs2116 @@ -23,4 +23,8 @@ tutorial, it is configured to enable streaming of electrophysiology data from a the on-board Bno055 IMU, and position data from the Ts4231. This is accomplished in the Headstage Rhs2116 example workflow by leaving all of the `ConfigureHeadstageRhs2116` properties set to their default values. -[!INCLUDE [timestamp-info](../../../includes/configuration-timestamp.md)] \ No newline at end of file +[!INCLUDE [timestamp-info](../../../includes/configuration-timestamp.md)] + +> [!TIP] +> For additional details on how to configure the headstage, as well as how to +> set stimulus waveforms, check out the page. \ No newline at end of file diff --git a/articles/hardware/rhs2116/gui.md b/articles/hardware/rhs2116/gui.md new file mode 100644 index 00000000..252643f9 --- /dev/null +++ b/articles/hardware/rhs2116/gui.md @@ -0,0 +1,273 @@ +--- +uid: rhs2116_gui +title: Rhs2116 GUI +--- + +The `Rhs2116` headstage has a graphical user interface when the `OpenEphys.Onix1.Design` package is +downloaded. For more information on how to install that library, check out the + page. + +## Overview + +The GUI for `Rhs2116Headstage` allows for an easy way to change settings, as well as the ability to +set waveform parameters and visualize the effect. From the GUI, you can: + +- Modify stimulus parameters for all 32 channels simultaneously + - Visualize waveforms across all channels + - Select specific channels using a ProbeInterface representation of the hardware + - Remove or add stimulus waveform parameters to one or more channels at a time +- Change filter settings for recording data + - See the page for more information on filter settings + +This configuration GUI can be accessed by double-clicking on the `ConfigureHeadstageRhs2116` +operator. The remainder of this page will describe the functionality of the window that opens, +allowing for easy configuring of the hardware. + +

+ +

+ +### Stimulus parameters + +All of the parameters are applied in real-world units that the user will be familiar with (i.e., +milliseconds and microamps). On the backend, the GUI will take these units and convert them into raw +samples which is how they will be written to the hardware. Since the conversion between real units +and samples is not always exact, there might be some discrepancies between the value that the user +initially inputs and the value that is automatically updated. Values will be automatically updated +whenever the focus moves away from the current text box (i.e., the user presses Tab or +clicks somewhere outside of the text box). + +Below is a table listing the various parameters that can be applied to each channel, as well as the +resolution and any other relevant limits for each parameter. + +| Parameter Name | Minimum Value | Maximum Value | Resolution | Remarks | +| ----- | ---- | ---- | ---- | ---- | +| `Biphasic Symmetric` | Unchecked | Checked | n/a | If checked, the positive and negative segments of each pulse will be symmetric | +| `Anodic First` | Unchecked | Checked | n/a | If checked, the anodic (positive) segment will be delivered first for every pulse | +| `Delay` | 0 ms | n/a | 0.03312 ms | Time between a trigger being received and the first pulse is delivered | +| `Inter-Pulse` | 0 ms | n/a | 0.03312 ms | Time between positive-to-negative (or negative-to-positive) stimulation for a single pulse | +| `Amplitude` | 0 µA | 2550 µA | Dependent on the step size | Type in the requested amplitude, and underneath is the actual value that will be applied on hardware based on the current step size | +| `Step Size` | 0.01 µA | 25 µA | [Step Size](xref:OpenEphys.Onix1.Rhs2116StepSize) | Automatically calculated to optimize difference between requested and actual amplitude | +| `Pulse Width` | 0.03312 ms | n/a | 0.03312 ms | Width of each positive or negative portion of the stimulus | +| `Inter-Stimulus` | 0.03312 ms | n/a | 0.03312 ms | Time between successive pulses. Can be 0 if there is only one pulse | +| `Number of Pulses` | 1 | n/a | 1 | Number of pulses that are sent per trigger received | + +### ProbeInterface + +The `Rhs2116Headstage` GUI uses +[ProbeInterface](https://probeinterface.readthedocs.io/en/main/index.html) as the format to draw the +probes and electrodes visually. For more information on ProbeInterface and the resulting JSON file, +check out their [format +specifications](https://probeinterface.readthedocs.io/en/main/format_spec.html) page. + +When opening the GUI, there is a default probe configuration that is loaded and drawn, which can be +saved to a [JSON file](#save-probeinterface-file). Conversely, an existing JSON file can be +[loaded](#load-probeinterface-file) to update the current channel configuration. If for any reason +the default configuration is needed, it can be [loaded again](#load-default-configuration) at any +time. + +## Using the Channel Selection Window + +Upon first opening the GUI, the main window will be blank if no stimulus parameters have been +defined. The window should look something like this: + +

+ +

+ +### Selecting channels + +Once a GUI has been [opened](#overview), the panel in the top right will be populated with a default +`Rhs2116` probe group, which is a graphical representation of the channels based on their location +on the PCB. The probe group is oriented where the tether is located above the channels shown. Below +are the controls used to navigate within this panel to view and choose electrodes. + +- Mouse Controls + - Mouse wheel zooms in/out towards the cursor + - Left-click and drag will select electrodes within the drawn rectangle + - Left-click on an electrode will toggle selection for that electrode + - Left-click in empty space will clear the selected electrodes + - Middle-click and drag will pan the electrodes + +When channels are selected, they will be highlighted by a green circle around the contact number, +and the appropriate waveform will continue to be plotted in the main window; any channels that are +not selected will not be plotted. + +### Zoom and pan limits + +When zooming in and out, there are limits in both directions. The probe can only be zoomed out to +the point that the entire probe is visible within the panel and no more. Similarly, while zooming in +the probe will not zoom in past a certain point. + +In addition to the absolute zoom limits, the panel will automatically shift the probe to ensure it +is always in view. This is handled each time the probe is zoomed or panned. + +## Define Stimuli + +The following sections will define how to apply parameters, read existing parameters, and clear +parameters from channels. A description of what the parameters refer to will be given, as well as +tables to define some of the error codes that can appear in the status strip to better troubleshoot +issues. + +### Applying parameters + +The first step is to [select the channel(s)](#selecting-channels) where the parameters will be applied. +Note that the same set of parameters can be simultaneously applied to any or all channels without +restriction. If any channel already has stimulation parameters, note that selecting channels will +only plot the selected channels in the main window. In the example below, channels 7, 8, 23, and 24 +are selected. + +

+ +

+ +Next, type in / check the [stimulus parameters](#stimulus-parameters) that are to be +applied to the currently selected channel(s). The section above will give some insight into what +each parameter is controlling, as well as the possible resolutions and maximum/minimum values that +can be applied. Note that each time the cursor leaves a text box it will automatically update the +values inside the text box to reflect the actual value that will be written, based on the +resolutions listed above. In the example below, we can see that the table listed below as well shows +the typed values compared to the actual values list. + +| Parameter | Requested Value | Listed Value | +| --- | --- | --- | +| `Delay [ms]` | 5 | 5.00 | +| `Inter-Pulse [ms]` | 0 | 0.00 | +| `Anodic Amplitude [µA]` | 0.1 | 0.1 | +| `Anodic Pulse Width [ms]` | 23 | 22.99 | +| `Inter-Stimulus [ms]` | 100 | 99.99 | + +

+ +

+ +> [!TIP] +> If a channel already has stimulus parameters applied to it, it is easy to change individual +> parameters by only writing in the applicable text box. Any boxes without input will not be +> applied. + +The selected settings can be applied to the selected channels by pressing Apply, and the +waveforms will be plotted in the main window as shown below. + +

+ +

+ +To see the values that will be written to the hardware, click on the `Table` tab in the top left, +next to the `Stimulus Waveform` tab. This will open up a table that displays all 32 channels, and +the value in steps and samples that could be written to the hardware. Any changes made to the +channels parameters will be reflected in this window. An example of what the empty table looks like +when no parameters have been set is below. + +

+ +

+ +### Reading current parameters + +To easily copy settings from one channel to another, or to see what the current settings are on a +channel prior to updating then settings, click on a single channel in the channel selection window, +or click-and-drag until a single channel is selected, and then press on the Read button +in the bottom right. If more than one channel is selected, or no channels are selected, a window +will pop up prompting the user to select a single channel. + +To test this, select a channel that has not been configured yet and press Read. The +parameter fields will be populated with zeroes as shown in the image below: + +

+ +

+ +Any channel that has been configured can also be selected before pressing Read to pull +out the current parameters. For example, if one of the channels that was configured in the [Applying +parameters](#applying-parameters) section above is selected, the image below shows the result of the +operation: + +

+ +

+ +### Clearing current parameters + +To quickly remove the current stimulus parameter configuration from any given channel(s), select as +many channels as are needed and then press the Clear button. This will reset the +channel(s) to their default configuration, which removes all parameters. The waveforms will be +updated to show that there are no pulses being delivered on the channel(s). + +## Status strip + +The bottom left corner of the window shows the current status of the configuration settings. Below +is a table showing the possible statuses, as well as additional information on what each message +means and how invalid settings can be modified to allow the settings to be saved. In addition to the +status message, there is an additional message in the status strip that keeps a tally of how complex +the waveforms are. This is displayed as a total percentage of the number of slots used (or will be +used) by the hardware. Increasing the number of pulses will use more slots, and introducing pulses +across different channels that occur at different rates will use more slots. + +| Image | Status Label | Remarks | +| ---- | ---- | ---- | +| ![Valid stimulus sequence](../../../src/onix-bonsai-onix1/OpenEphys.Onix1.Design/Resources/StatusReadyImage.png) | `Valid Stimulus Sequence` | There are no issues with the current configuration, and the number of slots fits within the hardware boundaries. Settings can be saved. | +| ![Invalid - too many pulses](../../../src/onix-bonsai-onix1/OpenEphys.Onix1.Design/Resources/StatusBlockedImage.png) | `Invalid Sequence - Too many pulses defined` | The resulting waveform is too complex (for example, using the same settings as above but setting 350 pulses will give this error.). Reduce the complexity of the waveform before saving the configuration. | +| ![Invalid Sequence](../../../src/onix-bonsai-onix1/OpenEphys.Onix1.Design/Resources/StatusCriticalImage.png) | `Invalid Sequence - Contact XX, Reason: Y` | Some combination of stimulus parameter settings is invalid and must be fixed before changes can be saved. The first contact with an invalid parameter set will be listed here, along with the actual reason. [Below](#reasons-for-invalid-sequence-status) is a list of possible reasons, but this is not an exhaustive list. | + +> [!TIP] +> In the case that there is an error defined on a particular channel, but it is unclear why the error +exists since it appears that nothing is configured on that channel, try selecting the channel and +[clear the configuration settings](#clearing-current-parameters) + +### Reasons for invalid sequence status + +| Reason | Explanation | +| -- | -- | +| `Stimuli = 0, Cathodic Width > 0` | The cathodic pulse width is greater than zero, but the number of pulses defined on the contact is zero. | +| `Stimuli = 0, Anodic Width > 0` | The anodic pulse width is greater than zero, but the number of pulses defined on the contact is zero. | +| `Stimuli = 0, ISI > 0` | The inter-stimulus interval is greater than zero, but the number of pulses defined on the contact is zero. | +| `Stimuli = 0, Anodic Steps > 0` | The number of anodic amplitude steps is greater than zero, but the number of pulses defined on the contact is zero. | +| `Stimuli = 0, Cathodic Steps > 0` | The number of cathodic amplitude steps is greater than zero, but the number of pulses defined on the contact is zero. | +| `Stimuli = 0, Delay > 0` | The delay is greater than zero, but the number of pulses defined on the contact is zero. | +| `Stimuli = 0, Dwell (Inter-Pulse) > 0` | The inter-pulse interval is greater than zero, but the number of pulses defined on the contact is zero. | +| `Anodic Width = 0, Anodic Steps > 0` | The anodic amplitude is greater than zero, but the anodic pulse-width is set to zero on this contact. | +| `Cathodic Width = 0, Cathodic Steps > 0` | The cathodic amplitude is greater than zero, but the cathodic pulse-width is set to zero on this contact. | +| `ISI = 0, Stimuli > 1` | The inter-stimulus interval is equal to zero, but the number of stimuli is greater than one. | + +## Keeping or discarding settings + +While the GUI is open, any changes to the configuration settings can be freely modified and will not +affect the configuration unless Ok is pressed. This includes all aspects of the +configuration, such as filter settings and all stimulus waveform parameters. + +> [!NOTE] +> The hardware is not actually configured until the workflow starts. + +If the window is closed any other way (such as by pressing `Cancel`, or pressing the X to +close the window), then any changes made *will not* be saved. If the current settings are considered +invalid (see [the table above](#reasons-for-invalid-sequence-status) for specific reasons why some +settings are invalid), they also *will not* be saved even if Ok is pressed. A message box +will pop up warning that the settings will not be saved, giving the opportunity to continue editing +and correct any settings that need modification. + +## Save ProbeInterface file + +To save a [ProbeInterface](#probeinterface) JSON file fully describing the probe, including which +electrodes are currently enabled, go to the File drop-down menu, and select `Channel Configuration → +Save Channel Configuration`. This will open a file dialog window to save the new JSON file. Choose a +folder location and a name for the file, then hit `Save`. This will export the current channel +configuration. This is a useful way to save any manually enabled electrodes as a backup, or to +easily switch between different configurations between recordings. + +## Load ProbeInterface file + +To load a [ProbeInterface](#probeinterface) JSON file, navigate to the File drop-down menu and +select `Channel Configuration → Load Channel Configuration`. This will open a file dialog window; +browse to the existing JSON file, select it and press `Open` to load the channel configuration. The +new probe shape will be loaded and drawn, with the enabled electrodes highlighted as usual. + +> [!NOTE] +> When loading a new configuration, the total number of electrodes must match the existing +> configuration, and the number of enabled electrodes must match. + +## Load default configuration + +To load the default channel configuration at any time, navigate to the File drop-down menu and +choose `Channel Configuration → Load Default Channel Configuration`. This will load the default +configuration, with the default orientation as described above. diff --git a/articles/hardware/rhs2116/overview.md b/articles/hardware/rhs2116/overview.md index a78f3170..5066af56 100644 --- a/articles/hardware/rhs2116/overview.md +++ b/articles/hardware/rhs2116/overview.md @@ -16,7 +16,7 @@ These are the devices available on the Headstage Rhs2116: - Lower cutoff during recovery immediately after stimulus configurable from 0.1 Hz to 1 kHz - Optional adjustable digital high-pass filter with cutoff configurable from 0.146 Hz to 3.309 kHz - [Electrical Stimulation](xref:rhs2116_stimulate): Single current source with ±15V compliance voltage and automatic electrode discharge - - The stimulation waveform is highly configurable via the 's properties. + - The stimulation waveform is highly configurable via the 's properties. > [!TIP] > Visit the diff --git a/articles/hardware/rhs2116/rhs2116-stimulate.md b/articles/hardware/rhs2116/rhs2116-stimulate.md index 36996d99..0b046cb2 100644 --- a/articles/hardware/rhs2116/rhs2116-stimulate.md +++ b/articles/hardware/rhs2116/rhs2116-stimulate.md @@ -21,9 +21,8 @@ that correspond to bit positions of the breakout board's digital port. `Buttons` inspectable with the F12 hotkey. `Condition` contains a `HasFlags` operator. Because `HasFlags`'s `Value` is set to "Triangle", its output is "True" when the selected `BreakoutButtonState` bit field contains the "Triangle" flag. Therefore, the conditional statement evaluates as true whenever the "Triangle" button is pressed in which case the -upstream `BreakoutButtonState` element emitted by `Condition` to `Double`. `Double` emits a value of type -to -anytime it receives an item in its upstream sequence. +upstream `BreakoutButtonState` element emitted by `Condition` to `Double`, which emits a value of type +to anytime it receives an item in its upstream sequence. When `Rhs2116StimulusTrigger` receives a double from the upstream sequence, a stimulus waveform is triggered. The waveform can be modified by `Rhs2116StimulusTrigger`'s properties. diff --git a/articles/toc.yml b/articles/toc.yml index 57333b18..a8ed9c57 100644 --- a/articles/toc.yml +++ b/articles/toc.yml @@ -86,6 +86,8 @@ items: - name: Configuration href: hardware/rhs2116/configuration.md + - name: Rhs2116 GUI + href: hardware/rhs2116/gui.md - name: Port Status href: hardware/rhs2116/port-status.md - name: Rhs2116 Electrophysiology Data diff --git a/images/rhs2116-gui-tut/bonsai-where-to-click.png b/images/rhs2116-gui-tut/bonsai-where-to-click.png new file mode 100644 index 0000000000000000000000000000000000000000..2fa4479c3da447047585402f43e8f9203d086aed GIT binary patch literal 71520 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 literal 0 HcmV?d00001 diff --git a/images/rhs2116-gui-tut/channel-selection-7-8-23-24.png b/images/rhs2116-gui-tut/channel-selection-7-8-23-24.png new file mode 100644 index 0000000000000000000000000000000000000000..42e293b7d4c0648c14e5092097110584a7aab2c3 GIT binary patch literal 12480 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 LBvCGA;P<}(3~cl; literal 0 HcmV?d00001 diff --git a/images/rhs2116-gui-tut/define-stimuli-read-defaults.png b/images/rhs2116-gui-tut/define-stimuli-read-defaults.png new file mode 100644 index 0000000000000000000000000000000000000000..742b1e733d87e2dabbfc9637e0a336387dfcef05 GIT binary patch literal 11047 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 literal 0 HcmV?d00001 diff --git a/images/rhs2116-gui-tut/table.png b/images/rhs2116-gui-tut/table.png new file mode 100644 index 0000000000000000000000000000000000000000..91ff9b48c8aeaa1ebd864b0c7b665d9f5360a569 GIT binary patch literal 22726 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 WcYy&QmP%}gNK1glbM8L${C@!KAP-vr literal 0 HcmV?d00001 diff --git a/images/rhs2116-gui-tut/waveforms-7-8-23-24-a.png b/images/rhs2116-gui-tut/waveforms-7-8-23-24-a.png new file mode 100644 index 0000000000000000000000000000000000000000..e48dd63833801122de82f40b9da1811fba01e493 GIT binary patch literal 44799 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 literal 0 HcmV?d00001 From 57dd398644cc25ee010007625f1d330b4f60b689 Mon Sep 17 00:00:00 2001 From: bparks13 Date: Mon, 23 Dec 2024 15:25:56 -0500 Subject: [PATCH 3/5] Minor edits --- articles/hardware/rhs2116/gui.md | 8 ++++---- images/StatusBlockedImage.png | Bin 0 -> 268 bytes images/StatusCriticalImage.png | Bin 0 -> 306 bytes images/StatusReadyImage.png | Bin 0 -> 309 bytes 4 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 images/StatusBlockedImage.png create mode 100644 images/StatusCriticalImage.png create mode 100644 images/StatusReadyImage.png diff --git a/articles/hardware/rhs2116/gui.md b/articles/hardware/rhs2116/gui.md index 252643f9..f523599d 100644 --- a/articles/hardware/rhs2116/gui.md +++ b/articles/hardware/rhs2116/gui.md @@ -206,9 +206,9 @@ across different channels that occur at different rates will use more slots. | Image | Status Label | Remarks | | ---- | ---- | ---- | -| ![Valid stimulus sequence](../../../src/onix-bonsai-onix1/OpenEphys.Onix1.Design/Resources/StatusReadyImage.png) | `Valid Stimulus Sequence` | There are no issues with the current configuration, and the number of slots fits within the hardware boundaries. Settings can be saved. | -| ![Invalid - too many pulses](../../../src/onix-bonsai-onix1/OpenEphys.Onix1.Design/Resources/StatusBlockedImage.png) | `Invalid Sequence - Too many pulses defined` | The resulting waveform is too complex (for example, using the same settings as above but setting 350 pulses will give this error.). Reduce the complexity of the waveform before saving the configuration. | -| ![Invalid Sequence](../../../src/onix-bonsai-onix1/OpenEphys.Onix1.Design/Resources/StatusCriticalImage.png) | `Invalid Sequence - Contact XX, Reason: Y` | Some combination of stimulus parameter settings is invalid and must be fixed before changes can be saved. The first contact with an invalid parameter set will be listed here, along with the actual reason. [Below](#reasons-for-invalid-sequence-status) is a list of possible reasons, but this is not an exhaustive list. | +| ![Valid stimulus sequence](../../../images/StatusReadyImage.png) | `Valid Stimulus Sequence` | There are no issues with the current configuration, and the number of slots fits within the hardware boundaries. Settings can be saved. | +| ![Invalid - too many pulses](../../../images/StatusBlockedImage.png) | `Invalid Sequence - Too many pulses defined` | The resulting waveform is too complex (for example, using the same settings as above but setting 350 pulses will give this error.). Reduce the complexity of the waveform before saving the configuration. | +| ![Invalid Sequence](../../../images/StatusCriticalImage.png) | `Invalid Sequence - Contact XX, Reason: Y` | Some combination of stimulus parameter settings is invalid and must be fixed before changes can be saved. The first contact with an invalid parameter set will be listed here, along with the actual reason. [Below](#reasons-for-invalid-sequence-status) is a list of possible reasons, but this is not an exhaustive list. | > [!TIP] > In the case that there is an error defined on a particular channel, but it is unclear why the error @@ -218,7 +218,7 @@ exists since it appears that nothing is configured on that channel, try selectin ### Reasons for invalid sequence status | Reason | Explanation | -| -- | -- | +| --- | --- | | `Stimuli = 0, Cathodic Width > 0` | The cathodic pulse width is greater than zero, but the number of pulses defined on the contact is zero. | | `Stimuli = 0, Anodic Width > 0` | The anodic pulse width is greater than zero, but the number of pulses defined on the contact is zero. | | `Stimuli = 0, ISI > 0` | The inter-stimulus interval is greater than zero, but the number of pulses defined on the contact is zero. | diff --git a/images/StatusBlockedImage.png b/images/StatusBlockedImage.png new file mode 100644 index 0000000000000000000000000000000000000000..3e35e47ec39de3a1a290571722b841580dc83564 GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DkxK$!8B)5Zfp!F8T4jv*HQ$qwxI_tkncJo@YKN1nI&h|q#l28;ngj2-9eZ*Bkl ze|5(F|NgEL0R|pCD(pebLEKl_7z56}k550Akl}JX|5UL<+a7mAmJ^ozlMXCnlx~wM zl3QlU_{1cK>to`Iav=w{H^-l)J4q~IUm~8u5XO2WVM3e;a|i1d} L`njxgN@xNA*vMMQ literal 0 HcmV?d00001 diff --git a/images/StatusCriticalImage.png b/images/StatusCriticalImage.png new file mode 100644 index 0000000000000000000000000000000000000000..4762e0feb7e5d09d680c8afff79f6a21df83ea8e GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DkxL735kHCP2Gc*WDjF~q`uYw$tdLk2u&1b7Z`^c-OFVd$@!_`_IQ-pXm&gWw5G z6;Ilm^lwa^9N`gAcxh#CZFz3g@vR=3m5&_G@CJU?dF^;s)zIeLa+^H!pPLFq1D*M$ zGH!ljoBgvFzY=Za$3-0hDA4NlB+ z<>sP*Y_@-+)TPV)Q%^dEz#tDnm{r-UW|63%p| literal 0 HcmV?d00001 diff --git a/images/StatusReadyImage.png b/images/StatusReadyImage.png new file mode 100644 index 0000000000000000000000000000000000000000..cbe7c2eb5064543f9eb9f2ee746779d4923a85ee GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DkxK$!8B)5Zfp!Rwwbjv*HQbAxyC9yZ{)qH*&ecP0z}gF{QhKPata;^24?rM#m! z`#@_{>+}h2a<>YL4u~pMy4z0C6m;6);@-n5xH%@Qd6M~}`Oh@BeK#{po-AniB%nEJ zTJ3>HTdPZ^Zg}!RCSg;W+LjL<8BD!7k6d#$nywAFvD=R6^tLyKc73glm(R@+a$;~3 zYG#X)NI9yy^_^43eyNPRt*achEMD`iVq5uQjkN~bRn;y5i&yjFlD_tA;(oB=_rD$+ z?tiC5xHda7Wqg!-s(pDypV0xe|Fz3Rru=zmE&Z9vd20l(X~DE!pcffDUHx3vIVCg! E0LrO&?EnA( literal 0 HcmV?d00001 From db1a01fb714bd1bc9a9698660dc381755433d499 Mon Sep 17 00:00:00 2001 From: cjsha Date: Wed, 1 Jan 2025 22:42:23 -0500 Subject: [PATCH 4/5] Minor edits across Rhs2116 docs - wrap to 100 instead of 120 - Remove some superfluous formatting - Clarity edits --- articles/hardware/rhs2116/configuration.md | 19 ++-- articles/hardware/rhs2116/gui.md | 91 +++++++++---------- articles/hardware/rhs2116/rhs2116-record.md | 28 +++--- .../hardware/rhs2116/rhs2116-stimulate.md | 32 ++++--- includes/configuration-timestamp.md | 12 +-- .../partials/hardware/bno055.tmpl.partial | 36 +++++++- .../hardware/configuration.tmpl.partial | 77 ++++++++++------ .../hardware/memoryMonitor.tmpl.partial | 57 ++++++------ .../partials/hardware/portStatus.tmpl.partial | 43 +++++---- 9 files changed, 224 insertions(+), 171 deletions(-) diff --git a/articles/hardware/rhs2116/configuration.md b/articles/hardware/rhs2116/configuration.md index e2e52cd1..81bd51fe 100644 --- a/articles/hardware/rhs2116/configuration.md +++ b/articles/hardware/rhs2116/configuration.md @@ -12,16 +12,17 @@ workflowLocation: overview ## Configuring the Breakout Board and Headstage Rhs2116 -The `ConfigureBreakoutBoard` operator configures the Onix Breakout Board. In the Headstage Rhs2116 example tutorial, it is -configured to enable digital inputs to serve as a trigger for the Headstage Rhs2116's electrical and optical stimulation -and to enable monitoring of the percentage of memory occupied. This is accomplished by leaving all of the -`ConfigureBreakoutBoard` properties set to their default values except its `Memory Monitor` `Enable` property is set to -`True`. +The `ConfigureBreakoutBoard` operator configures the Onix Breakout Board. In the Headstage Rhs2116 +example tutorial, it is configured to enable digital inputs to serve as a trigger for the Headstage +Rhs2116's electrical and optical stimulation and to enable monitoring of the percentage of memory +occupied. This is accomplished by leaving all of the `ConfigureBreakoutBoard` properties set to +their default values except its Memory Monitor Enable property is set to "True". -The `ConfigureHeadstageRhs2116` operator is used to configure the Headstage Rhs2116. In the Headstage Rhs2116 example -tutorial, it is configured to enable streaming of electrophysiology data from a Rhs2116 amplifier, orientation data from -the on-board Bno055 IMU, and position data from the Ts4231. This is accomplished in the Headstage Rhs2116 example -workflow by leaving all of the `ConfigureHeadstageRhs2116` properties set to their default values. +The `ConfigureHeadstageRhs2116` operator is used to configure the Headstage Rhs2116. In the +Headstage Rhs2116 example tutorial, it is configured to enable streaming of electrophysiology data +from a Rhs2116 amplifier, orientation data from the on-board Bno055 IMU, and position data from the +Ts4231. This is accomplished in the Headstage Rhs2116 example workflow by leaving all of the +`ConfigureHeadstageRhs2116` properties set to their default values. [!INCLUDE [timestamp-info](../../../includes/configuration-timestamp.md)] diff --git a/articles/hardware/rhs2116/gui.md b/articles/hardware/rhs2116/gui.md index f523599d..2fa361bc 100644 --- a/articles/hardware/rhs2116/gui.md +++ b/articles/hardware/rhs2116/gui.md @@ -12,16 +12,18 @@ downloaded. For more information on how to install that library, check out the The GUI for `Rhs2116Headstage` allows for an easy way to change settings, as well as the ability to set waveform parameters and visualize the effect. From the GUI, you can: -- Modify stimulus parameters for all 32 channels simultaneously - - Visualize waveforms across all channels - - Select specific channels using a ProbeInterface representation of the hardware - - Remove or add stimulus waveform parameters to one or more channels at a time +- Modify stimulus parameters for all 32 channels + - Visualize waveforms across all channels + - Select specific channels using a ProbeInterface representation of the hardware + - Remove or add stimulus waveform parameters to one or more channels at a time + - Save and load channel configuration - Change filter settings for recording data - - See the page for more information on filter settings + - See or the + [Rhs2116 datasheet](https://intantech.com/files/Intan_RHS2116_datasheet.pdf) for more + information on filter settings This configuration GUI can be accessed by double-clicking on the `ConfigureHeadstageRhs2116` -operator. The remainder of this page will describe the functionality of the window that opens, -allowing for easy configuring of the hardware. +operator.

@@ -29,16 +31,17 @@ allowing for easy configuring of the hardware. ### Stimulus parameters -All of the parameters are applied in real-world units that the user will be familiar with (i.e., -milliseconds and microamps). On the backend, the GUI will take these units and convert them into raw -samples which is how they will be written to the hardware. Since the conversion between real units -and samples is not always exact, there might be some discrepancies between the value that the user -initially inputs and the value that is automatically updated. Values will be automatically updated -whenever the focus moves away from the current text box (i.e., the user presses Tab or -clicks somewhere outside of the text box). +The GUI accepts values for stimulation waveform parameters in metric units (e.g., milliseconds and +microamps). In the backend, the GUI converts metric units into units that can be written to the +hardware. Because the conversion between metric values and converted values is not always exact, the +GUI might automatically update the metric value initially input by the user to a metric value that +more accurately represents the converted value that will be written to hardware. This update is +visually displayed in the same text box where the user initially input their values and happens when +the focus moves away from the active text box (e.g., the user presses Tab or clicks +somewhere outside of the text box). -Below is a table listing the various parameters that can be applied to each channel, as well as the -resolution and any other relevant limits for each parameter. +Below is a table describing the various stimulus parameters that can be applied to each channel +including the resolution and limits for each parameter. | Parameter Name | Minimum Value | Maximum Value | Resolution | Remarks | | ----- | ---- | ---- | ---- | ---- | @@ -46,25 +49,23 @@ resolution and any other relevant limits for each parameter. | `Anodic First` | Unchecked | Checked | n/a | If checked, the anodic (positive) segment will be delivered first for every pulse | | `Delay` | 0 ms | n/a | 0.03312 ms | Time between a trigger being received and the first pulse is delivered | | `Inter-Pulse` | 0 ms | n/a | 0.03312 ms | Time between positive-to-negative (or negative-to-positive) stimulation for a single pulse | -| `Amplitude` | 0 µA | 2550 µA | Dependent on the step size | Type in the requested amplitude, and underneath is the actual value that will be applied on hardware based on the current step size | -| `Step Size` | 0.01 µA | 25 µA | [Step Size](xref:OpenEphys.Onix1.Rhs2116StepSize) | Automatically calculated to optimize difference between requested and actual amplitude | -| `Pulse Width` | 0.03312 ms | n/a | 0.03312 ms | Width of each positive or negative portion of the stimulus | +| `Amplitude` | 0 µA | 2550 µA | Dependent on the step size | Enter the requested amplitude, and the actual value that will be applied on hardware based on the current step size is displayed underneath in the `Step Size` text box | +| `Step Size` | 0.01 µA | 25 µA | [Step Size](xref:OpenEphys.Onix1.Rhs2116StepSize) | Automatically calculated to optimize difference between requested and actually possible amplitude | +| `Pulse Width` | 0.03312 ms | n/a | 0.03312 ms | Time between each pulse's rising edge and falling edge (or vice-versa) | | `Inter-Stimulus` | 0.03312 ms | n/a | 0.03312 ms | Time between successive pulses. Can be 0 if there is only one pulse | | `Number of Pulses` | 1 | n/a | 1 | Number of pulses that are sent per trigger received | ### ProbeInterface -The `Rhs2116Headstage` GUI uses -[ProbeInterface](https://probeinterface.readthedocs.io/en/main/index.html) as the format to draw the -probes and electrodes visually. For more information on ProbeInterface and the resulting JSON file, -check out their [format -specifications](https://probeinterface.readthedocs.io/en/main/format_spec.html) page. +The `Rhs2116Headstage` GUI uses the +[ProbeInterface](https://probeinterface.readthedocs.io/en/main/index.html) format to draw the probes +and electrodes visually. For more information on the ProbeInterface JSON format, check out their +[format specifications](https://probeinterface.readthedocs.io/en/main/format_spec.html) page. -When opening the GUI, there is a default probe configuration that is loaded and drawn, which can be -saved to a [JSON file](#save-probeinterface-file). Conversely, an existing JSON file can be -[loaded](#load-probeinterface-file) to update the current channel configuration. If for any reason -the default configuration is needed, it can be [loaded again](#load-default-configuration) at any -time. +When opening the GUI, there is a default probe configuration that is loaded and drawn which can be +saved to a [JSON file](#save-probeinterface-file). Conversely, an existing ProbeInterface JSON file +can be [loaded](#load-probeinterface-file) to update the current channel configuration. If the +default configuration is needed, it can be [loaded again](#load-default-configuration) at any time. ## Using the Channel Selection Window @@ -86,11 +87,11 @@ are the controls used to navigate within this panel to view and choose electrode - Mouse wheel zooms in/out towards the cursor - Left-click and drag will select electrodes within the drawn rectangle - Left-click on an electrode will toggle selection for that electrode - - Left-click in empty space will clear the selected electrodes + - Left-click on empty space will clear the electrode selection - Middle-click and drag will pan the electrodes When channels are selected, they will be highlighted by a green circle around the contact number, -and the appropriate waveform will continue to be plotted in the main window; any channels that are +and the corresponding waveforms will be plotted in the main window; any channels that are not selected will not be plotted. ### Zoom and pan limits @@ -104,10 +105,9 @@ is always in view. This is handled each time the probe is zoomed or panned. ## Define Stimuli -The following sections will define how to apply parameters, read existing parameters, and clear -parameters from channels. A description of what the parameters refer to will be given, as well as -tables to define some of the error codes that can appear in the status strip to better troubleshoot -issues. +The following sections define how to apply parameters, read existing parameters, and clear parameters from channels. +They also provide example stimulus parameters and descriptions of error codes that can appear in the status strip to +facilitate troubleshooting. ### Applying parameters @@ -121,13 +121,12 @@ are selected.

-Next, type in / check the [stimulus parameters](#stimulus-parameters) that are to be -applied to the currently selected channel(s). The section above will give some insight into what -each parameter is controlling, as well as the possible resolutions and maximum/minimum values that -can be applied. Note that each time the cursor leaves a text box it will automatically update the -values inside the text box to reflect the actual value that will be written, based on the -resolutions listed above. In the example below, we can see that the table listed below as well shows -the typed values compared to the actual values list. +Enter the [stimulus parameters](#stimulus-parameters) that you want to apply to the currently +selected channel(s). Note that the value initially input by the user might update when the focus +moves away from the current text box (e.g., the user presses Tab or clicks somewhere +outside of the text box) to reflect the actual value that will be written based on the resolutions +listed above. In the example below, we can see that the table listed below as well shows the typed +values compared to the actual values list. | Parameter | Requested Value | Listed Value | | --- | --- | --- | @@ -178,8 +177,8 @@ parameter fields will be populated with zeroes as shown in the image below:

-Any channel that has been configured can also be selected before pressing Read to pull -out the current parameters. For example, if one of the channels that was configured in the [Applying +Now select a channel that has been configured and press Read to read that channel's +current parameters. For example, if one of the channels that was configured in the [Applying parameters](#applying-parameters) section above is selected, the image below shows the result of the operation: @@ -239,8 +238,8 @@ configuration, such as filter settings and all stimulus waveform parameters. > [!NOTE] > The hardware is not actually configured until the workflow starts. -If the window is closed any other way (such as by pressing `Cancel`, or pressing the X to -close the window), then any changes made *will not* be saved. If the current settings are considered +If the window is closed any other way (such as by pressing `Cancel` or pressing the X to +close the window), any changes made *will not* be saved. If the current settings are considered invalid (see [the table above](#reasons-for-invalid-sequence-status) for specific reasons why some settings are invalid), they also *will not* be saved even if Ok is pressed. A message box will pop up warning that the settings will not be saved, giving the opportunity to continue editing diff --git a/articles/hardware/rhs2116/rhs2116-record.md b/articles/hardware/rhs2116/rhs2116-record.md index 645f73c9..bb33be19 100644 --- a/articles/hardware/rhs2116/rhs2116-record.md +++ b/articles/hardware/rhs2116/rhs2116-record.md @@ -3,26 +3,26 @@ uid: rhs2116_record title: Rhs2116 Recording --- -The following excerpt from the HeadstageRhs2116 [example workflow](xref:rhs2116) demonstrates the Rhs2116 -recording functionality by streaming and saving data from the Rhs2116 device. +The following excerpt from the HeadstageRhs2116 [example workflow](xref:rhs2116) demonstrates the +Rhs2116 recording functionality by streaming and saving data from the Rhs2116 device. ::: workflow ![/workflows/hardware/rhs2116/rhs2116-record.bonsai workflow](../../../workflows/hardware/rhs2116/rhs2116-record.bonsai) ::: -The operator generates a sequence of s using -the following settings: -- `BufferSize` is set to 30. Each `Rhs2116DataFrame` will contain a [1 x 30 sample] `Clock` vector, a [32 channel x 30 - sample] `AmplifierData` matrix, and a [3 channel x 30 sample] `AuxData` matrix. This corresponds to 1.2 ms of data per - data frame. -- `DeviceName` is set to "HeadstageRhs2116/Rhs2116". This links the `Rhs2116Data` - operator to the corresponding configuration operator. +The operator generates a sequence of +s using the following settings: +- The BufferSize property is set to 30. Each `Rhs2116DataFrame` will contain a [1 x 30 sample] Clock + vector, a [32 channel x 30 sample] AmplifierData matrix, and a [32 channel x 30 sample] DcData + matrix. This corresponds to 1 ms of data per data frame. +- The DeviceName property is set to "HeadstageRhs2116/Rhs2116". This links `Rhs2116Data` to the + Rhs2116s on the Headstage Rhs2116. -The relevant properties are extracted from the `Rhs2116DataFrame` by right-clicking the `Rhs2116Data` operator, and -choosing the following Output members: `Clock`, `AmplifierData`, and `DcData`. The - operators saves the selected members to -files with the following format: `rhs2116pair-clock_.raw`, `rhs2116pair-dc_.raw`, and -`rhs2116pair-ac_.raw`, respectively. +The relevant properties are extracted from the `Rhs2116DataFrame` by right-clicking the +`Rhs2116Data` operator, and choosing the following Output members: Clock, AmplifierData, and DcData. +The s save the selected members to files with the following +formats: `rhs2116pair-clock_.raw`, `rhs2116pair-ac_.raw`, and +`rhs2116pair-dc_.raw`, respectively. > [!TIP] > For more details about configuring the Rhs2116 and its data, read the diff --git a/articles/hardware/rhs2116/rhs2116-stimulate.md b/articles/hardware/rhs2116/rhs2116-stimulate.md index 0b046cb2..2cc846e3 100644 --- a/articles/hardware/rhs2116/rhs2116-stimulate.md +++ b/articles/hardware/rhs2116/rhs2116-stimulate.md @@ -10,22 +10,26 @@ stimulation functionality by streaming and saving data from the Rhs2116 device. ![/workflows/hardware/rhs2116/rhs2116-stimulate.bonsai workflow](../../../workflows/hardware/rhs2116/rhs2116-stimulate.bonsai) ::: -The operator generates a sequence of s. -Although the digital inputs are sampled at 4 Mhz, these data frames are only emitted when the port status changes (i.e., -when a pin, button, or switch is toggled). In the Breakout Board example workflow, the `DigitalInput`'s `DeviceName` -property is set to "BreakoutBoard/DigitalInput". This links the `DigitalInput` operator to the corresponding -configuration operator. +The operator generates a sequence of +s. Although the digital inputs are sampled at 4 Mhz, +these data frames are only emitted when the port status changes (i.e., when a pin, button, or switch +is toggled). In the Breakout Board example workflow, the `DigitalInput`'s DeviceName property is +set to "BreakoutBoard/DigitalInput". This links the `DigitalInput` operator to the Breakout Board's +digital inputs. - is selected from the `DigitalInputDataFrame`. It is an enumerator with values -that correspond to bit positions of the breakout board's digital port. `Buttons` connects to `Condition` which is -inspectable with the F12 hotkey. `Condition` contains a `HasFlags` operator. Because `HasFlags`'s `Value` is -set to "Triangle", its output is "True" when the selected `BreakoutButtonState` bit field contains the "Triangle" flag. -Therefore, the conditional statement evaluates as true whenever the "Triangle" button is pressed in which case the -upstream `BreakoutButtonState` element emitted by `Condition` to `Double`, which emits a value of type -to anytime it receives an item in its upstream sequence. + is selected from the `DigitalInputDataFrame`. It is an +enumerator with values that correspond to bit positions of the breakout board's digital port. +`Buttons` connects to `Condition` which is inspectable with the F12 hotkey. `Condition` +contains a `HasFlags` operator. Because `HasFlags`'s Value property is set to "Triangle", it outputs +"True" when the △ button is pressed. `Condition` passes `BreakoutButtonState` to `Double` +when the its internal conditional statement is evaluated is true. `Double` emits a value of type + to anytime it receives an item in +its upstream sequence. -When `Rhs2116StimulusTrigger` receives a double from the upstream sequence, a stimulus waveform is triggered. The -waveform can be modified by `Rhs2116StimulusTrigger`'s properties. +When `Rhs2116StimulusTrigger` receives a double from the upstream sequence, a stimulus waveform is +triggered. Its DeviceName property is set to "HeadstageRhs2116/StimulusTrigger" to link this +operator to the Rhs2116s on the Headstage Rhs2116. [Open the Headstage RHS2116 +GUI](xref:rhs2116_gui) to edit the stimulus waveform. > [!TIP] > For more details about configuring the Rhs2116 and its stimulation capabilities, read the diff --git a/includes/configuration-timestamp.md b/includes/configuration-timestamp.md index 2e012baf..af4423ec 100644 --- a/includes/configuration-timestamp.md +++ b/includes/configuration-timestamp.md @@ -1,8 +1,6 @@ When the workflow is started, the current time (based on -[Coordinated Universal Time](https://en.wikipedia.org/wiki/Coordinated_Universal_Time)) -is saved, along with global hardware parameters governing data acquisition. This is -accomplished using a [TimeStamp](https://bonsai-rx.org/docs/api/Bonsai.Reactive.Timestamp.html) operator -to capture the computer's wall clock time. This -`Timestamp` is saved along with `ContextTask`'s properties (e.g., -`AcquisitionClockHz`, `BlockReadSize`, `BlockWriteSize`) to a csv -file (`start-time_.csv`) when the the workflow is started. \ No newline at end of file +[Coordinated Universal Time](https://en.wikipedia.org/wiki/Coordinated_Universal_Time)) is saved, along with global +hardware parameters governing data acquisition. This is accomplished using a +[TimeStamp](https://bonsai-rx.org/docs/api/Bonsai.Reactive.Timestamp.html) operator to capture the computer's wall clock +time. The timestamp is saved along with `ContextTask`'s properties (e.g. AcquisitionClockHz, BlockReadSize, +BlockWriteSize) to a csv file (`start-time_.csv`) when the workflow is started. \ No newline at end of file diff --git a/template/partials/hardware/bno055.tmpl.partial b/template/partials/hardware/bno055.tmpl.partial index 11579ff4..989ba890 100644 --- a/template/partials/hardware/bno055.tmpl.partial +++ b/template/partials/hardware/bno055.tmpl.partial @@ -1,5 +1,8 @@
@@ -7,18 +10,41 @@

- The {{{bnoOperator}}} operator generates a sequence of Bno055DataFrames. The DeviceName property is set to "{{{hardwareOperator}}}/{{{bnoOperator}}}". This links the {{{bnoOperator}}} operator to the corresponding configuration operator. + The {{{bnoOperator}}} + operator generates a sequence of Bno055DataFrames. Its DeviceName property is + set to "{{{hardwareOperator}}}/{{{bnoOperator}}}" which links {{{bnoOperator}}} to + the Bno055 on the {{{hardware}}}.

- The CsvWriter operator writes the entire Bno055DataFrame to a file with the following format: bno055_<filecount>.csv. Because CsvWriter is a sink operator, its output sequence is equivalent to its input sequence (i.e., {{{bnoOperator}}}'s output). This means that the Quaternion property (originally from {{{bnoOperator}}}) can be selected from the CsvWriter operator by right-clicking the operator and selecting the proper Output property. + The CsvWriter + operator writes the entire Bno055DataFrame to a file with the following format: + bno055_<filecount>.csv. Because CsvWriter is a sink + operator, its output sequence is equivalent to its input sequence. This means that the Quaternion + member from Bno055DataFrame can be selected downstream of CsvWriter. + This is most easily performed by right-clicking the operator, hovering over "Output", and clicking + the corresponding member.

- Quaternion values are passed to the "AutoCommutator" IncludeWorkflow operator, which will automatically commutate the headstage if there is a proper commutator connected. "AutoCommutator" comes from the OpenEphys.Commutator Bonsai package. Its properties allow you to enable/disable the LED on the commutator using the LedEnable property, set the COM port using the PortName property, and set the orientation of the Bno055 orientation sensor using the headstage RotationAxis property. The RotationAxis is already correctly set for the {{{hardware}}}. However, the correct COM port value varies from system to system. You must find and set the correct COM port to which your commutator is connected in your system. + Quaternion values are passed to AutoCommutator which automatically commutates the + headstage's tether if there is a proper commutator connection. This operator comes from the + OpenEphys.Commutator Bonsai package. Make sure it's installed and updated. You can + enable/disable the commutator using the Enable property, enable/disable the LED on the commutator + using the LedEnable property, and set the COM port using the PortName property. The correct COM + port value varies from system to system. You must find and set the correct COM port to which your + commutator is connected in your system.

NOTE
-

The AutoCommutator operator is included in the workflow by default because it is so commonly used with {{{hardware}}}. However, it is disabled for people without a commutator to be able to run the workflow. To enable it, select the node and press Ctrl + Shift + D or select "Enable" in the context menu that appears after right-clicking the node.

+

+ AutoCommutator is included in the workflow because a commutator is often combined + with the {{{hardware}}} and the Breakout Board for freely-moving experiments. However, it is + disabled by default so that users without a commutator can run the workflow without additional + steps. To enable it, click on the node and press Ctrl + Shift + D or right-click the + node and click "Enable". +

\ No newline at end of file diff --git a/template/partials/hardware/configuration.tmpl.partial b/template/partials/hardware/configuration.tmpl.partial index ee90acbc..b110345a 100644 --- a/template/partials/hardware/configuration.tmpl.partial +++ b/template/partials/hardware/configuration.tmpl.partial @@ -1,11 +1,25 @@

The following excerpt from the {{{hardware}}} - example workflow demonstrates how to create an ONIX acquisition context using CreateContext, configures a {{{hardware}}} - using {{{operator}}}, and - then starts acquisition using StartAcquisition. + example workflow demonstrates how to configure your {{{hardware}}} and Breakout Board + in Bonsai. This process comprises of the following steps: +

+

@@ -15,8 +29,8 @@
NOTE

- To learn more about the top-level configuration motif in every workflow involving - ONIX hardware, visit the Configuration Chain Tutorial.

@@ -25,13 +39,13 @@

Creating an Acquisition Context

- The CreateContext operator - creates a ContextTask that - defines the device driver and index where the hardware exists. The - Driver property is set to "riffa", which is the name of the PCIe device used by ONIX. - In this case, the Index property is set to 0 because there is only a single ONIX system. - If a second system is used on the same computer, a second CreateContext operator - would be required in its own configuration chain, with its Index property set to 1. + The CreateContext operator creates a ContextTask that defines the device driver and + index where the hardware exists. The Driver property is set to "riffa" which is the name of the + PCIe device used by ONIX. In this case, the Index property is set to 0 because there is only a + single ONIX system. If a second system is used on the same computer, a second + CreateContext operator would be required in its own configuration chain, with its + Index property set to 1.

{{{conceptual}}} @@ -39,28 +53,31 @@

Starting Acquisition

- After starting a workflow, the StartAcquisition + After starting a workflow, the StartAcquisition operator begins data acquisition with the hardware that has been configured. In the {{{hardware}}} example workflow, data is collected from the {{{hardware}}} only, so the rate of data being - produced by the hardware will be ~{{{dataRate}}} MB/s. The StartAcquisition's ReadSize property is set to - {{{blockReadSize}}} bytes, meaning data collection will wait until - {{{blockReadSize}}} bytes of data have been produced by the hardware. At {{{dataRate}}} MB/s the - hardware will produce {{{blockReadSize}}} bytes every ~{{{timeUntilFullBuffer}}}. This is a hard - bound on the latency of the system. If lower latencies were required, the hardware would need to - produce data more quickly or the ReadSize would need to be reduced. + produced by the hardware will be ~{{{dataRate}}} MB/s. The ReadSize property is set to + {{{blockReadSize}}} bytes, meaning data collection will wait until {{{blockReadSize}}} bytes of + data have been produced by the hardware. At {{{dataRate}}} MB/s the hardware will produce + {{{blockReadSize}}} bytes every ~{{{timeUntilFullBuffer}}}. This is a hard bound on the latency of + the system. If lower latencies were required, the hardware would need to produce data more quickly + or the ReadSize property value would need to be reduced.

-

The StartAcquisition's WriteSize property is set to 2048 bytes. This - determines the amount of memory that is preallocated for temporarily holding data before it is - sent to hardware. It is less critical to performance unless the rate that data be written to the - hardware is comparable to the rate that the hardware produces data, which is not a common scenario. +

+ The WriteSize property is set to 2048 bytes. This determines the amount of memory that is + preallocated for temporarily holding data before it is sent to hardware. It is less critical to + performance unless the rate that data be written to the hardware is comparable to the rate that + the hardware produces data, which is not a common scenario.

NOTE
-

For an overview of the devices on the {{{hardware}}} that can be configured through the {{{operator}}} operator, visit - the {{{hardware}}} - Overview.

+

+ For an overview of the devices on the {{{hardware}}} that can be configured through the {{{operator}}} operator, visit + the {{{hardware}}} Overview. +

diff --git a/template/partials/hardware/memoryMonitor.tmpl.partial b/template/partials/hardware/memoryMonitor.tmpl.partial index 566fe9e8..dd4d96e0 100644 --- a/template/partials/hardware/memoryMonitor.tmpl.partial +++ b/template/partials/hardware/memoryMonitor.tmpl.partial @@ -1,6 +1,7 @@

- The following excerpt from the Breakout Board example workflow demonstrates - memory monitor functionality. + The following excerpt from the Breakout Board example + workflow demonstrates memory monitor functionality.

@@ -8,41 +9,43 @@

- The MemoryMonitorData operator - generates a sequence of MemoryMonitorDataFrames. - MemoryMonitorData emits MemoryMonitorDataFrames at a regular interval defined during Breakout Board Configuration using the ConfigureBreakoutBoard's - MemoryMonitor SamplesPerSecond property (in our case 10 Hz). In the Breakout Board example workflow, the - MemoryMonitorData's DeviceName property is set to "BreakoutBoard/MemoryMonitor". - This links the MemoryMonitorData operator to the corresponding configuration operator. The - MemberSelector operator selects the PercentUsed member from the - MemoryMonitorDataFrame so the user can visualize PercentUsed data from the - MemoryMonitorDataFrame. + MemoryMonitorData + emits a MemoryMonitorDataFrame at a + regular interval set by Breakout Board Configuration + using the ConfigureBreakoutBoard's + SamplesPerSecond property (in our case 10 Hz). In the Breakout Board example workflow, the + MemoryMonitorData's DeviceName property is set to "BreakoutBoard/MemoryMonitor". This + links the MemoryMonitorData operator to the Breakout Board's memory monitor. + MemberSelector selects the PercentUsed member from + MemoryMonitorDataFrame so the user can visualize the percentage of the breakout + board's memory that is occupied.

Note

- The MemoryMonitorDataFrame operator generates a data stream that is most useful in the context of - closed-loop performance. It tells the user if data is being consumed rapidly enough by the host PC to keep up with - data production by the hardware. The hardware FIFO is a buffer that is required to deal with the fact that computers - with normal operating systems cannot perform operations with strict regularity. When there are hiccups in - acquisition, the hardware FIFO picks up the slack, but should then be cleared immediately. To get the lowest - latencies, the BlockReadSize should be as small as possible while the memory use percentage remains - around 0%. + MemoryMonitorData generates a data stream that is most useful in the context of + closed-loop performance. It tells the user if data is being consumed rapidly enough by the host + PC to keep up with data production by the hardware. The hardware FIFO is a buffer that is + required to deal with the fact that computers with normal operating systems cannot perform + operations with strict regularity. When there are hiccups in acquisition, the hardware FIFO + picks up the slack, but should then be cleared immediately. To get the lowest latencies, + StartAcquisition's BlockReadSize property should be as small as possible while + the memory use percentage remains around 0%.

Warning

- If the hardware FIFO's PercentUsed is non-zero for long time periods, or is increasing, the - StartAcquisition's BlockReadSize setting is too small (see the breakout board configuration). A small - BlockReadSize will mean that the host computer does not have to wait long for enough data to - become available to propagate it forward, but will reduce overall bandwidth by increasing the - frequency at which the host computer checks if data is available and performs hardware reads. + If the hardware FIFO's PercentUsed is non-zero for long time periods, or is + increasing, the value of StartAcquisition's BlockReadSize property is too small + (see the breakout board configuration). A small + BlockReadSize means that the host computer does not have to wait long for enough + data to become available to propagate it forward, but will reduce overall bandwidth by + increasing the frequency at which the host computer checks if data is available and performs + hardware reads.

\ No newline at end of file diff --git a/template/partials/hardware/portStatus.tmpl.partial b/template/partials/hardware/portStatus.tmpl.partial index b09a2dfc..3bdc0597 100644 --- a/template/partials/hardware/portStatus.tmpl.partial +++ b/template/partials/hardware/portStatus.tmpl.partial @@ -1,9 +1,12 @@

- The Onix system reports when a headstage port connection enters or leaves an aberrant state. Such aberrant states include loss - of communication lock, detection of parity or CRC error, reception of a badly formatted packet, etc. Knowing the time - and type of a communication failure is a good first step to track down its cause. The following excerpt from the - {{{hardware}}} example - workflow demonstrates port status functionality and saves timestamped port status data. + The Onix system reports when a headstage/miniscope port connection enters or leaves an aberrant + state. Such aberrant states include loss of communication lock, detection of parity or CRC error, + reception of a badly formatted packet, etc. Knowing the time and type of an aberrant state can + help track down its cause. The following excerpt from the {{{hardware}}} + example + workflow + demonstrates port status functionality and saves timestamped port status data.

@@ -11,26 +14,28 @@

- Headstage port status data is produced in Bonsai by the PortStatus operator which generates a sequence of PortStatusFrames. PortStatus emits a - PortStatusFrame whenever PortStatusCode changes value. PortStatus's - DeviceName property is set to "{{{hardwareOperator}}}/PortController". This links the - PortStatus operator to the breakout board's port controller. + PortStatus emits a PortStatusFrame when + PortStatusCode changes value + i.e. when the {{{hardware}}} port connection enters or leaves an aberrant state. Its DeviceName + property is set to "{{{hardwareOperator}}}/PortController" which links the operator to the port + controller where the {{{hardware}}} is connected.

- The TimeStamp operator + The TimeStamp operator generates a sequence of UTC timestamped items from its input sequence. The CsvWriter operator writes Timestamp as - well as Clock and StatusCode members from PortStatusFrame to a file with the - following name format: port-status_<timestamp>.csv. + href="https://bonsai-rx.org/docs/api/Bonsai.IO.CsvWriter.html">CsvWriter operator writes + Timestamp as well as Clock and StatusCode members from PortStatusFrame to a file with + the following name format: port-status_<filecount>.csv.

NOTE
-

The PortStatus datastream is always enabled. {{{configureHardwareOperator}}} has no - Enable property for the PortStatus operator like other Data I/O operators that can be used - with the {{{hardware}}}.

+

+ The PortStatus datastream is always enabled. + {{{configureHardwareOperator}}} does not have an Enable property for + streaming port status data. +

\ No newline at end of file From d3e3596876de86fb37cdea292ce2adc77b1905d3 Mon Sep 17 00:00:00 2001 From: cjsha Date: Wed, 1 Jan 2025 22:49:33 -0500 Subject: [PATCH 5/5] Minor content correction - Fix broken ref --- template/partials/hardware/bno055.tmpl.partial | 2 +- template/partials/hardware/configuration.tmpl.partial | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/template/partials/hardware/bno055.tmpl.partial b/template/partials/hardware/bno055.tmpl.partial index 989ba890..a534eeef 100644 --- a/template/partials/hardware/bno055.tmpl.partial +++ b/template/partials/hardware/bno055.tmpl.partial @@ -31,7 +31,7 @@ Quaternion values are passed to AutoCommutator which automatically commutates the headstage's tether if there is a proper commutator connection. This operator comes from the OpenEphys.Commutator Bonsai package. Make sure it's installed and updated. You can + href="~/articles/getting-started/install-configure-bonsai.html">installed and updated. You can enable/disable the commutator using the Enable property, enable/disable the LED on the commutator using the LedEnable property, and set the COM port using the PortName property. The correct COM port value varies from system to system. You must find and set the correct COM port to which your diff --git a/template/partials/hardware/configuration.tmpl.partial b/template/partials/hardware/configuration.tmpl.partial index b110345a..5a19000f 100644 --- a/template/partials/hardware/configuration.tmpl.partial +++ b/template/partials/hardware/configuration.tmpl.partial @@ -56,7 +56,7 @@ After starting a workflow, the StartAcquisition operator begins data acquisition with the hardware that has been configured. In the {{{hardware}}} - example workflow, data is collected from the {{{hardware}}} only, so the rate of data being + example workflow, most collected data is from the {{{hardware}}}. The rate of data being produced by the hardware will be ~{{{dataRate}}} MB/s. The ReadSize property is set to {{{blockReadSize}}} bytes, meaning data collection will wait until {{{blockReadSize}}} bytes of data have been produced by the hardware. At {{{dataRate}}} MB/s the hardware will produce

- The following excerpt from the {{{hardware}}} example workflow demonstrates Bno055 functionality, saves Bno055 data, and commutates the {{{hardware}}} if there is a proper commutator connection. + The following excerpt from the {{{hardware}}} example + workflow visualizes Bno055 data, saves Bno055 data, and commutates the {{{hardware}}} if there + is a proper commutator connection.