From 417ff55d7d98ac70fdfaaab93b062a8c597aa7cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Grilo?= Date: Wed, 14 Aug 2024 15:54:30 +0100 Subject: [PATCH] correction of some typos --- docs/articles/install_bonsai.md | 2 +- docs/articles/install_harp.md | 3 - docs/articles/welcome.md | 6 +- .../BonsaiExamples/Audio/PlayTone/PlayTone.md | 6 +- .../SoundCalibration/SoundCalibration.md | 6 +- .../BonVision/MovingCircle/MovingCircle.md | 8 +- .../ArrayManipulation/ArrayManipulation.md | 11 +- .../BasicTypeConversions.md | 10 +- .../CreateFloatArray/CreateFloatArray.md | 8 +- .../BasicFileListProcessing.md | 12 +- .../ElaborateFileListProcessing.md | 9 +- .../SampleDiscreteUniformDistribution.md | 9 +- .../SampleNormalDistribution.md | 11 +- .../UDPSendAndReceive/UDPSendAndReceive.md | 10 +- .../ColumnwiseOperations.md | 4 +- .../ComposeImageLineByLine.md | 4 +- .../Vision/DynamicCropping/DynamicCropping.md | 2 +- .../Vision/MP4Writer/MP4Writer.md | 18 +- .../RegionTrackingHSV/RegionTrackingHSV.md | 5 +- .../RegionTrackingRGB/RegionTrackingRGB.md | 8 +- .../Vision/VideoAnnotation/VideoAnnotation.md | 2 +- .../BehaviorBoard/AnalogInput/AnalogInput.md | 2 +- .../CameraTrigger/CameraTrigger.md | 13 +- .../BehaviorBoard/DIOInput/DIOInput.md | 6 +- .../DigitalInput/DigitalInput.md | 5 +- .../DigitalOutput/DigitalOutput.md | 12 +- .../DigitalOutputPulse/DigitalOutputPulse.md | 14 +- .../BehaviorBoard/LEDToggle/LEDToggle.md | 18 +- .../BehaviorBoard/LogAll/LogAll.md | 2 +- .../BehaviorBoard/LogSelected/LogSelected.md | 8 +- .../BehaviorBoard/PWMToggle/PWMToggle.md | 14 +- .../QuadratureEncoder/QuadratureEncoder.md | 10 +- .../ServoMotorControl/ServoMotorControl.md | 20 +- .../ServoMotorToggle/ServoMotorToggle.md | 19 +- .../ToggleMicroSteps/ToggleMicroSteps.md | 19 +- .../ToggleMultipleSteps.md | 21 +- .../ToggleSingleSteps/ToggleSingleSteps.md | 19 +- .../workflows/ReactiveExamples/Delay/Delay.md | 5 +- .../workflows/ReactiveExamples/Merge/Merge.md | 7 +- docs/workflows/ReactiveExamples/Skip/Skip.md | 4 - .../ReactiveExamples/SkipUntil/SkipUntil.md | 8 +- docs/workflows/ReactiveExamples/Take/Take.md | 7 +- .../ReactiveExamples/TakeUntil/TakeUntil.md | 7 +- .../WithLatestFrom/WithLatestFrom.md | 4 - docs/workflows/ReactiveExamples/Zip/Zip.md | 4 +- docs/workflows/TrialBasedSession.svg | 218 +----------------- .../workflows/testing2/TrialBasedSession3.svg | 218 +----------------- 47 files changed, 115 insertions(+), 723 deletions(-) diff --git a/docs/articles/install_bonsai.md b/docs/articles/install_bonsai.md index 4fc3f27..569b3e0 100644 --- a/docs/articles/install_bonsai.md +++ b/docs/articles/install_bonsai.md @@ -1,6 +1,6 @@ ## Bonsai Installation -Before you can use the examples on this web site you need to install the following: +Before you can use the examples on this website you need to install the following: 1. Download and install the latest version of the [Bonsai installer](https://bonsai-rx.org/docs/articles/installation.html). 2. Install the Starter package: diff --git a/docs/articles/install_harp.md b/docs/articles/install_harp.md index b4acaec..5bf6c4c 100644 --- a/docs/articles/install_harp.md +++ b/docs/articles/install_harp.md @@ -3,20 +3,17 @@ Before you can use Harp devices in Bonsai you need to install the following: 1. Install Harp USB drivers from [here](https://ftdichip.com/wp-content/uploads/2021/08/CDM212364_Setup.zip) - 2. Install the generic Harp packages for Bonsai: 1. Open your Bonsai application 2. Go to Manage Packages 3. In Package Sources select Bonsai Packages 4. Search for Harp 5. Install Harp Library and Harp Design Library - 3. Install the specific Harp device packages for Bonsai: 1. In Package Sources select nuget.org 2. Search for your desired device (eg 'Harp Behavior') 3. Install the package - ## Documentation Further information can be found here: diff --git a/docs/articles/welcome.md b/docs/articles/welcome.md index 2d4f674..2dc5077 100644 --- a/docs/articles/welcome.md +++ b/docs/articles/welcome.md @@ -1,11 +1,11 @@ ## Welcome -Wecome to CF.Bonsai, a website from the [Champalimaud Foundation](https://www.fchampalimaud.org/) that contains annotated examples of recurring neuroscience tasks programmed in [Bonsai](https://bonsai-rx.org/). Many of these examples make use of the [Harp](https://harp-tech.org/articles/about.html) hardware protocol to interface with a variety of peripheral devices. +Welcome to CF.Bonsai, a website from the [Champalimaud Foundation](https://www.fchampalimaud.org/) that contains annotated examples of recurring neuroscience tasks programmed in [Bonsai](https://bonsai-rx.org/). Many of these examples make use of the [Harp](https://harp-tech.org/articles/about.html) hardware protocol to interface with a variety of peripheral devices. ## Getting started -Start by installing the necessary Bonsai and Harp software from the Getting Started menu on the left panel. Then, find your example of choice, and follow the instructions to run it. Every example can be copied directly to Bonsai, and includes a set of annotations that explain the most significant parts of the code. If the example involves hardware (as those of Harp) additional electrical diagrams are provided with the necessary connections between the components. +Start by installing the necessary Bonsai and Harp software from the [Getting Started](install_bonsai.md) menu on the left panel. Then, find your example of choice, and follow the instructions to run it. Every example can be copied directly to Bonsai, and includes a set of annotations that explain the most significant parts of the code. If the example involves hardware (as those of Harp) additional electrical diagrams are provided with the necessary connections between the components. @@ -22,7 +22,7 @@ More information about Harp can be found at [bonsai-rx.org](https://bonsai-rx.or ## Harp -Harp is an open-source standard for asynchronous real-time data acquisition and experimental control in neuroscience. The Harp ecosystem currently includes devices to configure, control, and collect data from a wide range of peripheral devices such as cameras, LEDs, nosepokes, and motors. +Harp is an open-source standard for asynchronous real-time data acquisition and experimental control in neuroscience. The Harp ecosystem currently includes devices to configure, control and collect data from a wide range of peripheral devices such as cameras, LEDs, nosepokes and motors. More information about Harp can be found at [harp-tech.org](https://harp-tech.org/articles/about.html). diff --git a/docs/workflows/BonsaiExamples/Audio/PlayTone/PlayTone.md b/docs/workflows/BonsaiExamples/Audio/PlayTone/PlayTone.md index 555dc87..df716a0 100644 --- a/docs/workflows/BonsaiExamples/Audio/PlayTone/PlayTone.md +++ b/docs/workflows/BonsaiExamples/Audio/PlayTone/PlayTone.md @@ -3,19 +3,15 @@ ## Summary This example demonstrates how to play a tone with fixed frequency and duration whenever a key is pressed. - ## Workflow :::workflow ![Example](~/workflows/BonsaiExamples/Audio/PlayTone/PlayTone.bonsai) ::: - ## Details 1. Plays a tone whenever 'A' is pressed. 1. Generates a sinusoidal wave form with 44100 samples with amplitude of 10000 and frequency of 1000Hz. Given that the sampling rate is set to 44100Hz, the wave generated will allow the tone to last for 1s. 2. Plays the tone. ## Follow up -The example shows how to modify the frequency and durations to obtain different tones on-the-fly. - - +The example shows how to modify the frequency and durations to obtain different tones on-the-fly. diff --git a/docs/workflows/BonsaiExamples/Audio/SoundCalibration/SoundCalibration.md b/docs/workflows/BonsaiExamples/Audio/SoundCalibration/SoundCalibration.md index 555dc87..df716a0 100644 --- a/docs/workflows/BonsaiExamples/Audio/SoundCalibration/SoundCalibration.md +++ b/docs/workflows/BonsaiExamples/Audio/SoundCalibration/SoundCalibration.md @@ -3,19 +3,15 @@ ## Summary This example demonstrates how to play a tone with fixed frequency and duration whenever a key is pressed. - ## Workflow :::workflow ![Example](~/workflows/BonsaiExamples/Audio/PlayTone/PlayTone.bonsai) ::: - ## Details 1. Plays a tone whenever 'A' is pressed. 1. Generates a sinusoidal wave form with 44100 samples with amplitude of 10000 and frequency of 1000Hz. Given that the sampling rate is set to 44100Hz, the wave generated will allow the tone to last for 1s. 2. Plays the tone. ## Follow up -The example shows how to modify the frequency and durations to obtain different tones on-the-fly. - - +The example shows how to modify the frequency and durations to obtain different tones on-the-fly. diff --git a/docs/workflows/BonsaiExamples/BonVision/MovingCircle/MovingCircle.md b/docs/workflows/BonsaiExamples/BonVision/MovingCircle/MovingCircle.md index 1f2fa8e..b24373d 100644 --- a/docs/workflows/BonsaiExamples/BonVision/MovingCircle/MovingCircle.md +++ b/docs/workflows/BonsaiExamples/BonVision/MovingCircle/MovingCircle.md @@ -1,14 +1,14 @@ # Moving Circle +## Summary +This example demonstrates how to draw a circle in Shaders and update its position according to mouse movements. + ## Workflow :::workflow ![Example](~/workflows/BonsaiExamples/BonVision/MovingCircle/MovingCircle.bonsai) ::: -## Summary -This example demonstrates how to draw a circle in Shaders and update its position according to mouse movements. - ## Details 1. Creates and initializes a simple shaders window with the standard resources necessary to draw the circle. 2. Creates an orthographic view with the normalized window coordinates, and sets up a behavior subject 'DrawScene' to be used whenever an update is to occur. @@ -18,5 +18,3 @@ This example demonstrates how to draw a circle in Shaders and update its positio Move the mouse over the Shaders window to observe the result. ## Follow-up - - diff --git a/docs/workflows/BonsaiExamples/DataTypes/ArrayManipulation/ArrayManipulation.md b/docs/workflows/BonsaiExamples/DataTypes/ArrayManipulation/ArrayManipulation.md index e062747..30d4b78 100644 --- a/docs/workflows/BonsaiExamples/DataTypes/ArrayManipulation/ArrayManipulation.md +++ b/docs/workflows/BonsaiExamples/DataTypes/ArrayManipulation/ArrayManipulation.md @@ -3,29 +3,26 @@ ## Summary This example demonstrates how to create an array, add elements to it and remove elements from it. - ## Workflow :::workflow ![Example](~/workflows/BonsaiExamples/DataTypes/ArrayManipulation/ArrayManipulation.bonsai) ::: - ## Details -1. Create an int array with one element +1. Create an int array with one element. 1. Receives a single int value and terminates the sequence. Closing the sequence is essential to create the array (see 1.2). 2. Creates an array with the single int value received. 3. Initializes the subject MyArray with the int array created. 2. Adds a new int value to the array whenever 'A' is pressed. 1. Gets the current number of 'A' key presses. 2. Creates a new int array with the elements in MyArray added by the current number of key presses. - 3. Updates My array with the new array created. + 3. Updates MyArray with the new array created. 3. Removes the last element from MyArray whenever 'S' is pressed. 1. Creates a new array without the last element. - 2. Updates MyArray with the new int array createdy. + 2. Updates MyArray with the new int array created. 4. Outputs the current values of the array at 200ms intervals. - 1. Enables the visualization of the current content of MyArray. Enable TimeSeriesVisualizer in this node to see the result of inteacting with the array. + 1. Enables the visualization of the current content of MyArray. Enable TimeSeriesVisualizer in this node to see the result of interacting with the array. ## Notes The key elements of this workflow are the Concat and ToArray nodes from the Reactive package. Concat produces a flat sequence of values with the individual elements of an array, while ToArray composes an array out of a flat sequence of values (insofar as that sequence terminates). Mastering these two nodes is key to understanding this example. - diff --git a/docs/workflows/BonsaiExamples/DataTypes/BasicTypeConversions/BasicTypeConversions.md b/docs/workflows/BonsaiExamples/DataTypes/BasicTypeConversions/BasicTypeConversions.md index c0413e0..e941878 100644 --- a/docs/workflows/BonsaiExamples/DataTypes/BasicTypeConversions/BasicTypeConversions.md +++ b/docs/workflows/BonsaiExamples/DataTypes/BasicTypeConversions/BasicTypeConversions.md @@ -1,15 +1,14 @@ # Basic Type Conversions +## Summary +This example demonstrates how to convert across the different numeric data types using direct CSharp expressions in the ExpressionTransform node. + ## Workflow :::workflow ![Example](~/workflows//BonsaiExamples/DataTypes/BasicTypeConversions/BasicTypeConversions.bonsai) ::: - -## Summary -This example demostrates how to convert across the different numeric data types using direct CSharp expressions in the ExpressionTransform node. - ## Details 1. Generates an int value 2. Converts the int into a float value using the method Convert.ToSingle() method @@ -20,5 +19,4 @@ This example demostrates how to convert across the different numeric data types The *it* argument passed to each method inside the ExpressionTransform nodes represents the actual input value of the node. -Verify the output type of each node (by right clicking on the node) and use the TextVisualizeR to best inspect the output of each node. - +Verify the output type of each node (by right-clicking on the node) and use the TextVisualizer to best inspect the output of each node. diff --git a/docs/workflows/BonsaiExamples/DataTypes/CreateFloatArray/CreateFloatArray.md b/docs/workflows/BonsaiExamples/DataTypes/CreateFloatArray/CreateFloatArray.md index 536b081..cfd6af3 100644 --- a/docs/workflows/BonsaiExamples/DataTypes/CreateFloatArray/CreateFloatArray.md +++ b/docs/workflows/BonsaiExamples/DataTypes/CreateFloatArray/CreateFloatArray.md @@ -1,17 +1,15 @@ # Create Float Array +## Summary +Const + ## Workflow :::workflow ![Example](~/workflows/BonsaiExamples/DataTypes/CreateFloatArray/CreateFloatArray.bonsai) ::: -## Summary -Const - ## Details 1. Const ## Follow-up - - diff --git a/docs/workflows/BonsaiExamples/IO/BasicFileListProcessing/BasicFileListProcessing.md b/docs/workflows/BonsaiExamples/IO/BasicFileListProcessing/BasicFileListProcessing.md index 8183476..0023f53 100644 --- a/docs/workflows/BonsaiExamples/IO/BasicFileListProcessing/BasicFileListProcessing.md +++ b/docs/workflows/BonsaiExamples/IO/BasicFileListProcessing/BasicFileListProcessing.md @@ -1,4 +1,7 @@ -# Basic file list processing +# Basic File List Processing + +## Summary +This example demonstrates how to read data from a list of files, process each file individually and create new files with the output. ## Workflow @@ -6,16 +9,13 @@ ![Example](~/workflows//BonsaiExamples/IO/BasicFileListProcessing/BasicFileListProcessing.bonsai) ::: -## Summary -This example demostrates how to read data from a list of files, process each file individually and create new files with the output. - ## Details 1. Gets a list of filenames from a given directory as string array.* 2. Generates one event per each element in the string array. 3. Processes each file individually. In this example, we read the number stored in each file, multiply it by two, and create a new file with the result with the string '_new' added to it. -*Before running the code you need to download [file1.txt](https://github.com/fchampalimaud/cf.bonsai/blob/main/docs/workflows/BonsaiExamples/IO/ProcessFileList/file1.txt) and [file2.txt](https://github.com/fchampalimaud/cf.bonsai/blob/main/docs/workflows/BonsaiExamples/IO/ProcessFileList/file1.txt) to a directory, and modify the Path propery in the GetFiles node accordingly. +*Before running the code you need to download [file1.txt](https://github.com/fchampalimaud/cf.bonsai/blob/main/docs/workflows/BonsaiExamples/IO/ProcessFileList/file1.txt) and [file2.txt](https://github.com/fchampalimaud/cf.bonsai/blob/main/docs/workflows/BonsaiExamples/IO/ProcessFileList/file1.txt) to a directory, and modify the Path property in the GetFiles node accordingly. ## Follow up -A more elaborated example for processing a list of files can be found [here](/workflows/BonsaiExamples/IO/RefinedFileListProcessing/RefinedFileListProcessing.html) +A more elaborated example for processing a list of files can be found [here](../ElaborateFileListProcessing/ElaborateFileListProcessing.md). diff --git a/docs/workflows/BonsaiExamples/IO/ElaborateFileListProcessing/ElaborateFileListProcessing.md b/docs/workflows/BonsaiExamples/IO/ElaborateFileListProcessing/ElaborateFileListProcessing.md index 3a53e66..1d95bfc 100644 --- a/docs/workflows/BonsaiExamples/IO/ElaborateFileListProcessing/ElaborateFileListProcessing.md +++ b/docs/workflows/BonsaiExamples/IO/ElaborateFileListProcessing/ElaborateFileListProcessing.md @@ -1,15 +1,13 @@ -# Elaborate file list processing +# Elaborate File List Processing ## Summary -This example demonstrates how to serially process a list of files in a given directory (and including subdirectories), and generate output files accordingly. - +This example demonstrates how to serially process a list of files in a given directory (including subdirectories) and generate output files accordingly. ## Workflow :::workflow ![Example](~/workflows/BonsaiExamples/IO/ElaborateFileListProcessing/ElaborateFileListProcessing.bonsai) ::: - ## Details 1. Obtains a list of files from an input directory and initializes the necessary subjects to run the workflow. The input directory, the file search pattern, and the output directory can be set as properties of the group node. 2. Processes each file sequentially. @@ -24,6 +22,3 @@ This example demonstrates how to serially process a list of files in a given dir *Before running the code you need to download this [folder](https://drive.google.com/drive/folders/1mqcMzhN2vP5cOGFi4CCXcgHYZ6bmlk9m?usp=sharing), and modify the *Input path* property in the *Init File Processing* node in 1. - - - diff --git a/docs/workflows/BonsaiExamples/Numeric.Distributions/SampleDiscreteUniformDistribution/SampleDiscreteUniformDistribution.md b/docs/workflows/BonsaiExamples/Numeric.Distributions/SampleDiscreteUniformDistribution/SampleDiscreteUniformDistribution.md index 92b8838..2e703e1 100644 --- a/docs/workflows/BonsaiExamples/Numeric.Distributions/SampleDiscreteUniformDistribution/SampleDiscreteUniformDistribution.md +++ b/docs/workflows/BonsaiExamples/Numeric.Distributions/SampleDiscreteUniformDistribution/SampleDiscreteUniformDistribution.md @@ -1,15 +1,14 @@ # Sample Discrete Uniform Distribution +## Summary +This example demonstrates how to randomly sample from a discrete uniform distribution. + ## Workflow :::workflow ![Example](~/workflows//BonsaiExamples/Numeric.Distributions/SampleDiscreteUniformDistribution/SampleDiscreteUniformDistribution.bonsai) ::: - -## Summary -This example demostrates how to randomly sample from a discrete uniform distribution. - ## Details 1. Creates BehaviorSubject (MyDistribution) with a discrete uniform distribution with values ranging from 0 to 10. 2. Samples randomly from MyDistribution when 'A' is pressed. @@ -19,5 +18,3 @@ Visualize the output of Sample node using the TimeSeriesVisualized and while mai If you want to repeat the same randomly sampled values everytime Bonsai is started set the Seed property to a value in the CreateRandom node. **Important Note:** If you want to sample more than once from a given distribution do not connect the Sample directly to the output of the CreateDiscreteUniform node. This will recreate the distribution everytime you take sample, which will result in undesired results. - - diff --git a/docs/workflows/BonsaiExamples/Numeric.Distributions/SampleNormalDistribution/SampleNormalDistribution.md b/docs/workflows/BonsaiExamples/Numeric.Distributions/SampleNormalDistribution/SampleNormalDistribution.md index c0b9e2c..3927bc2 100644 --- a/docs/workflows/BonsaiExamples/Numeric.Distributions/SampleNormalDistribution/SampleNormalDistribution.md +++ b/docs/workflows/BonsaiExamples/Numeric.Distributions/SampleNormalDistribution/SampleNormalDistribution.md @@ -1,4 +1,7 @@ -# Sample Nomrmal Distribution +# Sample Normal Distribution + +## Summary +This example demonstrates how to randomly sample from a continuous normal distribution. ## Workflow @@ -6,10 +9,6 @@ ![Example](~/workflows//BonsaiExamples/Numeric.Distributions/SampleNormalDistribution/SampleNormalDistribution.bonsai) ::: - -## Summary -This example demostrates how to randomly sample from a continuous normal distribution. - ## Details 1. Creates BehaviorSubject (MyDistribution) with a normal distribution with mean of 0 and standard deviation of 1. 2. Samples randomly from MyDistribution when 'A' is pressed. @@ -19,5 +18,3 @@ Visualize the output of Sample node using the TimeSeriesVisualized and while mai If you want to repeat the same randomly sampled values everytime Bonsai is started set the Seed property to a value in the CreateRandom node. **Important Note:** If you want to sample more than once from a given distribution do not connect the Sample directly to the output of the CreateNormal node. This will recreate the distribution everytime you take sample, which will result in undesired results. - - diff --git a/docs/workflows/BonsaiExamples/Osc/UDPSendAndReceive/UDPSendAndReceive.md b/docs/workflows/BonsaiExamples/Osc/UDPSendAndReceive/UDPSendAndReceive.md index 211390f..da4b706 100644 --- a/docs/workflows/BonsaiExamples/Osc/UDPSendAndReceive/UDPSendAndReceive.md +++ b/docs/workflows/BonsaiExamples/Osc/UDPSendAndReceive/UDPSendAndReceive.md @@ -1,21 +1,21 @@ # Udp Server and Client +## Summary +This example demonstrates how to setup an Osc server and an Osc client, and how messages can be sent from one to the other. + ## Workflow :::workflow ![Example](~/workflows//BonsaiExamples/Osc/UDPSendAndReceive/UDPSendAndReceive.bonsai) ::: -## Summary -This example demostrates how to setup an Osc server and an Osc client, and how messages can be sent from one to the other. - ## Details 1. Creates a udp communication channel. In this example, this channel will be listening in port 2323, the messages sent by localhost port 0. 2. Creates a second udp communication channel. In this example, this channel will use port 0, to send messages to localhost port 2323. -3. Generates and sends an Osc message with the x and y position of the mouse whevever the mouse moves. +3. Generates and sends an Osc message with the x and y position of the mouse whenever the mouse moves. 4. Emits events whenever a message is received with the x and y coordinates of the mouse. ## Follow-up -In this example the communcation is done via the localhost (i.e. it uses the same machine both for sending and receiving messages). However, the code can be run in different machines (as far as the machines are in the same LAN network), where the mouse movements executed in one can be sent to the other. To do, this you only need to change the localhost in UdpReceive and UdpSend by the IP addresses of both each machine. +In this example the communication is done via the localhost (i.e. it uses the same machine both for sending and receiving messages). However, the code can be run in different machines (as far as the machines are in the same LAN network), where the mouse movements executed in one can be sent to the other. To do this, you only need to change the localhost in UdpReceive and UdpSend by the IP addresses of both each machine. diff --git a/docs/workflows/BonsaiExamples/Vision/ColumnwiseOperations/ColumnwiseOperations.md b/docs/workflows/BonsaiExamples/Vision/ColumnwiseOperations/ColumnwiseOperations.md index 9768378..d2f7962 100644 --- a/docs/workflows/BonsaiExamples/Vision/ColumnwiseOperations/ColumnwiseOperations.md +++ b/docs/workflows/BonsaiExamples/Vision/ColumnwiseOperations/ColumnwiseOperations.md @@ -1,4 +1,4 @@ -# Columnwise Operations +# Column-wise Operations ## Summary This example demonstrates how to project information of a matrix (in this case an image) into a single row vector using the max function. @@ -13,4 +13,4 @@ This example demonstrates how to project information of a matrix (in this case a 2. Project the max values of each column to a single row vector. ## Follow-up -In addition the Max function one can use the Min, Sum, or Mean values. Row-wise operations can also be used by setting the Axis property in the Reduce node to 1. \ No newline at end of file +In addition the Max function one can use the Min, Sum, or Mean values. Row-wise operations can also be used by setting the Axis property in the Reduce node to 1. diff --git a/docs/workflows/BonsaiExamples/Vision/ComposeImageLineByLine/ComposeImageLineByLine.md b/docs/workflows/BonsaiExamples/Vision/ComposeImageLineByLine/ComposeImageLineByLine.md index 7d463b2..6d81c90 100644 --- a/docs/workflows/BonsaiExamples/Vision/ComposeImageLineByLine/ComposeImageLineByLine.md +++ b/docs/workflows/BonsaiExamples/Vision/ComposeImageLineByLine/ComposeImageLineByLine.md @@ -13,11 +13,9 @@ This example demonstrates how to compose full images by appending single lines. 1. Initializes the behavior subjects necessary to run the example. It receives the *Width* and *Height* of the image as properties and it creates two subjects: *Black Line*, which consists of an image of a single black line, and *Temporary Image* which is initialized with the black line. In addition, it creates a random generator from which the pixel values will be sampled from. 2. Creates an image with random values whenever 'S' is pressed. 1. Initializes the *Temporary Image* subject to a single black line. - 2. Emits a value for every line that will need to be generated + 2. Emits a value for every line that will need to be generated. 3. Generates a new line with random values for each value emited in 2.2. 4. Appends the current line to the *Temporary Image*. 5. Checks if all lines have been generated. 6. When all lines have been generated, it crops the image to remove the black line. 7. Creates a subject with the finished image. - - diff --git a/docs/workflows/BonsaiExamples/Vision/DynamicCropping/DynamicCropping.md b/docs/workflows/BonsaiExamples/Vision/DynamicCropping/DynamicCropping.md index 68df1af..0b993a4 100644 --- a/docs/workflows/BonsaiExamples/Vision/DynamicCropping/DynamicCropping.md +++ b/docs/workflows/BonsaiExamples/Vision/DynamicCropping/DynamicCropping.md @@ -11,7 +11,7 @@ This example demonstrates how to set dynamically the values of a compound proper ## Details -1. Creates an image black image with three white circles whenever 'S' is pressed. +1. Creates a black image with three white circles whenever 'S' is pressed. 1. Creates a black canvas. 2. Adds three white circles. 3. Creates an image with the filled image. diff --git a/docs/workflows/BonsaiExamples/Vision/MP4Writer/MP4Writer.md b/docs/workflows/BonsaiExamples/Vision/MP4Writer/MP4Writer.md index a660f6c..ccc02b1 100644 --- a/docs/workflows/BonsaiExamples/Vision/MP4Writer/MP4Writer.md +++ b/docs/workflows/BonsaiExamples/Vision/MP4Writer/MP4Writer.md @@ -10,21 +10,19 @@ This example shows how to save a MP4 video using [FFMPEG](https://website-name.c ::: ## Details -0. Before running workflow download and unzip [ffmpeg](https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl-shared.zip) to a folder in your computer. +0. Before running the workflow, download and unzip [ffmpeg](https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl-shared.zip) to a folder in your computer. 1. Write the frames from a camera into ImageWriter, but in the path, instead of a file, you will add a pipe: \\\\.\pipe\video. Every frame that is written in the pipe is going to be sent the process in 2. 2. Start a process where the filename points to the ffmpeg executable \[ffmpeg\]\bin\ffmpeg.exe and the arguments are those of ffmpeg. Here we are using: -y -f rawvideo -vcodec rawvideo -s 640x480 -r 30 -pix_fmt gray -i \\\\.\pipe\video -c:v libx264 -b:v 5212K -maxrate 5212K -bufsize 5M "myvideo.mp4" - Options that might need to be adapted for your situation are: - - the size (width and height) of the input images (-s) - - the frame rate (-r) - - the input pixel format (-pix_fmt) - - the name of the output video (last parameter) - - in case the encoding is rather slow, you might want to append the option '-preset ultrafast' to speed it up. +Options that might need to be adapted for your situation are: +- the size (width and height) of the input images (-s) +- the frame rate (-r) +- the input pixel format (-pix_fmt) +- the name of the output video (last parameter) +- in case the encoding is rather slow, you might want to append the option '-preset ultrafast' to speed it up. - ## Follow-up +## Follow-up For additional information on the encoding options provided by ffmpeg consult the [documentation](https://ffmpeg.org/ffmpeg.html). - - diff --git a/docs/workflows/BonsaiExamples/Vision/RegionTrackingHSV/RegionTrackingHSV.md b/docs/workflows/BonsaiExamples/Vision/RegionTrackingHSV/RegionTrackingHSV.md index 47c0fda..cadd3b2 100644 --- a/docs/workflows/BonsaiExamples/Vision/RegionTrackingHSV/RegionTrackingHSV.md +++ b/docs/workflows/BonsaiExamples/Vision/RegionTrackingHSV/RegionTrackingHSV.md @@ -12,9 +12,8 @@ This example demonstrates how to setup a simple tracker based on thresholding th 1. Convert the image to HSV space (hue, saturation, value). This space is advantageous because it allows the user to separate colors, using only the hue channel, independently of the overall image brightness. 2. Threshold each of the HSV channels between a lower and an upper bound. Modify those bounds such that your particular object can be separated from the background. 3. In the thresholded image, find regions of contiguous pixels. You can set a minimum and/or a maximum number of acceptable contiguous pixels. -4. For each region identified, calculate a number of properties, such as position of the centoid, orientation, etc. +4. For each region identified, calculate a number of properties, such as position of the centroid, orientation, etc. 5. From the list of selected regions, select the largest region and show the x and y position of the centroid. ## Follow-up -See also RegionTrakingRGB [ADD LINK] example. - +See also the [RegionTrakingRGB](../RegionTrackingRGB/RegionTrackingRGB.md) example. diff --git a/docs/workflows/BonsaiExamples/Vision/RegionTrackingRGB/RegionTrackingRGB.md b/docs/workflows/BonsaiExamples/Vision/RegionTrackingRGB/RegionTrackingRGB.md index 25697db..991a901 100644 --- a/docs/workflows/BonsaiExamples/Vision/RegionTrackingRGB/RegionTrackingRGB.md +++ b/docs/workflows/BonsaiExamples/Vision/RegionTrackingRGB/RegionTrackingRGB.md @@ -1,20 +1,18 @@ # Region Tracking RGB ## Summary -This example demonstrates how setup a simple tracker based on thresholding the RGB channels. +This example demonstrates how to setup a simple tracker based on thresholding the RGB channels. ## Workflow :::workflow ![Example](~/workflows/BonsaiExamples/Vision/RegionTrackingRGB/RegionTrackingRGB.bonsai) ::: - ## Details 1. Threshold each of the input channels between a lower and an upper bound. Modify those bounds such that your particular object can be separated from the background. 2. In the thresholded image, find regions of contiguous pixels. You can set a minimum and/or a maximum number of acceptable contiguous pixels. -3. For each region identified, calculate a number of properties, such as position of the centoid, orientation, etc. +3. For each region identified, calculate a number of properties, such as position of the centroid, orientation, etc. 4. From the list of selected regions, select the largest region and show the x and y position of the centroid. ## Follow-up -See also RegionTrakingHSV [ADD LINK] example. - +See also the [RegionTrackingHSV](../RegionTrackingHSV/RegionTrackingHSV.md) example. diff --git a/docs/workflows/BonsaiExamples/Vision/VideoAnnotation/VideoAnnotation.md b/docs/workflows/BonsaiExamples/Vision/VideoAnnotation/VideoAnnotation.md index a7c8cb5..3f490f9 100644 --- a/docs/workflows/BonsaiExamples/Vision/VideoAnnotation/VideoAnnotation.md +++ b/docs/workflows/BonsaiExamples/Vision/VideoAnnotation/VideoAnnotation.md @@ -1,7 +1,7 @@ # Video Annotation ## Summary -This example demonstrates how to add a circular marker to a camera image and save the resuting annotated video. +This example demonstrates how to add a circular marker to a camera image and save the resulting annotated video. ## Workflow :::workflow diff --git a/docs/workflows/HarpExamples/BehaviorBoard/AnalogInput/AnalogInput.md b/docs/workflows/HarpExamples/BehaviorBoard/AnalogInput/AnalogInput.md index 4b13fb4..e066455 100644 --- a/docs/workflows/HarpExamples/BehaviorBoard/AnalogInput/AnalogInput.md +++ b/docs/workflows/HarpExamples/BehaviorBoard/AnalogInput/AnalogInput.md @@ -18,7 +18,7 @@ This example demonstrates how to read analog input values from a potentiometer u ## Requirements -This example requires the folowing Bonsai packages: +This example requires the following Bonsai packages: - Harp - Behavior (from nuget.org) diff --git a/docs/workflows/HarpExamples/BehaviorBoard/CameraTrigger/CameraTrigger.md b/docs/workflows/HarpExamples/BehaviorBoard/CameraTrigger/CameraTrigger.md index 092f8da..cfbbe71 100644 --- a/docs/workflows/HarpExamples/BehaviorBoard/CameraTrigger/CameraTrigger.md +++ b/docs/workflows/HarpExamples/BehaviorBoard/CameraTrigger/CameraTrigger.md @@ -1,34 +1,25 @@ # Camera Trigger - ## Summary This example demonstrates how to trigger frames from a camera using the [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board (see hardware schematics below). - ## Workflow :::workflow ![Example](~/workflows/HarpExamples/BehaviorBoard/CameraTrigger/CameraTrigger.bonsai) ::: - - ## Details -1. Establishes the commands to be sent to the Behavior board and publishes all the events from the device. The PortName property in the Behavior node needs to be set to the COM device on the computer. To create the subbject node, right-click on the Behavior node -> Create Source -> Behavior Subject, and name it accordingly. +1. Establishes the commands to be sent to the Behavior board and publishes all the events from the device. The PortName property in the Behavior node needs to be set to the COM device on the computer. To create the subject node, right-click on the Behavior node -> Create Source -> Behavior Subject, and name it accordingly. 2. Sets the acquisition frequency of the camera. 3. Enables the camera triggers when 'A' is pressed. 4. Disables the camera triggers when 'S' is pressed. 5. Ensures that command messages are sent only when the device is ready. ## Requirements -This example requires the folowing Bonsai packages: +This example requires the following Bonsai packages: - Harp - Behavior (from nuget.org) - ## Schematics The [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board can trigger two cameras using specific PWM signals in ports DO0 and DO1. The DOs output voltage is 5V. In this example, the board triggers frames from a PointGrey camera connected to DO0. ![Schematics](./CameraTrigger.png){ width=65% } - - - - diff --git a/docs/workflows/HarpExamples/BehaviorBoard/DIOInput/DIOInput.md b/docs/workflows/HarpExamples/BehaviorBoard/DIOInput/DIOInput.md index 6673cb6..0afb9f3 100644 --- a/docs/workflows/HarpExamples/BehaviorBoard/DIOInput/DIOInput.md +++ b/docs/workflows/HarpExamples/BehaviorBoard/DIOInput/DIOInput.md @@ -3,25 +3,21 @@ ## Summary This example demonstrates how to read digital input values from the DIO Port0 using the [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board (see hardware schematics below). - ## Workflow :::workflow ![Example](~/workflows/HarpExamples/BehaviorBoard/DIOInput/DIOInput.bonsai) ::: - ## Details 1. Creates a connection with the Behavior board. The PortName property in the Behavior node needs to be set to the COM device on the computer. 2. Filters the messages from the Behavior board that pertain DIO port inputs. 3. Selects the DIO0 from the list of possible DIO inputs (see the output of the Parse node in 2). - ## Requirements -This example requires the folowing Bonsai packages: +This example requires the following Bonsai packages: - Harp - Behavior (from nuget.org) - ## Schematics The [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board has seven digital input channels: DIPort0, DIOPort0, DIPort1, DIOPort1, DIPort2, DIOPort2, and DI3. The maximum tolerable voltage at these ports is 5V. In this example, the board receives a digital input signal from a switch connected to DIOPort0. diff --git a/docs/workflows/HarpExamples/BehaviorBoard/DigitalInput/DigitalInput.md b/docs/workflows/HarpExamples/BehaviorBoard/DigitalInput/DigitalInput.md index df0ffbe..7d0a409 100644 --- a/docs/workflows/HarpExamples/BehaviorBoard/DigitalInput/DigitalInput.md +++ b/docs/workflows/HarpExamples/BehaviorBoard/DigitalInput/DigitalInput.md @@ -9,8 +9,6 @@ This example demonstrates how to get the digital input values from a switch usin ![Example](~/workflows/HarpExamples/BehaviorBoard/DigitalInput/DigitalInput.bonsai) ::: - - ## Details 1. Creates a subject node to send commands to the Behavior board and publishes all the events from the device. The PortName property in the Behavior node needs to be set to the COM device on the computer. To create the subject node, right-click on the Behavior node -> Create Source -> Behavior Subject, and name it accordingly. 1. Filters event messages associated with the state of digital inputs. @@ -21,10 +19,9 @@ This example demonstrates how to get the digital input values from a switch usin 3. Ensures that command messages are sent only when the device is ready. ## Requirements -This example requires the folowing Bonsai packages: +This example requires the following Bonsai packages: - Harp - Behavior (from nuget.org) - ## Schematics The [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board has four digital input channels: DIPort0, DIPort1, DIPort2, and DI3. The maximum tolerable voltage at these ports is 5V. In this example, the board receives a digital input signal from a switch connected to DI3. diff --git a/docs/workflows/HarpExamples/BehaviorBoard/DigitalOutput/DigitalOutput.md b/docs/workflows/HarpExamples/BehaviorBoard/DigitalOutput/DigitalOutput.md index 7eff17b..13fa4d5 100644 --- a/docs/workflows/HarpExamples/BehaviorBoard/DigitalOutput/DigitalOutput.md +++ b/docs/workflows/HarpExamples/BehaviorBoard/DigitalOutput/DigitalOutput.md @@ -3,32 +3,24 @@ ## Summary This example demonstrates how to control the ON/OFF state of an LED using the digital output from the [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board (see hardware schematics below). - ## Workflow :::workflow ![Example](~/workflows/HarpExamples/BehaviorBoard/DigitalOutput/DigitalOutput.bonsai) ::: - ## Details -1. Establishes the commands to be sent to the Behavior board and publishes all the events from the device. The PortName property in the Behavior node needs to be set to the COM device on the computer. To create the subbject node, right-click on the Behavior node -> Create Source -> Behavior Subject, and name it accordingly. +1. Establishes the commands to be sent to the Behavior board and publishes all the events from the device. The PortName property in the Behavior node needs to be set to the COM device on the computer. To create the subject node, right-click on the Behavior node -> Create Source -> Behavior Subject, and name it accordingly. 2. Turns the LED ON when 'A' is pressed. 3. Turns the LED OFF when 'S' is pressed 4. Ensures that command messages are sent only when the device is ready. ## Requirements -This example requires the folowing Bonsai packages: +This example requires the following Bonsai packages: - Harp - Behavior (from nuget.org) - ## Schematics The [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board can control four digital output ports: DO0, DO1, DO2, and DO3. The DOs output voltage is 5V. In this example, the board controls the ON/OFF state of an LED connected to DO0. A resistor of 200Ohm is used to drop the current passing through the LED and prevent it from burning. ![Schematics](./DigitalOutput.png){ width=65% } ## Follow-up - - - - - diff --git a/docs/workflows/HarpExamples/BehaviorBoard/DigitalOutputPulse/DigitalOutputPulse.md b/docs/workflows/HarpExamples/BehaviorBoard/DigitalOutputPulse/DigitalOutputPulse.md index 1ef53b3..dddd044 100644 --- a/docs/workflows/HarpExamples/BehaviorBoard/DigitalOutputPulse/DigitalOutputPulse.md +++ b/docs/workflows/HarpExamples/BehaviorBoard/DigitalOutputPulse/DigitalOutputPulse.md @@ -3,33 +3,23 @@ ## Summary This example demonstrates how to trigger a digital pulse, with a fixed duration, on an LED using the digital output from the [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board (see hardware schematics below). - ## Workflow :::workflow ![Example](~/workflows/HarpExamples/BehaviorBoard/DigitalOutputPulse/DigitalOutputPulse.bonsai) ::: - ## Details -1. Establishes the commands to be sent to the Behavior board and publishes all the events from the device. The PortName property in the Behavior node needs to be set to the COM device on the computer. To create the subbject node, right-click on the Behavior node -> Create Source -> Behavior Subject, and name it accordingly. +1. Establishes the commands to be sent to the Behavior board and publishes all the events from the device. The PortName property in the Behavior node needs to be set to the COM device on the computer. To create the subject node, right-click on the Behavior node -> Create Source -> Behavior Subject, and name it accordingly. 2. Enables triggering pulses in port DO0. 3. Sets the pulse duration to 1000ms. 4. Triggers the pulse whenever 'A' is pressed. 5. Ensures that command messages are sent only when the device is ready. ## Requirements -This example requires the folowing Bonsai packages: +This example requires the following Bonsai packages: - Harp - Behavior (from nuget.org) ## Schematics The [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board can trigger pulses in seven digital output ports: DO0, DO1, DO2, DO3, DOPort0, DOPort1, DOPort2, and the LED current ports: Led0, Led1. The output voltage of these ports is 5V. In this example, the delivers a digital pulse to an LED connected to DO0. A resistor of 200Ohm is used to drop the current passing through the LED and prevent it from burning. ![Schematics](./DigitalOutputPulse.png){ width=65% } - - - - - - - - diff --git a/docs/workflows/HarpExamples/BehaviorBoard/LEDToggle/LEDToggle.md b/docs/workflows/HarpExamples/BehaviorBoard/LEDToggle/LEDToggle.md index 25aa931..a5453d8 100644 --- a/docs/workflows/HarpExamples/BehaviorBoard/LEDToggle/LEDToggle.md +++ b/docs/workflows/HarpExamples/BehaviorBoard/LEDToggle/LEDToggle.md @@ -1,36 +1,26 @@ # LED Toggle ## Summary -This example demonstrates how to control the britness of an LED using the current driven ports in the [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board (see hardware schematics below). - +This example demonstrates how to control the brightness of a LED using the current driven ports in the [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board (see hardware schematics below). ## Workflow :::workflow ![Example](~/workflows/HarpExamples/BehaviorBoard/LEDToggle/LEDToggle.bonsai) ::: - ## Details -1. Establishes the commands to be sent to the Behavior board and publishes all the events from the device. The PortName property in the Behavior node needs to be set to the COM device on the computer. To create the subbject node, right-click on the Behavior node -> Create Source -> Behavior Subject, and name it accordingly. +1. Establishes the commands to be sent to the Behavior board and publishes all the events from the device. The PortName property in the Behavior node needs to be set to the COM device on the computer. To create the subject node, right-click on the Behavior node -> Create Source -> Behavior Subject, and name it accordingly. 2. Sets the maximum current to be sent to the LED as a precaution. 3. Sets the actual current to be sent to the LED. -4. Turns the LED ON when 'A' i pressed. +4. Turns the LED ON when 'A' is pressed. 5. Turns the LED OFF when 'S' is pressed. 6. Ensures that command messages are sent only when the device is ready. ## Requirements -This example requires the folowing Bonsai packages: +This example requires the following Bonsai packages: - Harp - Behavior (from nuget.org) - ## Schematics The [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board has two current sources: Led0 and Led1. In this example, the board controls controls the brightness of an LED connected to Led0. ![Schematics](./LEDToggle.png){ width=65% } - - - - - - - diff --git a/docs/workflows/HarpExamples/BehaviorBoard/LogAll/LogAll.md b/docs/workflows/HarpExamples/BehaviorBoard/LogAll/LogAll.md index 9f03713..7dc1fb0 100644 --- a/docs/workflows/HarpExamples/BehaviorBoard/LogAll/LogAll.md +++ b/docs/workflows/HarpExamples/BehaviorBoard/LogAll/LogAll.md @@ -14,7 +14,7 @@ Const Const ## Requirements -This example requires the folowing Bonsai packages: +This example requires the following Bonsai packages: - Harp - Behavior (from nuget.org) diff --git a/docs/workflows/HarpExamples/BehaviorBoard/LogSelected/LogSelected.md b/docs/workflows/HarpExamples/BehaviorBoard/LogSelected/LogSelected.md index 0e03b71..b2456e3 100644 --- a/docs/workflows/HarpExamples/BehaviorBoard/LogSelected/LogSelected.md +++ b/docs/workflows/HarpExamples/BehaviorBoard/LogSelected/LogSelected.md @@ -3,15 +3,13 @@ ## Summary This example demonstrates how to log the events that control the ON/OFF state of an LED using the [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board (see hardware schematics below). - ## Workflow :::workflow ![Example](~/workflows/HarpExamples/BehaviorBoard/LogSelected/LogSelected.bonsai) ::: - ## Details -1. Establishes the commands to be sent to the Behavior board and publishes all the events from the device. The PortName property in the Behavior node needs to be set to the COM device on the computer. To create the subbject node, right-click on the Behavior node -> Create Source -> Behavior Subject, and name it accordingly. +1. Establishes the commands to be sent to the Behavior board and publishes all the events from the device. The PortName property in the Behavior node needs to be set to the COM device on the computer. To create the subject node, right-click on the Behavior node -> Create Source -> Behavior Subject, and name it accordingly. 1. Filters all the messages from the Behavior board that set digital output ports to ON. 2. Filters all the messages from the Behavior board that set digital output ports to OFF. 2. Turns the LED ON when 'A' is pressed. @@ -19,12 +17,10 @@ This example demonstrates how to log the events that control the ON/OFF state of 4. Ensures that command messages are sent only when the device is ready. ## Requirements -This example requires the folowing Bonsai packages: +This example requires the following Bonsai packages: - Harp - Behavior (from nuget.org) ## Schematics All the messages to and from the [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) can be logged. In this example, only data relative setting and clearing of digital output ports is logged. ![Schematics](./LogSelected.png){ width=65% } - - diff --git a/docs/workflows/HarpExamples/BehaviorBoard/PWMToggle/PWMToggle.md b/docs/workflows/HarpExamples/BehaviorBoard/PWMToggle/PWMToggle.md index 6a45425..b9a4267 100644 --- a/docs/workflows/HarpExamples/BehaviorBoard/PWMToggle/PWMToggle.md +++ b/docs/workflows/HarpExamples/BehaviorBoard/PWMToggle/PWMToggle.md @@ -1,17 +1,15 @@ # PWM Toggle ## Summary -This example demonstrates how to control a PWM signal to drive the brightness of an LED using the [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board (see hardware schematics below). - +This example demonstrates how to control a PWM signal to drive the brightness of a LED using the [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board (see hardware schematics below). ## Workflow :::workflow ![Example](~/workflows/HarpExamples/BehaviorBoard/PWMToggle/PWMToggle.bonsai) ::: - ## Details -1. Establishes the commands to be sent to the Behavior board. The PortName property in the Behavior node needs to be set to the COM device on the computer. To create the subbject node, right-click on the Behavior node -> Create Source -> Behavior Subject, and name it accordingly. +1. Establishes the commands to be sent to the Behavior board. The PortName property in the Behavior node needs to be set to the COM device on the computer. To create the subject node, right-click on the Behavior node -> Create Source -> Behavior Subject, and name it accordingly. 2. Sets the duty cycle of the PWM signal to 50%. 3. Initiates the PWM signal. 4. Sets the PWM frequency to 1Hz when 'A' is pressed. @@ -19,14 +17,10 @@ This example demonstrates how to control a PWM signal to drive the brightness of 6. Ensures that command messages are sent only when the device is ready. ## Requirements -This example requires the folowing Bonsai packages: +This example requires the following Bonsai packages: - Harp - Behavior (from nuget.org) ## Schematics -The [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board can control four PWM sources in ports: DO0, DO1, DO2 and DO3. The DOs output voltage is 5V. In this example, the board controls controls the brightness of an LED connected to DO0. A resistor of 200Ohm is used to drop the current passing through the LED and prevent it from burning. +The [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board can control four PWM sources in ports: DO0, DO1, DO2 and DO3. The DOs output voltage is 5V. In this example, the board controls the brightness of a LED connected to DO0. A resistor of 200Ohm is used to drop the current passing through the LED and prevent it from burning. ![Schematics](./PWMToggle.png){ width=65% } - - - - diff --git a/docs/workflows/HarpExamples/BehaviorBoard/QuadratureEncoder/QuadratureEncoder.md b/docs/workflows/HarpExamples/BehaviorBoard/QuadratureEncoder/QuadratureEncoder.md index 04a5e42..5c2c927 100644 --- a/docs/workflows/HarpExamples/BehaviorBoard/QuadratureEncoder/QuadratureEncoder.md +++ b/docs/workflows/HarpExamples/BehaviorBoard/QuadratureEncoder/QuadratureEncoder.md @@ -1,18 +1,15 @@ # Quadrature Encoder ## Summary -This example demonstrates how obtain the position values of a quadrature encoder using the [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board (see hardware schematics below). - +This example demonstrates how to obtain the position values of a quadrature encoder using the [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board (see hardware schematics below). ## Workflow :::workflow ![Example](~/workflows/HarpExamples/BehaviorBoard/QuadratureEncoder/QuadratureEncoder.bonsai) ::: - - ## Details -1. Establishes the commands to be sent to the Behavior board and publishes all the events from the device. The PortName property in the Behavior node needs to be set to the COM device on the computer. To create the subbject node, right-click on the Behavior node -> Create Source -> Behavior Subject, and name it accordingly. +1. Establishes the commands to be sent to the Behavior board and publishes all the events from the device. The PortName property in the Behavior node needs to be set to the COM device on the computer. To create the subject node, right-click on the Behavior node -> Create Source -> Behavior Subject, and name it accordingly. 1. Filters the messages from the Behavior board that pertain analog inputs. 2. Selects the Encoder from the list of possible analog outputs (see the output of the Parse node in 1.2). 2. Resets the quadrature encoder counts such that the encoder starts at zero. @@ -20,11 +17,10 @@ This example demonstrates how obtain the position values of a quadrature encoder 4. Ensures that command messages are sent only when the device is ready. ## Requirements -This example requires the folowing Bonsai packages: +This example requires the following Bonsai packages: - Harp - Behavior (from nuget.org) ## Schematics The [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board can read the position value of one quadrature encoder connected to Port2. The encoder in the schematics is the [ENC1J-D28-L00128L](https://www.digikey.be/en/products/detail/bourns-inc/ENC1J-D28-L00128L/1089391). ![Schematics](./QuadratureEncoder.png){ width=65% } - diff --git a/docs/workflows/HarpExamples/BehaviorBoard/ServoMotorControl/ServoMotorControl.md b/docs/workflows/HarpExamples/BehaviorBoard/ServoMotorControl/ServoMotorControl.md index 80436a6..cba8222 100644 --- a/docs/workflows/HarpExamples/BehaviorBoard/ServoMotorControl/ServoMotorControl.md +++ b/docs/workflows/HarpExamples/BehaviorBoard/ServoMotorControl/ServoMotorControl.md @@ -1,41 +1,29 @@ # Servo Motor Control - ## Summary This example demonstrates how to control a servo motor using the [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board (see hardware schematics below). - ## Workflow :::workflow ![Example](~/workflows/HarpExamples/BehaviorBoard/ServoMotorControl/ServoMotorControl.bonsai) ::: - - ## Details -1. Establishes the commands to be sent to the Behavior board. To create the subbject node, right-click on the Behavior node -> Create Source -> Behavior Subject, and name it accordingly. -2. Sets the period of the servo motor's pwm in microseconds. Normal servos use a period of 20.000us. +1. Establishes the commands to be sent to the Behavior board. To create the subject node, right-click on the Behavior node -> Create Source -> Behavior Subject, and name it accordingly. +2. Sets the period of the servo motor's PWM in microseconds. Normal servos use a period of 20000us. 3. Enables the servo motor when 'A' is pressed. 4. Disables the servo motor when 'S' is pressed. 5. Sets the desired angle of the servo motor. - 1. Converts the angle into a pwm pulse width, which typically ranges between a minimum value of 1000us and a maximum value of 2000us. + 1. Converts the angle into a PWM pulse width, which typically ranges between a minimum value of 1000us and a maximum value of 2000us. 2. Converts the pulse width into an integer value. 3. Sets the pulse width property of the servo motor and emits a new event forward. 4. Creates a new Harp message with the new pulse width. ## Requirements -This example requires the folowing Bonsai packages: +This example requires the following Bonsai packages: - Harp - Behavior - ## Schematics The [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board can control two servo motors in ports DO2 and DO3. The DOs output voltage is 5V. In this example, the board controls controls the position of a servo motor connected to DO2. ![Schematics](./ServoMotorControl.png){ width=65% } - - - - - - - diff --git a/docs/workflows/HarpExamples/BehaviorBoard/ServoMotorToggle/ServoMotorToggle.md b/docs/workflows/HarpExamples/BehaviorBoard/ServoMotorToggle/ServoMotorToggle.md index 7ea6605..085e473 100644 --- a/docs/workflows/HarpExamples/BehaviorBoard/ServoMotorToggle/ServoMotorToggle.md +++ b/docs/workflows/HarpExamples/BehaviorBoard/ServoMotorToggle/ServoMotorToggle.md @@ -1,20 +1,16 @@ # Servo Motor Toggle - ## Summary This example demonstrates how to toggle a servo motor between two positions using [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board (see hardware schematics below). - ## Workflow :::workflow ![Example](~/workflows/HarpExamples/BehaviorBoard/ServoMotorToggle/ServoMotorToggle.bonsai) ::: - - ## Details -1. Establishes the commands to be sent to the Behavior board and publishes all the events from the device. To create the subbject node, right-click on the Behavior node -> Create Source -> Behavior Subject, and name it accordingly. -2. Sets the period of the servo motor's pwm in microseconds. Normal servos use a period of 20000us. +1. Establishes the commands to be sent to the Behavior board and publishes all the events from the device. To create the subject node, right-click on the Behavior node -> Create Source -> Behavior Subject, and name it accordingly. +2. Sets the period of the servo motor's PWM in microseconds. Normal servos use a period of 20000us. 3. Enables the servo motor. 4. Sets the minimum position of the servo motor when 'A' is pressed.* 5. Sets the maximum position of the servo motor when 'S' is pressed.* @@ -23,19 +19,10 @@ This example demonstrates how to toggle a servo motor between two positions usin *The angular position of servo motors is typically defined by the pulse width time of a PWM signal. This value typically ranges from 1000us (minimum) and 2000us (maximum). ## Requirements -This example requires the folowing Bonsai packages: +This example requires the following Bonsai packages: - Harp - Behavior - ## Schematics The [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board can control two servo motors in ports DO2 and DO3. The DOs output voltage is 5V. In this example, the board controls controls the position of a servo motor connected to DO2. ![Schematics](./ServoMotorToggle.png){ width=65% } - - - - - - - - diff --git a/docs/workflows/HarpExamples/SyringePump/ToggleMicroSteps/ToggleMicroSteps.md b/docs/workflows/HarpExamples/SyringePump/ToggleMicroSteps/ToggleMicroSteps.md index b21cabd..0618ca1 100644 --- a/docs/workflows/HarpExamples/SyringePump/ToggleMicroSteps/ToggleMicroSteps.md +++ b/docs/workflows/HarpExamples/SyringePump/ToggleMicroSteps/ToggleMicroSteps.md @@ -1,8 +1,7 @@ -# Toggle micro steps +# Toggle Micro Steps ## Summary -This example demonstrates how to get the analog input values from a potentiometer using the [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board (see hardware schematics below). - +This example demonstrates how to toggle micro steps using the [Harp SyringePump](https://harp-tech.org/api/Harp.SyringePump.html) board (see hardware schematics below). ## Workflow @@ -10,20 +9,10 @@ This example demonstrates how to get the analog input values from a potentiomete ![Example](~/workflows/HarpExamples/SyringePump/ToggleMicroSteps/ToggleMicroSteps.bonsai) ::: - - - ## Details ## Requirements This example requires: -1. An up-to-date version of the [SyringePump firmware](https://github.com/harp-tech/device.syringepump/releases). This example used the *fw0.6-harp1.6*. To upload the new firmware double click on the *SyringePump Device* node in Bonsai and follow the instructions. +1. An up-to-date version of the [SyringePump firmware](https://github.com/harp-tech/device.syringepump/releases). This example used the *fw0.6-harp1.6*. To upload the new firmware double-click on the *SyringePump Device* node in Bonsai and follow the instructions. 2. The installation of the Bonsai package *Harp - SyringePump* (from nuget.org) -3. It might also be useful to download the gui download the [SyringePump GUI](https://github.com/harp-tech/device.syringepump/releases). This used version *app1.0.1*. - - - - - - - +3. It might also be useful to download the [SyringePump GUI](https://github.com/harp-tech/device.syringepump/releases). diff --git a/docs/workflows/HarpExamples/SyringePump/ToggleMultipleSteps/ToggleMultipleSteps.md b/docs/workflows/HarpExamples/SyringePump/ToggleMultipleSteps/ToggleMultipleSteps.md index 1819af3..9e71b32 100644 --- a/docs/workflows/HarpExamples/SyringePump/ToggleMultipleSteps/ToggleMultipleSteps.md +++ b/docs/workflows/HarpExamples/SyringePump/ToggleMultipleSteps/ToggleMultipleSteps.md @@ -1,8 +1,7 @@ -# Toggle multiple steps +# Toggle Multiple Steps ## Summary -This example demonstrates how to get the analog input values from a potentiometer using the [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board (see hardware schematics below). - +This example demonstrates how to toggle multiple steps using the [Harp SyringePump](https://harp-tech.org/api/Harp.SyringePump.html) board (see hardware schematics below). ## Workflow @@ -10,20 +9,10 @@ This example demonstrates how to get the analog input values from a potentiomete ![Example](~/workflows/HarpExamples/SyringePump/ToggleMultipleSteps/ToggleMultipleSteps.bonsai) ::: - - - ## Details ## Requirements This example requires: -1. An up-to-date version of the [SyringePump firmware](https://github.com/harp-tech/device.syringepump/releases). This example used the *fw0.6-harp1.6*. To upload the new firmware double click on the *SyringePump Device* node in Bonsai and follow the instructions. -2. The installation of the Bonsai package *Harp - SyringePump* (from nuget.org) -3. It might also be useful to download the gui download the [SyringePump GUI](https://github.com/harp-tech/device.syringepump/releases). This used version *app1.0.1*. - - - - - - - +1. An up-to-date version of the [SyringePump firmware](https://github.com/harp-tech/device.syringepump/releases). This example used the *fw0.6-harp1.6*. To upload the new firmware double-click on the *SyringePump Device* node in Bonsai and follow the instructions. +2. The installation of the Bonsai package *Harp - SyringePump* (from nuget.org). +3. It might also be useful to download the [SyringePump GUI](https://github.com/harp-tech/device.syringepump/releases). diff --git a/docs/workflows/HarpExamples/SyringePump/ToggleSingleSteps/ToggleSingleSteps.md b/docs/workflows/HarpExamples/SyringePump/ToggleSingleSteps/ToggleSingleSteps.md index 2ab95aa..4b8490b 100644 --- a/docs/workflows/HarpExamples/SyringePump/ToggleSingleSteps/ToggleSingleSteps.md +++ b/docs/workflows/HarpExamples/SyringePump/ToggleSingleSteps/ToggleSingleSteps.md @@ -1,8 +1,7 @@ -# Toggle single steps +# Toggle Single Steps ## Summary -This example demonstrates how to get the analog input values from a potentiometer using the [Harp Behavior](https://harp-tech.org/api/Harp.Behavior.html) board (see hardware schematics below). - +This example demonstrates how to toggle single steps using the [Harp SyringePump](https://harp-tech.org/api/Harp.SyringePump.html) board (see hardware schematics below). ## Workflow @@ -10,20 +9,10 @@ This example demonstrates how to get the analog input values from a potentiomete ![Example](~/workflows/HarpExamples/SyringePump/ToggleSingleSteps/ToggleSingleSteps.bonsai) ::: - - - ## Details ## Requirements This example requires: -1. An up-to-date version of the [SyringePump firmware](https://github.com/harp-tech/device.syringepump/releases). This example used the *fw0.6-harp1.6*. To upload the new firmware double click on the *SyringePump Device* node in Bonsai and follow the instructions. +1. An up-to-date version of the [SyringePump firmware](https://github.com/harp-tech/device.syringepump/releases). This example used the *fw0.6-harp1.6*. To upload the new firmware double-click on the *SyringePump Device* node in Bonsai and follow the instructions. 2. The installation of the Bonsai package *Harp - SyringePump* (from nuget.org) -3. It might also be useful to download the gui download the [SyringePump GUI](https://github.com/harp-tech/device.syringepump/releases). This used version *app1.0.1*. - - - - - - - +3. It might also be useful to download the [SyringePump GUI](https://github.com/harp-tech/device.syringepump/releases). diff --git a/docs/workflows/ReactiveExamples/Delay/Delay.md b/docs/workflows/ReactiveExamples/Delay/Delay.md index a1fcb38..47beead 100644 --- a/docs/workflows/ReactiveExamples/Delay/Delay.md +++ b/docs/workflows/ReactiveExamples/Delay/Delay.md @@ -3,18 +3,15 @@ ## Summary This example demonstrates how to delay the propagation of an event using the *Delay* operator. Here, the notification of a key press is delayed by one second. - ## Workflow :::workflow ![Example](~/workflows/ReactiveExamples/Delay/Delay.bonsai) ::: - ## Details 1. Generates an event whenever a key is pressed. -2. Delays the propagation of the key pressed by one second - +2. Delays the propagation of the key pressed by one second. ## Visualization Compare the outputs of the *KeyDown* and *Delay* nodes using ObjectTextVisualizer enlarged, such that multiple events can be observed in each. diff --git a/docs/workflows/ReactiveExamples/Merge/Merge.md b/docs/workflows/ReactiveExamples/Merge/Merge.md index 4f65dd0..97a81e0 100644 --- a/docs/workflows/ReactiveExamples/Merge/Merge.md +++ b/docs/workflows/ReactiveExamples/Merge/Merge.md @@ -3,21 +3,18 @@ ## Summary This example demonstrates how to merge events from two independent streams using the *Merge* operator. In this case, presses in either 'A' or 'S' keys are propagated. - ## Workflow :::workflow ![Example](~/workflows/ReactiveExamples/Merge/Merge.bonsai) ::: - ## Details -1. Generates an event whenver 'A' is pressed. -2. Generates an event whenver 'S' is pressed. +1. Generates an event whenever 'A' is pressed. +2. Generates an event whenever 'S' is pressed. 3. Propagates all the input events in the order they are received. Note: The *Merge* node requires all its input streams to produce the same datatype. - ## Visualization Visualize the output of the *Merge* node using ObjectTextVisualized enlarged, such that multiple events can be observed. diff --git a/docs/workflows/ReactiveExamples/Skip/Skip.md b/docs/workflows/ReactiveExamples/Skip/Skip.md index a6c44a8..db049d8 100644 --- a/docs/workflows/ReactiveExamples/Skip/Skip.md +++ b/docs/workflows/ReactiveExamples/Skip/Skip.md @@ -3,20 +3,16 @@ ## Summary This example demonstrates how to control the beginning of a stream using the *Skip* operator. Here, values are propagated only after 5 events have been received. - ## Workflow :::workflow ![Example](~/workflows/ReactiveExamples/Skip/Skip.bonsai) ::: - ## Details 1. Generates an event every second. 2. Prevents the propagation of the first 5 events, and starts propagating after. - ## Visualization Compare the output of the *Timer* node with that of the *Skip* node. Use ObjectTextVisualizer enlarged, such that multiple events can be observed. - diff --git a/docs/workflows/ReactiveExamples/SkipUntil/SkipUntil.md b/docs/workflows/ReactiveExamples/SkipUntil/SkipUntil.md index 979baea..921f104 100644 --- a/docs/workflows/ReactiveExamples/SkipUntil/SkipUntil.md +++ b/docs/workflows/ReactiveExamples/SkipUntil/SkipUntil.md @@ -3,20 +3,16 @@ ## Summary This example demonstrates how to control the beginning of a stream using the *SkipUntil* operator. Here, values are propagated only after a key has been pressed. - ## Workflow :::workflow ![Example](~/workflows/ReactiveExamples/SkipUntil/SkipUntil.bonsai) ::: - ## Details 1. Generates an event every second. -2. Holds the propagation of events until 'S' is pressed; it starts propagating after. - +2. Holds the propagation of events until the 'S' key is pressed; it starts propagating after. ## Visualization -Compare the output of the *Timer* node with that of the *SkipUnitl* node. Use ObjectTextVisualizer enlarged, such that multiple events can be observed. - +Compare the output of the *Timer* node with that of the *SkipUntil* node. Use ObjectTextVisualizer enlarged, such that multiple events can be observed. diff --git a/docs/workflows/ReactiveExamples/Take/Take.md b/docs/workflows/ReactiveExamples/Take/Take.md index fafdbef..d5218de 100644 --- a/docs/workflows/ReactiveExamples/Take/Take.md +++ b/docs/workflows/ReactiveExamples/Take/Take.md @@ -3,19 +3,16 @@ ## Summary This example demonstrates how to control the end of a stream using the *Take* operator. Here, the workflow terminates after 5 events generated by a *Timer*. - ## Workflow :::workflow ![Example](~/workflows/ReactiveExamples/Take/Take.bonsai) ::: - ## Details 1. Generates an event every second. -2. Propagates the first 5 event, and emits an *OnCompleted* message that terminates the preceeding wokflow. -3. Terminates the main workflow when *OnCompleted* message is received. - +2. Propagates the first 5 event, and emits an *OnComplete* message that terminates the preceding workflow. +3. Terminates the main workflow when *OnComplete* message is received. ## Visualization Visualize the output of the *Take* node using ObjectTextVisualizer enlarged, such that multiple events can be observed. diff --git a/docs/workflows/ReactiveExamples/TakeUntil/TakeUntil.md b/docs/workflows/ReactiveExamples/TakeUntil/TakeUntil.md index 66ef8e8..b95e6f6 100644 --- a/docs/workflows/ReactiveExamples/TakeUntil/TakeUntil.md +++ b/docs/workflows/ReactiveExamples/TakeUntil/TakeUntil.md @@ -1,8 +1,7 @@ # Take Until ## Summary -This example demonstrates how to control the end of a stream using the *TakeUntil* operator. Here, the workflow terminates after a a key has been pressed. - +This example demonstrates how to control the end of a stream using the *TakeUntil* operator. Here, the workflow terminates after a key has been pressed. ## Workflow @@ -10,12 +9,10 @@ This example demonstrates how to control the end of a stream using the *TakeUnti ![Example](~/workflows/ReactiveExamples/TakeUntil/TakeUntil.bonsai) ::: - ## Details 1. Generates an event every second. -2. Propagates the events generated by the *Timer* until the key 'S' is pressed; when this happens, it emits an *OnComplete* message that terminates the preceeding wokflow. +2. Propagates the events generated by the *Timer* until the 'S' key is pressed; when this happens, it emits an *OnComplete* message that terminates the preceding workflow. 3. Terminates the main workflow when *OnComplete* message is received. - ## Visualization Visualize the output of the *TakeUntil* node using ObjectTextVisualized enlarged, such that multiple events can be observed. diff --git a/docs/workflows/ReactiveExamples/WithLatestFrom/WithLatestFrom.md b/docs/workflows/ReactiveExamples/WithLatestFrom/WithLatestFrom.md index d4e9a51..f97c3f1 100644 --- a/docs/workflows/ReactiveExamples/WithLatestFrom/WithLatestFrom.md +++ b/docs/workflows/ReactiveExamples/WithLatestFrom/WithLatestFrom.md @@ -3,22 +3,18 @@ ## Summary This example demonstrates how to sample the latest values of a *Timer* sequence whenever a key is pressed. - ## Workflow :::workflow ![Example](~/workflows/ReactiveExamples/WithLatestFrom/WithLatestFrom.bonsai) ::: - ## Details 1. Generates an event whenever a key is pressed. 2. Generates the next element of a counter every second. 3. Pairs every key pressed with the current value of the *Timer*. 4. Propagates *Timer* values that have been paired with the key presses in 3. - ## Visualization Compare the output of the *Timer* node with that of the *Item2* node. Use ObjectTextVisualizer enlarged, such that multiple events can be observed. - diff --git a/docs/workflows/ReactiveExamples/Zip/Zip.md b/docs/workflows/ReactiveExamples/Zip/Zip.md index 7097348..9bf54aa 100644 --- a/docs/workflows/ReactiveExamples/Zip/Zip.md +++ b/docs/workflows/ReactiveExamples/Zip/Zip.md @@ -3,20 +3,18 @@ ## Summary This example demonstrates how to combine two streams using the *Zip* operator. This operator pairs events from multiple streams whenever they have all produced a value. Here, we pair the last two keypresses. - ## Workflow :::workflow ![Example](~/workflows/ReactiveExamples/Zip/Zip.bonsai) ::: - ## Details 1. Generates an event whenver a key is pressed. 2. Skips the first key pressed. 3. Creates a pair of values, a *Tupple*, with the current and the last keys pressed. -Note: Because the *Zip* node pairs events only when all streams have emited a new value, the first event generated directly from the *KeyDown* in the first stream will be held until an event is produced by the *Skip* node in the second stream. This will happen only when a second key is pressed. Once this happens an event is propagated on the *Skip* node, and pair can then be formed with the previous key press on the first stream (the one being held), and the current key pressed on the second stream. +Note: Because the *Zip* node pairs events only when all streams have emited a new value, the first event generated directly from the *KeyDown* in the first stream will be held until an event is produced by the *Skip* node in the second stream. This will happen only when a second key is pressed. Once this happens an event is propagated on the *Skip* node, and a pair can then be formed with the previous key press on the first stream (the one being held), and the current key pressed on the second stream. ## Visualization Visualize the output of the *KeyPress*, *Skip* and *Zip* nodes using ObjectTextVisualized enlarged, such that multiple events can be observed in each. diff --git a/docs/workflows/TrialBasedSession.svg b/docs/workflows/TrialBasedSession.svg index edd65b3..57ebea6 100644 --- a/docs/workflows/TrialBasedSession.svg +++ b/docs/workflows/TrialBasedSession.svg @@ -1,217 +1,3 @@ - - -]> - - - - - - - - - - - - - - - - - - - - - - Initialize - - - - - - - Start Session - - - - - Subscribe - - - When - - - - - - - Filename1 - - - - - Take - - - - - RepeatCount - - - - - - - Start Session - - - - - - - ITI - - - - - - - KeyDown - - - - - Take - - - - - - - Count - - - - - - - Current Trial - - - - - - - - - Finish Trial - - - - - - - Trials Left - - - - - - - Status - - - - - - - - - Run Trial - - - - - - - - - Init Trial - - - - - - - - - - Create - - - Observable - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file +]>InitializeStart SessionSubscribeWhenFilename1TakeRepeatCountStart SessionITIKeyDownTakeCountCurrent TrialFinish TrialTrials LeftStatusRun TrialInit TrialCreateObservable \ No newline at end of file diff --git a/docs/workflows/testing2/TrialBasedSession3.svg b/docs/workflows/testing2/TrialBasedSession3.svg index edd65b3..57ebea6 100644 --- a/docs/workflows/testing2/TrialBasedSession3.svg +++ b/docs/workflows/testing2/TrialBasedSession3.svg @@ -1,217 +1,3 @@ - - -]> - - - - - - - - - - - - - - - - - - - - - - Initialize - - - - - - - Start Session - - - - - Subscribe - - - When - - - - - - - Filename1 - - - - - Take - - - - - RepeatCount - - - - - - - Start Session - - - - - - - ITI - - - - - - - KeyDown - - - - - Take - - - - - - - Count - - - - - - - Current Trial - - - - - - - - - Finish Trial - - - - - - - Trials Left - - - - - - - Status - - - - - - - - - Run Trial - - - - - - - - - Init Trial - - - - - - - - - - Create - - - Observable - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file +]>InitializeStart SessionSubscribeWhenFilename1TakeRepeatCountStart SessionITIKeyDownTakeCountCurrent TrialFinish TrialTrials LeftStatusRun TrialInit TrialCreateObservable \ No newline at end of file