This commit is contained in:
2021-10-14 13:47:35 +02:00
commit 6625a8dfaa
4026 changed files with 844291 additions and 0 deletions
@@ -0,0 +1,87 @@
/**
* \page BoxAlgorithm_KeyboardStimulator Keyboard stimulator
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_KeyboardStimulator_Description|
* This plugin grabs key presses and translates them into OpenViBE stimulations
* |OVP_DocEnd_BoxAlgorithm_KeyboardStimulator_Description|
__________________________________________________________________
Outputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_KeyboardStimulator_Outputs|
* |OVP_DocEnd_BoxAlgorithm_KeyboardStimulator_Outputs|
*
* |OVP_DocBegin_BoxAlgorithm_KeyboardStimulator_Output1|
* A stream of stimulations generated by key presses
* |OVP_DocEnd_BoxAlgorithm_KeyboardStimulator_Output1|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_KeyboardStimulator_Settings|
* |OVP_DocEnd_BoxAlgorithm_KeyboardStimulator_Settings|
*
* |OVP_DocBegin_BoxAlgorithm_KeyboardStimulator_Setting1|
* The name of the file containing the associations between keys and stimulations
* |OVP_DocEnd_BoxAlgorithm_KeyboardStimulator_Setting1|
*
* |OVP_DocBegin_BoxAlgorithm_KeyboardStimulator_Setting2|
* TCP Tagging host address to send stimuli to (empty string: do not connect)
* |OVP_DocEnd_BoxAlgorithm_KeyboardStimulator_Setting2|
*
* |OVP_DocBegin_BoxAlgorithm_KeyboardStimulator_Setting3|
* TCP Tagging host port
* |OVP_DocEnd_BoxAlgorithm_KeyboardStimulator_Setting3|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_KeyboardStimulator_Examples|
*
* Here is one example of configuration file :
*
* \code
* Left 0x00000301
* Right 0x00000302
* Up 0x0000030C
* Down 0x00000306
* a 0x00000300
* r 0x00000312
* t 0x00000311
* y 0x0000030D
* BackSpace 0x00000004
* Return 0x00000320
* \endcode
*
* |OVP_DocEnd_BoxAlgorithm_KeyboardStimulator_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_KeyboardStimulator_Miscellaneous|
*
* The configuration file should contain a list where each element is formatted like this :
*
* \code
* Name_of_the_key Stimulation_numeric_identifier
* \endcode
*
* For a complete listing of the key names, please consult GDK's "gdk/gdkkeysyms.h" header file.
* The names are the same but without the leading "GDK_"
*
* If TCP Tagging hostname is specified, the stimulator will send the stimuli
* to Acquisition Server in that address for accurate alignment of the stimuli
* to the EEG signal. If the keypresses are not wanted to be inserted into the signal,
* set host address to an empty string. To send to an Acquisition Server running on the same computer,
* use 'localhost' as the address.
*
* |OVP_DocEnd_BoxAlgorithm_KeyboardStimulator_Miscellaneous|
*/
@@ -0,0 +1,312 @@
/**
* \page BoxAlgorithm_LuaStimulator Lua Stimulator
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_LuaStimulator_Description|
This box gives a fast control over stimulation streams thanks to Lua scripts.
Scripts are very simple programming languages. They are usually easy to understand,
fast to write and reasonably fast to execute. They are used for high level operations
and do not need compilation. There are a number of scripting languages around.
Lua is one of those scripting languages. It is know for its execution speed and it's ease
of use. It can be used on a large number of platforms. For all those reasons, Lua is widely
used in the video game industry. If you want more information about Lua, feel free to visit
their website at http://www.lua.org and on their documentation website http://www.lua.org/manual/5.1
This box has a variable number of inputs and outputs. The author is able to add as many
of them as necessary. The box automatically decodes the incoming streams and automatically
encodes the outgoing streams, leaving the interesting part to the script : doing something with
input stimulations and produce output stimulations.
The script should be divided in three functions :
- \ref LuaScriptAPI_initialize
- \ref LuaScriptAPI_uninitialize
- \ref LuaScriptAPI_process
The whole script behavior should be executed in a single execution of the \c process function.
Thanks to this, the script code is made a lot more easy to understand than the usual C++ boxes.
Of course, in case it is necessary, the script can yield, letting the kernel perform a new step
of execution.
A simple API is proposed allowing the script to :
- \ref LuaScriptAPI_get_input_count
- \ref LuaScriptAPI_get_output_count
- \ref LuaScriptAPI_get_setting_count
- \ref LuaScriptAPI_get_setting
- \ref LuaScriptAPI_get_config
- \ref LuaScriptAPI_log
- \ref LuaScriptAPI_set_filter_mode
During the process function, you can also :
- \ref LuaScriptAPI_get_current_time
- \ref LuaScriptAPI_get_stimulation_count
- \ref LuaScriptAPI_get_stimulation
- \ref LuaScriptAPI_remove_stimulation
- \ref LuaScriptAPI_send_stimulation
- \ref LuaScriptAPI_sleep
\b NOTE: people using the deprecated \e unstable API would be interested in the \ref LuaScriptAPI_upgrading_from_unstable section.
\subsection LuaScriptAPI_initialize initialize(box)
This function is called by the box at IBox::initialize phase. It is up to the script developer to implement this function.
In case you don't want to do anything at initialization phase, just ignore this function.
- the \c box parameter enables the script developer to access the API described hereafter.
\subsection LuaScriptAPI_uninitialize uninitialize(box)
This function is called by the box at IBox::uninitialize phase. It is up to the script developer to implement this function.
In case you don't want to do anything at uninitialization phase, just ignore this function.
- the \c box parameter enables the script developer to access the API described hereafter.
\subsection LuaScriptAPI_process process(box)
This function is called by the box at the first IBox::process phase. It is up to the script developer to implement this function and
this function is mandatory. It is executed only once, meaning that if that code must be run on a long duration, it must release some
CPU cycles using the \ref box:sleep() function.
- the \c box parameter enables the script developer to access the API described hereafter. Among others, it will let
the script get some usefull information about the box topology (number of inputs, number of outputs, number of settings etc...)
- the \c box parameter also enables the script developer to access all the runtime functions such as receiving stimulations,
sending stimulations etc...
\subsection LuaScriptAPI_get_input_count box:get_input_count()
This function returns the number of inputs the box has.
\subsection LuaScriptAPI_get_output_count box:get_output_count()
This function returns the number of outputs the box has.
\subsection LuaScriptAPI_get_setting_count box:get_setting_count()
This function returns the number of settings the box has, including the script filename itself.
\subsection LuaScriptAPI_get_setting box:get_setting(setting_index)
This function returns a string containing the value of a given setting in the box. This
setting value may be expanded using the configuration manager thanks to a \ref LuaScriptAPI_get_config call.
- \c setting_index can range from 1 to \e n if the box has \e n settings.
\subsection LuaScriptAPI_log box:log(log_level, line_of_text)
This function sends a string to the log manager. This message may be printed in the console
for the user or may be popped up to him if this is important enough. In any case, it will appear
in the log file.
- \c log_level the log level which you want to use to print this line of text. This is represented in
string and can take the following values : \c Debug, \c Trace, \c Info, \c Warning, \c ImportantWarning, \c Error and \c Fatal.
If you use an invalid value, then \c Debug is used.
- \c line_of_text can be any line of text you want to print
\subsection LuaScriptAPI_set_filter_mode box:set_filter_mode(active)
By default the Lua scripting box works in a clock-driven mode: it runs with a certain frequency, and each time the process code is run, it outputs a stimulus chunk.
When the filter mode is active (=1), the input stimulation stream drives the output chunk generation instead. In filter mode, you can copy input stimulations to the output while keeping their exact timestamps.
Explanation: Lua box generates a stimulation chunk stream \[t1,t2\[, \[t2,t3\[, \[t3,t4\[, ... , with a high frequency (small chunks). The t are the start and end times of each chunk.
However, the input stream may have chunks with a bigger granularity such as \[t1,t3\[, \[t3,t5\[, ..., and so on.
Now if the box receives stimulation tagged at time t1 from such a bigger granularity input stream, it will have already sent out the chunk \[t1,t2\] as the current time by then is at least t3 as chunk \[t1,t3\[ was received.
Hence the stimulation at t1 must be dropped as OpenViBE stimulation stream guarantees that if a stimuli tagged at time t has not been received by the time a chunk with its beginning timestamp greater than t is received, there will never be a stimuli at t.
Note that for the filter mode operation it is necessary that the upstream generates a meaningful stimulation stream. If not, the box will not output stimulations when the filter mode is active.
\subsection LuaScriptAPI_get_config box:get_config(token)
This function uses the configuration manager to expand a configuration token. The configuration token
are listed in the \c openvibe.conf file and can contain valuable information about the OpenViBE
environment.
- \c token can be any string containing configuration variables (e.g. <em>${Path_Data}/scenarios/signals/my-experiment</em>).
\subsection LuaScriptAPI_get_current_time box:get_current_time()
This function returns the elapsed time in seconds since the scenario started. The returned value is a float.
- \b WARNING: this function should only be called while in the \ref LuaScriptAPI_process callback.
\subsection LuaScriptAPI_get_stimulation_count box:get_stimulation_count(input_index)
This function returns the number of pending stimulation on a specific input given with \c input_index.
- \c input_index can range from 1 to \e n if the box has \e n inputs.
- \b NOTE: if you call this function on an unexisting input, it returns 0.
- \b WARNING: this function should only be called while in the \ref LuaScriptAPI_process callback.
\subsection LuaScriptAPI_get_stimulation box:get_stimulation(input_index, stimulation_index)
This function returns the details of a specific pending stimulation for a specific input given with \c input_index.
- \c input_index can range from 1 to \e n if the box has \e n inputs.
- \c stimulation_index can range from 1 to \e m if the valid input \c input_index has \e m inputs.
The result is in the form of a 3-tuple containing :
- the stimulation code as an integer
- the stimulation date as a float
- the stimulation duration as a float
If you call this function with an \c stimulation_index bigger than what \c get_stimulation_count would have returned for
the \c input_index input, then the Lua script sleeps until enough stimulation arrived and this function can return.
- \b WARNING: if you call this function on an unexisting input, the behavior is undefined
- \b WARNING: this function should only be called while in the \ref LuaScriptAPI_process callback.
\subsection LuaScriptAPI_remove_stimulation box:remove_stimulation(input_index, stimulation_index)
Removes a pending stimulation on a specific input given with \c input_index.
- \c input_index can range from 1 to \e n if the box has \e n inputs.
- \c stimulation_index can range from 1 to \e m if the valid input \c input_index has \e m inputs.
If you call this function with an \c stimulation_index bigger than what \c get_stimulation_count would have returned for
the \c input_index input, then the Lua script sleeps until enough stimulation arrived and this function can return.
After this call, the pending stimulations order is changed, stimulations \c stimulation_index+1, \c stimulation_index+2, ...
being moved to \c stimulation_index, \c stimulation_index+1, ... respectively.
- \b WARNING: this function should only be called while in the \ref LuaScriptAPI_process callback.
\subsection LuaScriptAPI_send_stimulation box:send_stimulation(output_index, stimulation_identifier, stimulation_date, opt:stimulation_duration=0)
Sends a stimulation with code \c stimulation_identifier, date \c stimulation_date and duration \c stimulation_duration on output
- \c output_index.
- \c output_index can range from 1 to \e n if the box has \e n outputs.
- \c stimulation_identifier is an integer with the identifier of the stimulation to send. See \ref Doc_Stimulations for stimulation codes.
- \c stimulation_date is a float (in seconds) with the date of the stimulation. The box will take care of buffering the stimulation if needed before
actually sending it. However, you can't send a stimulation in "the past".
- \c stimulation_duration is a float (in seconds) with the duration of the stimulation. It is usually unused so if you don't know what to
put here, just ignore this parameter, or let it be 0.
- \b WARNING: this function should only be called while in the \ref LuaScriptAPI_process callback.
\subsection LuaScriptAPI_sleep box:sleep()
Pauses the script execution. The box then continues its execution, so the kernel can perform an additional step. Next time the box
is executed, it will restore the script execution so you can eventually continue or sleep again.
- \b NOTE: The \e current \e time is affected by this call !
- \b WARNING: this function should only be called while in the \ref LuaScriptAPI_process callback.
If you want to wait until a fixed date, just use this simple Lua function :
\code
function wait_until(box, time)
while box:get_current_time() < time do
box:sleep()
end
end
\endcode
If you want to wait for a fixed duration, just use this simple Lua function :
\code
function wait_for(box, duration)
wait_until(box, box:get_current_time() + duration)
end
\endcode
* |OVP_DocEnd_BoxAlgorithm_LuaStimulator_Description|
__________________________________________________________________
Outputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_LuaStimulator_Outputs|
* |OVP_DocEnd_BoxAlgorithm_LuaStimulator_Outputs|
* |OVP_DocBegin_BoxAlgorithm_LuaStimulator_Output1|
* |OVP_DocEnd_BoxAlgorithm_LuaStimulator_Output1|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_LuaStimulator_Settings|
* The box can have a varying number of settings. The first setting is
* a fixed but the author can add as many settings as he wants. Those
* settings can be retrieved in the Lua script thanks to the \ref LuaScriptAPI_get_setting function
* |OVP_DocEnd_BoxAlgorithm_LuaStimulator_Settings|
* |OVP_DocBegin_BoxAlgorithm_LuaStimulator_Setting1|
* This setting defines what Lua script should be executed.
* |OVP_DocEnd_BoxAlgorithm_LuaStimulator_Setting1|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_LuaStimulator_Examples|
Here is a sample script
\code
-- this function is called when the box is initialized
function initialize(box)
box:log("Trace", "initialize has been called");
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
-- inspects the box topology
box:log("Info", string.format("box has %i input(s)", box:get_input_count()))
box:log("Info", string.format("box has %i output(s)", box:get_output_count()))
box:log("Info", string.format("box has %i setting(s)", box:get_setting_count()))
for i = 1, box:get_setting_count() do
box:log("Info", string.format(" - setting %i has value [%s]", i, box:get_setting(i)))
end
end
-- this function is called when the box is uninitialized
function uninitialize(box)
box:log("Trace", "uninitialize has been called")
end
-- this function is called once by the box
function process(box)
box:log("Trace", "process has been called")
-- enters infinite loop
-- cpu will be released with a call to sleep
-- at the end of the loop
while box:keep_processing() do
-- gets current simulated time
t = box:get_current_time()
-- loops on all inputs of the box
for input = 1, box:get_input_count() do
-- loops on every received stimulation for a given input
for stimulation = 1, box:get_stimulation_count(input) do
-- gets the received stimulation
identifier, date, duration = box:get_stimulation(input, 1)
-- logs the received stimulation
box:log("Trace", string.format("At time %f on input %i got stimulation id:%s date:%s duration:%s", t, input, identifier, date, duration))
-- discards it
box:remove_stimulation(input, 1)
-- triggers a new OVTK_StimulationId_Label_00 stimulation five seconds after
box:send_stimulation(1, OVTK_StimulationId_Label_00, t+5, 0)
end
end
-- releases cpu
box:sleep()
end
end
\endcode
* |OVP_DocEnd_BoxAlgorithm_LuaStimulator_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_LuaStimulator_Miscellaneous|
*
* \subsection LuaScriptAPI_upgrading_from_unstable Upgrading from the unstable API
* The Lua box has been flagged as unstable for months for several reasons :
* - The API was incomplete.
* - There were some potential issues in the chosen names for the API functions.
* - The box crashed in some circumstances.
*
* The box has been stabilized now and this results in some small changes in the API. Basically, the \ref LuaScriptAPI_initialize,
* \ref LuaScriptAPI_uninitialize and \ref LuaScriptAPI_process callbacks are passed a \e box parameter which should be used to call
* the API functions. Each API function is now prefixed with \e box: as described in the Object-Oriented Access documentation page - http://www.lua.org/pil/28.3.html
*
* In case you would not like to modify your already existing scripts in depth, I suggest you just include the \em lua-stimulator-legacy.lua script
* at the initialization of your existing scripts using the following command
* \code
* dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-legacy.lua")
* \endcode
*
* \subsection LuaScriptAPI_using_stimulation_codes Using OpenViBE stimulation codes in Lua scripts
*
* It could be convenient to have the stimulation names available in a Lua script. For this purpose, I suggest you just include the \em lua-stimulator-stim-codes.lua script
* at the initialization of your existing scripts using the following command
* \code
* dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
* \endcode
*
* |OVP_DocEnd_BoxAlgorithm_LuaStimulator_Miscellaneous|
*/
@@ -0,0 +1,179 @@
/**
* \page BoxAlgorithm_P300IdentifierStimulator P300 Identifier Stimulator
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierStimulator_Description|
* This box is used to generate P300 stimulation timeline. Depending on its parameters,
* it generates all the necessary flagging stimulations for an P300 experiment, such as when
* a flash starts, when it stops, when the repetitions are finished etc.
*
* Imagine a list of image. All image of this list are display consecutively a number of time.
* Only the target image is less display than other (see the setting 4).
* Then a decision can be made and the user can relax.
* Then same process restarts and so on.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierStimulator_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierStimulator_Inputs|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierStimulator_Inputs|
*
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierStimulator_Input1|
* This input is used to start the generation of the pipeline. As soon as the start stimulation
* arrives here, the generation process starts. (see setting 1)
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierStimulator_Input1|
*
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierStimulator_Input2|
* A stream of stimulations corresponding to the P300 target.
* This stream of stimulation is the P300 target during the current trial time.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierStimulator_Input2|
__________________________________________________________________
Outputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierStimulator_Outputs|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierStimulator_Outputs|
*
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierStimulator_Output1|
* This output contains the stimulations used for P300 based experiments.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierStimulator_Output1|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierStimulator_Settings|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierStimulator_Settings|
*
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierStimulator_Setting1|
* This first setting tells which stimulation to use to start the generation process. This stimulation
* can be received from a keyboard for example (see \ref Doc_BoxAlgorithm_KeyboardStimulator).
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierStimulator_Setting1|
*
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierStimulator_Setting2|
* This setting tells what stimulation base to use when displaying the image of the list. When image one should
* be flashed, this exact stimulation will be sent. When image two should be flashed, this stimulation + 1
* will be sent, and so on.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierStimulator_Setting2|
*
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierStimulator_Setting3|
* This setting tells how many images the list has.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierStimulator_Setting3|
*
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierStimulator_Setting4|
* This setting tells the ratio of displaying the target(in percent).
* 100% are equivalent to the number of repetition and
* the setting value is approximately the percent of repetition containing the target.
* Please note that the value must be between 0 and 100%.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierStimulator_Setting4|
*
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierStimulator_Setting5|
* This setting tells how many times each non target images should be displayed in a trial.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierStimulator_Setting5|
*
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierStimulator_Setting6|
* This setting tells how many trials should be generated.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierStimulator_Setting6|
*
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierStimulator_Setting7|
* This setting tells how long an image is displaying.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierStimulator_Setting7|
*
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierStimulator_Setting8|
* This setting tells how long this stimulator should wait after an image is displaying before sending a new image.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierStimulator_Setting8|
*
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierStimulator_Setting9|
* This setting tells how long rest is left to the user between the repetitions.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierStimulator_Setting9|
*
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierStimulator_Setting10|
* This setting tells how much rest is left to the user between the trials.
* Please note that the end of a trial is also the end of a repetition. So the rest duration includes both times.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierStimulator_Setting10|
*
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierStimulator_Setting11|
* This setting is not used for now.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierStimulator_Setting11|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierStimulator_Examples|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierStimulator_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierStimulator_Miscellaneous|
* <b>Note:</b> this box has the same behavior as the box P300SpellerStimulator.
* Differents are the number of images are free and it's possible to define a display ratio of the target.
* The order display of images is randomly, like the display or not of the target in a repetition.
*
* The sequence generated by this box is typically something like this :
* \verbatim
* OVTK_StimulationId_ExperimentStart
*
* OVTK_StimulationId_RestStart
* OVTK_StimulationId_RestStop
*
* OVTK_StimulationId_TrialStart
* OVTK_StimulationId_SegmentStart
*
* OVTK_StimulationId_Label_0B
* OVTK_StimulationId_VisualStimulationStart
* OVTK_StimulationId_VisualStimulationStop
*
* OVTK_StimulationId_Label_03
* OVTK_StimulationId_VisualStimulationStart
* OVTK_StimulationId_VisualStimulationStop
*
* ...
* ...
* ...
*
* OVTK_StimulationId_Label_04
* OVTK_StimulationId_VisualStimulationStart
* OVTK_StimulationId_VisualStimulationStop
*
* OVTK_StimulationId_SegmentStop
* OVTK_StimulationId_SegmentStart
*
* ...
* ...
* ...
*
* OVTK_StimulationId_SegmentStop
*
* ...
* ...
* ...
*
* OVTK_StimulationId_TrialStop
*
* OVTK_StimulationId_RestStart
* OVTK_StimulationId_RestStop
*
* OVTK_StimulationId_TrialStart
*
* ...
* ...
* ...
*
* OVTK_StimulationId_TrialStop
*
* ...
* ...
* ...
*
* OVTK_StimulationId_ExperimentStop\endverbatim
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierStimulator_Miscellaneous|
*/
@@ -0,0 +1,180 @@
/**
* \page BoxAlgorithm_P300SpellerStimulator P300 Speller Stimulator
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300SpellerStimulator_Description|
This box is used to generate a 2D P300 stimulation timeline. Depending on its parameters,
it generates all the necessary flagging stimulations for an P300 experiment, such as when
a flash starts, when it stops, when the repetitions are finished etc.
Imagine a P300 speller application. Such application is based on a matrix of letters / numbers.
The lines and columns of this matrix are flashed consecutively a number of time. Then a decision
can be made and the user can relax. Then same process restarts and so one. Such experiment can
be driven by this box.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerStimulator_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300SpellerStimulator_Inputs|
* |OVP_DocEnd_BoxAlgorithm_P300SpellerStimulator_Inputs|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerStimulator_Input1|
This input is used to start the generation of the pipeline. As soon as the start stimulation
arrives here, the generation process starts. (see setting 1)
* |OVP_DocEnd_BoxAlgorithm_P300SpellerStimulator_Input1|
__________________________________________________________________
Outputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300SpellerStimulator_Outputs|
* |OVP_DocEnd_BoxAlgorithm_P300SpellerStimulator_Outputs|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerStimulator_Output1|
This output contains the stimulations used for P300 based experiments.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerStimulator_Output1|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300SpellerStimulator_Settings|
* |OVP_DocEnd_BoxAlgorithm_P300SpellerStimulator_Settings|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerStimulator_Setting1|
This first setting tells which stimulation to use to start the generation process. This stimulation
can be received from a keyboard for example (see \ref Doc_BoxAlgorithm_KeyboardStimulator).
* |OVP_DocEnd_BoxAlgorithm_P300SpellerStimulator_Setting1|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerStimulator_Setting2|
This setting tells what stimulation base to use when flashing rows of the matrix. When row one should
be flashed, this exact stimulation will be sent. When row two should be flashed, this stimulation + 1
will be sent, and so on.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerStimulator_Setting2|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerStimulator_Setting3|
This setting tells what stimulation base to use when flashing columns of the matrix. When column one should
be flashed, this exact stimulation will be sent. When column two should be flashed, this stimulation + 1
will be sent, and so on.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerStimulator_Setting3|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerStimulator_Setting4|
This setting tells how many row the matrix has.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerStimulator_Setting4|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerStimulator_Setting5|
This setting tells how many columns the matrix has.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerStimulator_Setting5|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerStimulator_Setting6|
This setting tells how many times each row / column should be flashed in a trial.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerStimulator_Setting6|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerStimulator_Setting7|
This setting tells how many trials should be generated.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerStimulator_Setting7|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerStimulator_Setting8|
This setting tells how long a flash longs.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerStimulator_Setting8|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerStimulator_Setting9|
This setting tells how long this stimulator should wait after a flash is finished before sending a new flash.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerStimulator_Setting9|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerStimulator_Setting10|
This setting tells how much rest is left to the user between the repetitions.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerStimulator_Setting10|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerStimulator_Setting11|
This setting tells how much rest is left to the user between the trials.
Please note that the end of a trial is also the end of a repetition. So the rest duration includes both times.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerStimulator_Setting11|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerStimulator_Setting12|
This setting is not used for now.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerStimulator_Setting12|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300SpellerStimulator_Examples|
This box is used in the <em>P300 speller</em> and the <em>P300 magic card</em> BCIs. Please see those
scenarios in the sample <em>openvibe-scenarios</em>.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerStimulator_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300SpellerStimulator_Miscellaneous|
<b>Note:</b> Even if this box has been created for flashing matrices, it could be used for flashing 1D things. However, in order
to have more efficient results on matrices, this box flashes one line, then one column, then one line etc. It never
flashes a line and then another line. Thus in the 1D case, you have to know that the same behavior will occur, resulting
on the flashing of the low-part of your 1D set, then high part, then low part etc...
The sequence generated by this box is typically something like this :
\verbatim
OVTK_StimulationId_ExperimentStart
OVTK_StimulationId_RestStart
OVTK_StimulationId_RestStop
OVTK_StimulationId_TrialStart
OVTK_StimulationId_SegmentStart
OVTK_StimulationId_Label_0B
OVTK_StimulationId_VisualStimulationStart
OVTK_StimulationId_VisualStimulationStop
OVTK_StimulationId_Label_03
OVTK_StimulationId_VisualStimulationStart
OVTK_StimulationId_VisualStimulationStop
...
...
...
OVTK_StimulationId_Label_04
OVTK_StimulationId_VisualStimulationStart
OVTK_StimulationId_VisualStimulationStop
OVTK_StimulationId_SegmentStop
OVTK_StimulationId_SegmentStart
...
...
...
OVTK_StimulationId_SegmentStop
...
...
...
OVTK_StimulationId_TrialStop
OVTK_StimulationId_RestStart
OVTK_StimulationId_RestStop
OVTK_StimulationId_TrialStart
...
...
...
OVTK_StimulationId_TrialStop
...
...
...
OVTK_StimulationId_ExperimentStop\endverbatim
* |OVP_DocEnd_BoxAlgorithm_P300SpellerStimulator_Miscellaneous|
*/
@@ -0,0 +1,87 @@
/**
* \page BoxAlgorithm_RunCommand Run Command
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_RunCommand_Description|
* This box allows to launch a command on specific stimulation reception.
* The goal of this is to trigger an external process on specific events,
* for example launch an external process on a given stimulation.
* |OVP_DocEnd_BoxAlgorithm_RunCommand_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_RunCommand_Inputs|
* |OVP_DocEnd_BoxAlgorithm_RunCommand_Inputs|
* |OVP_DocBegin_BoxAlgorithm_RunCommand_Input1|
* The stimulation stream to use. The specified stimulations are looked
* for into this stream and as soon as a matching stimulation is found,
* the command is launched.
* |OVP_DocEnd_BoxAlgorithm_RunCommand_Input1|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_RunCommand_Settings|
* You can add as many settings as you want so to detect a variable number
* of stimulations and launch its associated command. It is always a pair
* of settings : stimulation to detect / command tu launch.
* |OVP_DocEnd_BoxAlgorithm_RunCommand_Settings|
* |OVP_DocBegin_BoxAlgorithm_RunCommand_Setting1|
* The first stimulation to detect.
* |OVP_DocEnd_BoxAlgorithm_RunCommand_Setting1|
* |OVP_DocBegin_BoxAlgorithm_RunCommand_Setting2|
* The command to launch when first stimulation is detected.
* |OVP_DocEnd_BoxAlgorithm_RunCommand_Setting2|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_RunCommand_Examples|
* |OVP_DocEnd_BoxAlgorithm_RunCommand_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_RunCommand_Miscellaneous|
* The different commandline you write should be accessible in the
* configured PATH.
*
* If you have complex commands to launch, you should
* consider writing a script that does the work. This way, you'll keep
* the box configuration simple.
*
* If either the command path or some argument contains spaces, you can
* try to enclose each such an item in double quotes.
*
* \code
* "C:/Program Files/program.exe" --open "C:/Temp/data file.dat"
* \endcode
*
* Default behavior is to launch the command synchronously. It means
* that the command you launch should not be time consuming. If you want
* asynchronous call, then you have to postfix the command with
* <em>&</em> under, eg :
* \code
* xdg-open http://openvibe.inria.fr &
* \endcode
* For Windows, you have to prefix the command with \e START, eg :
* \code
* START iexplore http://openvibe.inria.fr
* \endcode
*
* The implementation of this box uses POSIX function \c system
* to trigger the command. If you are interested in this command's
* behavior, see the manual page at http://linux.die.net/man/3/system
* |OVP_DocEnd_BoxAlgorithm_RunCommand_Miscellaneous|
*/
@@ -0,0 +1,68 @@
/**
* \page BoxAlgorithm_SignChangeDetector Sign Change Detector
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_SignChangeDetector_Description|
This box detects the changes of the sign of the input. It will work on any matrix of exactly two dimensions, signal in particular. This box operates only on one channel. When the input values change sign a stimulation is sent. You can choose the stimulation to send when the value becomes positive or negative.
* |OVP_DocEnd_BoxAlgorithm_SignChangeDetector_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_SignChangeDetector_Inputs|
* |OVP_DocEnd_BoxAlgorithm_SignChangeDetector_Inputs|
* |OVP_DocBegin_BoxAlgorithm_SignChangeDetector_Input1|
Input values. Must be a streamed matrix of exactly two dimensions. This box works well with signal.
* |OVP_DocEnd_BoxAlgorithm_SignChangeDetector_Input1|
__________________________________________________________________
Outputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_SignChangeDetector_Outputs|
* |OVP_DocEnd_BoxAlgorithm_SignChangeDetector_Outputs|
* |OVP_DocBegin_BoxAlgorithm_SignChangeDetector_Output1|
Output stimulations.
* |OVP_DocEnd_BoxAlgorithm_SignChangeDetector_Output1|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_SignChangeDetector_Settings|
* |OVP_DocEnd_BoxAlgorithm_SignChangeDetector_Settings|
* |OVP_DocBegin_BoxAlgorithm_SignChangeDetector_Setting1|
Stimulation to send when the value becomes positive.
* |OVP_DocEnd_BoxAlgorithm_SignChangeDetector_Setting1|
* |OVP_DocBegin_BoxAlgorithm_SignChangeDetector_Setting2|
Stimulation to send when the value becomes negative.
* |OVP_DocEnd_BoxAlgorithm_SignChangeDetector_Setting2|
* |OVP_DocBegin_BoxAlgorithm_SignChangeDetector_Setting3|
Index of the channel to operate on.
* |OVP_DocEnd_BoxAlgorithm_SignChangeDetector_Setting3|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_SignChangeDetector_Examples|
* |OVP_DocEnd_BoxAlgorithm_SignChangeDetector_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_SignChangeDetector_Miscellaneous|
* |OVP_DocEnd_BoxAlgorithm_SignChangeDetector_Miscellaneous|
*/
@@ -0,0 +1,77 @@
/**
* \page BoxAlgorithm_SoundPlayer Sound Player
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_SoundPlayer_Description|
The Sound Player box can play a sound in WAV or OGG format. It is based on the OpenAL library.
The box has to be configured to define the stimulations used as "play" and "stop" triggers.
When the playback is stopped, manually or not, the "stop" stimulation is output.
* |OVP_DocEnd_BoxAlgorithm_SoundPlayer_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_SoundPlayer_Inputs|
* |OVP_DocEnd_BoxAlgorithm_SoundPlayer_Inputs|
* |OVP_DocBegin_BoxAlgorithm_SoundPlayer_Input1|
The stimulations that trigger "play" or "stop".
* |OVP_DocEnd_BoxAlgorithm_SoundPlayer_Input1|
__________________________________________________________________
Outputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_SoundPlayer_Outputs|
* |OVP_DocEnd_BoxAlgorithm_SoundPlayer_Outputs|
* |OVP_DocBegin_BoxAlgorithm_SoundPlayer_Output1|
The box outputs the "play" and "stop" triggers when the sound is actually started and stopped (manually or at the end of file). These stimulations are synchronized with the OpenAL engine, which timing may differ slightly with the input triggers. Note that this output is deprecated.
* |OVP_DocEnd_BoxAlgorithm_SoundPlayer_Output1|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_SoundPlayer_Settings|
* |OVP_DocEnd_BoxAlgorithm_SoundPlayer_Settings|
* |OVP_DocBegin_BoxAlgorithm_SoundPlayer_Setting1|
The stimulation that triggers the sound play.
* |OVP_DocEnd_BoxAlgorithm_SoundPlayer_Setting1|
* |OVP_DocBegin_BoxAlgorithm_SoundPlayer_Setting2|
The stimulation that triggers the sound stop.
* |OVP_DocEnd_BoxAlgorithm_SoundPlayer_Setting2|
* |OVP_DocBegin_BoxAlgorithm_SoundPlayer_Setting3|
The sound file, in OGG or WAV format.
* |OVP_DocEnd_BoxAlgorithm_SoundPlayer_Setting3|
* |OVP_DocBegin_BoxAlgorithm_SoundPlayer_Setting4|
This setting indicates if the file has to be played in a loop once started.
\b note: when enabled the output stimulation is not sent after each loop, but only when a "stop" stimulation is received.
* |OVP_DocEnd_BoxAlgorithm_SoundPlayer_Setting4|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_SoundPlayer_Examples|
The box can be used to design auditory BCI scenarios or to launch audio events for Event-Related Potential (ERP) data recording.
* |OVP_DocEnd_BoxAlgorithm_SoundPlayer_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_SoundPlayer_Miscellaneous|
This box is based on OpenAL (through Alut) and uses the libogg and libvorbis libraries.
The box sends the recognized stimulations to the Acquisition Server using TCP Tagging after the corresponding play or stop events have triggered. This is the mechanism to replace the deprecated stimulation output of the box.
* |OVP_DocEnd_BoxAlgorithm_SoundPlayer_Miscellaneous|
*/
@@ -0,0 +1,102 @@
/**
* \page BoxAlgorithm_StimulationFilter Stimulation Filter
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_StimulationFilter_Description|
* Filters a stimulation stream in order to select or reject some
* specific stimulation ranges. The configuration of the box consists
* of a time range in which the filter will be activated, and
* a set of rules which will be executed consecutively. The first
* rule is the default one, specifying what to do if no other rule
* matches. The next rules will specify what to do for their respective
* range of stimulations. The last matching rule is chosen so you should
* build up your rules from general purpose to specific purpose.
* Please note that if no time range is specified (i.e. begin and end are both 0),
* The filter will be \b always active.
* |OVP_DocEnd_BoxAlgorithm_StimulationFilter_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_StimulationFilter_Inputs|
* |OVP_DocEnd_BoxAlgorithm_StimulationFilter_Inputs|
* |OVP_DocBegin_BoxAlgorithm_StimulationFilter_Input1|
The stimulation set to filter.
* |OVP_DocEnd_BoxAlgorithm_StimulationFilter_Input1|
__________________________________________________________________
Outputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_StimulationFilter_Outputs|
* |OVP_DocEnd_BoxAlgorithm_StimulationFilter_Outputs|
* |OVP_DocBegin_BoxAlgorithm_StimulationFilter_Output1|
* The stimulation set filtered according to the specified set of rules.
* |OVP_DocEnd_BoxAlgorithm_StimulationFilter_Output1|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_StimulationFilter_Settings|
* You can add as many settings as you want. They will be grouped
* in order to have one action and two stimulation identifiers per rule.
* |OVP_DocEnd_BoxAlgorithm_StimulationFilter_Settings|
* |OVP_DocBegin_BoxAlgorithm_StimulationFilter_Setting1|
* This is the default action to perform if no rule is matching.
* |OVP_DocEnd_BoxAlgorithm_StimulationFilter_Setting1|
* |OVP_DocBegin_BoxAlgorithm_StimulationFilter_Setting2|
* The starting time of the filter.
* |OVP_DocEnd_BoxAlgorithm_StimulationFilter_Setting2|
* |OVP_DocBegin_BoxAlgorithm_StimulationFilter_Setting3|
* The ending time of the filter.
* |OVP_DocEnd_BoxAlgorithm_StimulationFilter_Setting3|
* |OVP_DocBegin_BoxAlgorithm_StimulationFilter_Setting4|
* This setting contains the action to perform on the specified range of stimulations.
* The range of stimulations is specified with next two settings.
* |OVP_DocEnd_BoxAlgorithm_StimulationFilter_Setting4|
* |OVP_DocBegin_BoxAlgorithm_StimulationFilter_Setting5|
* The stimulation starting the range.
* |OVP_DocEnd_BoxAlgorithm_StimulationFilter_Setting5|
* |OVP_DocBegin_BoxAlgorithm_StimulationFilter_Setting6|
* The stimulation ending the range.
* |OVP_DocEnd_BoxAlgorithm_StimulationFilter_Setting6|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_StimulationFilter_Examples|
* A simple example could be a selection from Label 00 to 0F in a stimulation
* stream. For such example, you would have to turn third setting value (default action)
* to \c Reject and use one \c Select rule for range Label 00 to Label 0F.
*
* A complete example could be to select Label 00 to 0F,
* and the particular stimulations GDF LEFT and GDF RIGHT. Additionally, for a
* reason, you want to avoid the Label 07 and Label 08. In this case, you
* will have to turn the default action setting to \c Reject then build up 4 rules :
* - rule 1 : \c Select range Label 00 to Label 0F
* - rule 2 : \c Select range GDF Left to GDF Left (only 1 stim in this range)
* - rule 3 : \c Select range GDF Right to GDF Right (only 1 stim in this range)
* - rule 4 : \c Reject range Label 07 to Label 08
* |OVP_DocEnd_BoxAlgorithm_StimulationFilter_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_StimulationFilter_Miscellaneous|
* |OVP_DocEnd_BoxAlgorithm_StimulationFilter_Miscellaneous|
*/
@@ -0,0 +1,63 @@
/**
* \page BoxAlgorithm_Timeout Timeout
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_Timeout_Description|
This box will send a stimulation on its output after it stops receiving an input. The user
can set a duration to wait before considering the output inactive.
* |OVP_DocEnd_BoxAlgorithm_Timeout_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_Timeout_Inputs|
* |OVP_DocEnd_BoxAlgorithm_Timeout_Inputs|
* |OVP_DocBegin_BoxAlgorithm_Timeout_Input1|
Streamed Matrix input to be monitored.
* |OVP_DocEnd_BoxAlgorithm_Timeout_Input1|
__________________________________________________________________
Outputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_Timeout_Outputs|
* |OVP_DocEnd_BoxAlgorithm_Timeout_Outputs|
* |OVP_DocBegin_BoxAlgorithm_Timeout_Output1|
Output stimulation. One stimulation will be sent after the timeout is reached.
* |OVP_DocEnd_BoxAlgorithm_Timeout_Output1|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_Timeout_Settings|
* |OVP_DocEnd_BoxAlgorithm_Timeout_Settings|
* |OVP_DocBegin_BoxAlgorithm_Timeout_Setting1|
Timeout value. Duration (in seconds) to wait after the last received chunk before the input is considered inactive.
* |OVP_DocEnd_BoxAlgorithm_Timeout_Setting1|
* |OVP_DocBegin_BoxAlgorithm_Timeout_Setting2|
Sitmulation ID to send.
* |OVP_DocEnd_BoxAlgorithm_Timeout_Setting2|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_Timeout_Examples|
* |OVP_DocEnd_BoxAlgorithm_Timeout_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_Timeout_Miscellaneous|
* |OVP_DocEnd_BoxAlgorithm_Timeout_Miscellaneous|
*/