Synopsis
FEP_VisuomotorJoystickTask is a BCI2000 application module that implements a center-out visuomotor reaching task controlled with a USB HID joystick. The task presents hidden changes in the relationship between joystick movement and cursor movement while recording behavioral responses synchronized with the BCI2000 data stream.
The task includes:
- Normal and inverted joystick-to-cursor mappings.
- Unannounced mapping changes between trials.
- Six sequential experimental block roles with different mapping frequencies.
- Normal and configurable high cursor-gain conditions.
- Mapping-switch, prior-condition, and trials-since-switch state logging.
- A mandatory minimal introduction.
- A normal-mapping sandbox for joystick familiarization.
- Reaction-time, movement-time, total-time, cursor, joystick, target, condition, and gain logging in the BCI2000
.dat file.
The participant is not informed that the joystick-to-cursor mapping, cursor gain, mapping probabilities, or block structure may change. Targets are displayed identically across conditions so that the current mapping is not visually cued.
The current implementation does not calculate free energy, posterior probability, prediction error, or another explicit computational quantity associated with the Free Energy Principle. The application instead provides an experimental framework for manipulating hidden visuomotor mappings, recent mapping history, mapping frequency, and cursor gain while measuring behavioral adaptation.
Location
The source code for the FEP Visuomotor Joystick Task is located in:
src/custom/FEP_VisuomotorJoystickTask/
The main implementation is contained in:
FEP_VisuomotorJoystickTask.cpp
with the corresponding header and build configuration in:
FEP_VisuomotorJoystickTask.h
CMakeLists.txt
The application is included from:
src/custom/CMakeLists.txt
The CMake target and Windows executable are:
FEP_VisuomotorJoystickTask
FEP_VisuomotorJoystickTask.exe
Versioning
Author
Alexander Speer
Friedman Lab, Department of Neurosurgery
Washington University in St. Louis
Developed in the Friedman Lab.
Contact: [speer@wustl.edu](mailto:speer@wustl.edu)
Version History
The FEP module is currently maintained under src/custom and does not have independent Git or SVN revision history in the inspected development checkout.
Build metadata associated with the inspected implementation reports:
- BCI2000 framework: 3.6.9535
- BCI2000 source revision: 9535
- Release configuration: x64
- Compiler: MSVC 19.35.32215.0
- Build date of inspected Release build: September 18, 2026
These values describe the BCI2000 build containing the module and should not be interpreted as an independent revision number for FEP_VisuomotorJoystickTask.
No task-specific .prm or .bat file was found in the inspected source tree.
Functional Description
Scientific Motivation
The task repeatedly requires participants to make center-out joystick movements toward peripheral visual targets.
Across trials, the application manipulates:
- Whether joystick displacement moves the cursor in the same or opposite direction.
- Whether cursor displacement uses normal gain or increased gain.
- The frequency of normal and inverted mappings within a block.
- The sequence of mapping exposure across blocks.
- Whether a trial immediately follows a change in mapping.
The resulting data may be used to examine behavioral consequences of recent mapping history, mapping changes, mapping frequency, and cursor gain.
Examples of behavioral quantities available from the recorded data include:
- Reaction time.
- Movement time.
- Total target-acquisition time.
- Cursor trajectory.
- Initial movement direction.
- Trajectory curvature.
- Performance immediately following a mapping switch.
- Performance as a function of the number of trials since a mapping switch.
- Differences between normal-dominant and approximately balanced mapping contexts.
- Interactions between mapping and cursor gain.
The current implementation does not contain an explicit Bayesian model, posterior estimate, prediction-error calculation, adaptation score, or free-energy calculation.
Condition Terminology
The FEP task uses the terms Normal and Inverted rather than the Automatic and Controlled terminology used by the earlier USBHIDJoystickTask.
TaskCondition
|
Mapping
|
|
|
|
|
|
|
|
|
|
The current condition is not shown to the participant.
Experiment Overview
Each run begins with:
- A minimal introduction screen.
- A free-movement joystick sandbox.
- The first active experimental block.
- Sequential experimental trials across as many as six block roles.
- A completion screen when all configured trials have finished.
There are no participant-facing block announcements between experimental blocks.
The standard experimental trial sequence is:
- Waiting for center.
- Holding center.
- Warning.
- Pre-target delay.
- Target appearance.
- Target-directed movement.
- Target acquisition.
- Feedback.
- Advance to the next trial or block.
A new target is generated after each successfully completed non-final trial.
Introduction
The introduction is mandatory in the current implementation.
During the introduction:
Introduction=1
TutorialPhase=1
TaskPhase=0
- The cursor is hidden.
- The center marker is hidden.
- The warning cue is hidden.
- The target is hidden.
- The fixation cross is hidden.
- The progress bar is hidden.
- Experimental block, trial, target, mapping, gain, switch, prior, and timing states are zeroed.
The participant is shown:
Use the joystick to control the cursor.
At the beginning of each trial, return the cursor to the center and hold it there.
The center will turn yellow before the target appears.
Once the target appears, move the cursor to the target.
Press the joystick button to continue.
A rising press of JoystickButtons1 advances the participant to the sandbox.
Holding the button does not repeatedly advance the introduction because continuation uses rising-edge detection.
The diagnostic window does not contain a separate introduction-continuation button.
Sandbox
After the introduction, the participant enters a free-movement sandbox.
The participant sees:
- The black cursor.
- The gray center.
- The central cross.
- No peripheral target.
- No warning cue.
- No experimental progress bar.
The screen displays:
Practice moving the cursor with the joystick.
When you are ready to begin, return the cursor to the center and press the joystick button.
During the sandbox:
Introduction=1
TutorialPhase=2
TaskPhase=0
TaskBlock=0
TaskTrial=0
TaskCondition=0
- Normal direct mapping is used.
- Cursor gain is 1.0.
- No targets are generated.
- No experimental timing phases occur.
The sandbox ends only when:
- The cursor is inside the center tolerance region.
- A new joystick-button press occurs.
The participant must release the button after leaving the introduction screen and press it again to leave the sandbox.
When the sandbox finishes:
Introduction changes to 0.
TutorialPhase changes to 0.
TaskPhase becomes 1.
- Experimental block and trial states become active.
The introduction and sandbox do not tell the participant about:
- Inverted mappings.
- Mapping switches.
- Cursor-gain changes.
- Mapping probabilities.
- Experimental blocks.
- Prior conditions.
Experimental Blocks
The task uses a fixed sequence of six possible block roles.
There is no ExperimentMode parameter.
Any block whose trial-count parameter is set to 0 is omitted. TaskBlock retains the original block-role number, so block numbers may skip values when blocks are disabled.
| Block
|
Trial-count parameter
|
PriorCondition
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
For blocks 4 and 6:
floor(N/2) trials are assigned the Inverted mapping.
- Remaining trials use the Normal mapping.
- If the trial count is odd, Normal receives the additional trial.
For block 5:
- The number of Inverted trials is computed as approximately 10% of the block using rounding.
- Remaining trials are Normal.
- This is a fixed-count composition rather than an independent 10% probability on every trial.
Pseudorandomization
Mappings in blocks 4 through 6 are pseudorandomized.
The task attempts up to 64 shuffles and prefers sequences that:
- Do not strictly alternate when the sequence contains at least four trials.
- Avoid excessively long runs of one mapping.
The maximum preferred run length is:
max(3, unavoidableRun + 1)
where:
unavoidableRun = (majority + minority) / (minority + 1)
using integer division.
These restrictions are attempted rather than absolutely guaranteed. If no acceptable sequence is found after 64 attempts, the final generated sequence is used.
Cursor-gain conditions are shuffled independently from mapping conditions. Mapping-by-gain combinations are therefore not explicitly balanced.
Prior Conditions
PriorCondition identifies the block-level mapping context.
It does not represent the mapping used on the immediately preceding trial.
| Value
|
Code label
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The previous trial's mapping may be reconstructed offline from the preceding trial's TaskCondition.
Joystick Input
Joystick input is supplied through BCI2000's input logging system.
The application expects:
JoystickXpos
JoystickYpos
JoystickButtons1
The X and Y joystick states are expected to range from 0 through 32767.
Each axis is converted into the task's 0-through-1023 coordinate system:
taskJoystick = round(BCIJoystick * 1023 / 32767)
and normalized internally:
rawPosition = taskJoystick / 1023
The FEP application does not itself publish or enable LogJoystick. Joystick input logging must therefore be enabled in the BCI2000 configuration.
See LogJoystick.
Joystick-to-Cursor Mappings
Before target onset, the cursor normally follows direct absolute joystick position:
cursorX = rawX
cursorY = rawY
The current trial's mapping and gain conditions are already represented in their corresponding BCI2000 states during the preparation phases, but transformed movement normally begins only when the target appears.
Anchor Capture
At target onset, the application records:
- Current joystick X position.
- Current joystick Y position.
- Current cursor X position.
- Current cursor Y position.
- Current mapping direction.
- Current cursor gain.
These values form the anchor for transformed target-directed movement.
Because joystick displacement relative to the new anchor is initially zero, activating a transformed mapping does not produce an immediate cursor jump at target onset.
Normal Mapping, Normal Gain
For a Normal trial with normal gain, cursor position remains direct and absolute:
cursorX = joystickX / 1023
cursorY = joystickY / 1023
Inverted Mapping, Normal Gain
For an Inverted trial:
cursorX = anchorCursorX - (joystickX - anchorJoystickX) / 1023
cursorY = anchorCursorY - (joystickY - anchorJoystickY) / 1023
Both axes are inverted. This corresponds to a 180-degree reversal of joystick displacement around the target-onset anchor.
Normal Mapping, High Gain
For a Normal high-gain trial:
cursorX = anchorCursorX
+ HighCursorGain * (joystickX - anchorJoystickX) / 1023
cursorY = anchorCursorY
+ HighCursorGain * (joystickY - anchorJoystickY) / 1023
Inverted Mapping, High Gain
For an Inverted high-gain trial:
cursorX = anchorCursorX
- HighCursorGain * (joystickX - anchorJoystickX) / 1023
cursorY = anchorCursorY
- HighCursorGain * (joystickY - anchorJoystickY) / 1023
Cursor position is constrained to the valid participant-display coordinate range.
Cursor Gain
The task implements two cursor-gain conditions:
CursorGainCondition
|
Condition
|
|
|
|
|
|
|
|
|
|
The default value of HighCursorGain is:
1.5
The high-gain transformation multiplies joystick displacement relative to the target-onset anchor.
It applies to both the X and Y axes.
High-gain conditions occur in randomized blocks 4 through 6 and are shuffled independently from the mapping sequence.
Gain condition is not visually cued to the participant.
The current implementation does not define a SensoryReliability parameter or state. Earlier development versions included sensory-reliability and cursor-jitter mechanisms, but these are not part of the current implementation.
Return-to-Anchor Behavior
After an Inverted or high-gain trial, the anchored transform may remain active temporarily while the participant returns the joystick toward its target-onset anchor.
The previous anchor, direction, and gain remain active until both joystick axes return within 8 task-coordinate units of the previous joystick anchor.
The application then returns to direct absolute mapping for ordinary trial centering.
This behavior reduces abrupt cursor jumps when leaving an inverted or high-gain mapping.
The 8-unit deadzone is used for:
- Movement-onset detection.
- Return-to-anchor detection.
It is not used as a continuous joystick smoothing filter.
Mapping Switches
A mapping switch occurs when:
next trial TaskCondition != completed trial TaskCondition
Gain changes alone do not count as mapping switches.
Mapping switches are evaluated after the completed trial's feedback interval while advancing to the next trial.
Therefore:
- Mapping does not switch during target-directed movement.
- Mapping does not switch during the active feedback interval.
- The new condition becomes active when the next trial is selected.
- The new trial begins in
WaitingForCenter.
- The new trial's mapping transformation normally affects cursor movement beginning at target onset.
MappingSwitch State
MappingSwitch is an event-like state.
It is:
- 1 on the processing block that advances into a trial whose mapping differs from the completed trial.
- 0 on the following processing block.
- 0 when no mapping change occurs.
It should therefore be treated as a one-processing-block pulse.
TrialsSinceMappingSwitch
TrialsSinceMappingSwitch is a persistent counter.
Behavior:
- First experimental trial: 0.
- Trial immediately following a mapping switch: 0.
- Next trial with the same mapping: 1.
- Next same-mapping trial: 2.
- And so forth.
Because the first trial of the experiment also begins with a value of 0, TrialsSinceMappingSwitch==0 alone does not prove that a switch occurred.
Use MappingSwitch, a change in TaskCondition, or exclusion of the first experimental trial when identifying actual switch events.
Example
Suppose a portion of block 4 contains:
Normal -> Normal -> Inverted -> Inverted
Then:
| Trial
|
TaskCondition
|
MappingSwitch
|
TrialsSinceMappingSwitch
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PriorCondition remains 1 because all four trials occur within the HiddenMixed block.
Target Generation
A new target angle is generated for every new experimental trial.
The generator produces an integer from:
0 through 3599
TargetAngle is expressed in tenths of a degree:
angle in degrees = TargetAngle / 10
Targets therefore span:
0.0 through 359.9 degrees
in 0.1-degree increments.
Target position is computed using:
TargetX = 0.5 + 0.3 * cos(angle)
TargetY = 0.5 + 0.4 * sin(angle)
The unequal normalized X and Y radii correspond to a nominal circular target radius of approximately 300 pixels in the application's 1000 x 750 reference geometry.
Approximate 0-through-1023 target-state ranges are:
TargetX: 205 through 818.
TargetY: 102 through 921.
Targets:
- Are generated continuously around the center rather than from a small fixed set of positions.
- Are not selected according to mapping condition.
- Are not selected according to gain condition.
- Are not selected according to mapping-switch status.
- May repeat.
- Are not explicitly angularly balanced.
- Are black in every experimental condition.
- Do not appear during the introduction or sandbox.
A target is generated:
- For the first experimental trial.
- After each completed non-final trial.
Resetting the current trial does not generate a new target.
Experimental Trial Sequence
Waiting for Center
TaskPhase=1
The participant moves the cursor into the center region.
The participant sees:
- Cursor.
- Gray center marker.
- Central cross.
Normal direct mapping is normally used during centering, except while completing return-to-anchor behavior from a previous transformed trial.
Holding Center
TaskPhase=2
Once centered, the participant must remain within the center tolerance region for CenterHoldSeconds.
Leaving the center before the hold completes restarts center acquisition.
During this phase, the application also accumulates the joystick baseline used for later movement-onset detection.
Warning
TaskPhase=3
A larger yellow warning marker is displayed for WarningSeconds.
The participant must remain centered.
Leaving the center restarts the preparation sequence.
Pre-Target Delay
TaskPhase=4
The warning cue is removed and the task waits for PreTargetDelaySeconds.
The participant must remain centered.
Target Visible
TaskPhase=5
The peripheral black target appears.
At target onset:
- The joystick anchor is captured.
- The cursor anchor is captured.
- The selected mapping becomes behaviorally active.
- The selected gain becomes behaviorally active.
- The target-onset timestamp is recorded.
The participant then moves the cursor toward the target.
Feedback
TaskPhase=6
When the cursor reaches the target:
TargetHit pulses.
- Timing measurements are calculated.
- The target disappears.
- The task remains in feedback for
FeedbackSeconds.
After feedback expires, the application advances to the next trial or finishes the experiment.
Finished
TaskPhase=7
The participant display shows an end message and the run terminates by setting the standard BCI2000 Running state to 0.
Trial Phases
| Value
|
Phase
|
Meaning
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
An experimental target onset may be identified by transition into:
TaskPhase == 5
Movement onset may be identified by a rising transition of:
MovementStarted
Target acquisition is identified by:
TargetHit == 1
Participant Display
The participant-facing application window contains:
- Cursor.
- Central fixation cross.
- Gray center marker.
- Larger yellow warning marker.
- Black peripheral target.
- Experimental progress indicator.
- Introduction and sandbox text.
- Experiment-completion text.
The black target is identical across mapping and gain conditions.
The participant receives no visual indication of:
- Normal versus Inverted mapping.
- Normal versus High gain.
- Mapping switches.
PriorCondition.
- Block number.
- Trial number.
- Block transitions.
- Mapping probabilities.
The experimental progress bar spans the complete run rather than restarting at individual block boundaries.
There is no explicit success color or target-color change during feedback. The target disappears when acquired.
Diagnostic Window
A separate Qt diagnostic window titled:
FEP Visuomotor Joystick Diagnostics
is displayed to the experimenter.
During the experiment it displays information including:
- Current stage.
- Original block number out of six.
- Overall trial number.
- Total number of active trials.
- Trial number within the current block.
- Current mapping: Normal or Inverted.
- Cursor-gain condition: Normal or High.
- Actual cursor gain.
- Whether the current trial followed a mapping switch.
- Trials since the most recent mapping switch.
- Current task phase.
- Target angle.
- Target coordinates.
- Raw BCI2000 joystick states.
- Converted joystick coordinates.
- Current cursor coordinates.
- Movement-started status.
- Reaction time.
- Movement time.
- Total time.
- Reset/status information.
The diagnostic window does not currently display PriorCondition, although that value is recorded as a BCI2000 state.
During the introduction and sandbox, the window reports:
- Current introduction stage.
- Block/trial as not yet started.
- Normal mapping.
- Normal 1.0 gain.
- No mapping switch.
- Counter value 0.
- No experimental target.
- Joystick coordinates.
- Cursor coordinates.
- Zero timing values.
Diagnostic Controls
The current diagnostic window provides:
RESET CURRENT TRIAL
There is no diagnostic introduction-continuation button.
The reset control is enabled only during the experimental portion of the run before the Feedback phase.
Trial Reset
Experimental trials may be manually reset during:
- Waiting for center.
- Holding center.
- Warning.
- Pre-target delay.
- Target-visible movement.
Reset is unavailable during:
- Feedback.
- Finished.
- Introduction.
- Sandbox.
Resetting a trial:
- Returns the task to
WaitingForCenter.
- Restarts the phase timer.
- Clears target-appearance timing.
- Clears movement-onset timing.
- Clears
MovementStarted.
- Clears
TargetHit.
- Produces a
TrialReset pulse.
- Clears reaction-time state.
- Clears movement-time state.
- Clears total-time state.
- Resets movement-baseline accumulation.
- Keeps the same target.
- Keeps the same mapping.
- Keeps the same gain.
- Keeps the same block number.
- Keeps the same trial number.
- Keeps the same
PriorCondition.
- Keeps the same
TrialsSinceMappingSwitch.
- Does not rebuild or reshuffle the experimental sequence.
TrialReset is cleared on the next processing block and should therefore be interpreted as a one-processing-block event.
A reset does not generate a new MappingSwitch event.
Timing Measurements
Timing is measured using std::chrono::steady_clock.
Events are detected within BCI2000 Process() calls, so effective event timing resolution is limited by the BCI2000 processing-block interval.
Movement Onset
The joystick baseline is initialized when center holding begins and updated during the center-hold phase.
Movement onset occurs when either joystick axis differs from this baseline by more than 8 task-coordinate units:
abs(currentX - baselineX) > 8
or:
abs(currentY - baselineY) > 8
Reaction Time
Reaction time is measured from:
target onset -> detected movement onset
and recorded in:
ReactionTimeMs
Movement Time
Movement time is measured from:
detected movement onset -> target acquisition
and recorded in:
MovementTimeMs
Total Time
Total time is measured from:
target onset -> target acquisition
and recorded in:
TotalTimeMs
Timing values are expressed as rounded milliseconds.
The timing states:
- Are populated when the target is acquired.
- Remain populated through the Feedback phase.
- Are cleared when advancing to an ordinary subsequent trial.
- Are cleared after a manual reset.
- Remain populated after completion of the final trial.
- Are zero during the introduction and sandbox.
If target acquisition occurs without a detected movement onset, reaction time and movement time are written as zero while total time is still recorded.
Parameters
Experiment Structure
| Parameter
|
Type
|
Default
|
Range
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
At least one trial must be configured across the six block parameters.
Cursor Gain
HighCursorGain
Gain applied during High cursor-gain trials.
Type: floating point
Default:
1.5
Range:
1.0-5.0
Normal gain is fixed at 1.0.
Trial Timing
CenterHoldSeconds
Time the participant must remain within the center region.
Type: floating point
Default:
3.0 seconds
Range:
0.0-60.0 seconds
WarningSeconds
Duration of the yellow warning cue.
Type: floating point
Default:
0.5 seconds
Range:
0.0-60.0 seconds
PreTargetDelaySeconds
Delay between the end of the warning cue and target onset.
Type: floating point
Default:
0.5 seconds
Range:
0.0-60.0 seconds
FeedbackSeconds
Duration of the feedback phase after successful target acquisition.
Type: floating point
Default:
0.5 seconds
Range:
0.0-60.0 seconds
Display
StimulusDisplay
Selects the physical display used for the participant-facing application window.
Type: integer enumeration
Default:
0
On Windows, available displays are enumerated by the application.
Parameters Not Defined by This Application
The current implementation does not define:
ExperimentMode
- Initial mapping selector
- Mapping-switch probability
- Introduction enable/disable parameter
- Sandbox duration
SensoryReliability
- Cursor-noise parameter
ResultsFile
- CSV-output parameter
States
The following states are defined by FEP_VisuomotorJoystickTask.
| State
|
Width
|
Initial
|
Produced values
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
External Joystick States
The application also reads states supplied by BCI2000's joystick logging system.
| State
|
|
|
|
|
|
|
|
|
|
|
The application also accesses the standard BCI2000:
Running
state when ending the experiment.
States Not Present
The current implementation does not define:
DisplayedCursorX
DisplayedCursorY
SensoryReliability
PracticeTrial
TaskBlockType
Cursor Coordinates
CursorX and CursorY represent the final cursor coordinates actually displayed to the participant after any:
- Mapping inversion.
- High-gain transformation.
- Return-to-anchor transformation.
- Display-boundary clipping.
The same coordinates are used for:
- Participant cursor rendering.
- Center detection.
- Target-hit detection.
- BCI2000 state output.
- Diagnostic display.
They should therefore be used when analyzing the participant-visible cursor trajectory.
The task does not record a separate latent or untransformed cursor trajectory.
The direct joystick-equivalent trajectory may be reconstructed offline from:
JoystickXpos
JoystickYpos
using the same conversion logic as the task.
Raw joystick and displayed cursor coordinates match during:
- The sandbox.
- Ordinary centering.
- Normal 1x trials.
- The instant a transformed movement anchor is captured.
They diverge during:
- Inverted movement.
- High-gain movement.
- Inverted plus high-gain movement.
- Return-to-anchor behavior following a transformed trial.
Data Recording
Task variables are recorded as BCI2000 states in the ordinary BCI2000 .dat data stream.
The application records information sufficient to recover:
- Participant-visible cursor trajectory.
- Trial phase.
- Mapping condition.
- Cursor-gain condition.
- Target angle.
- Target coordinates.
- Block number.
- Trial number.
- Movement onset.
- Target acquisition.
- Trial resets.
- Mapping switches.
- Trials since the most recent mapping switch.
- Prior-condition category.
- Introduction/sandbox status.
- Reaction time.
- Movement time.
- Total time.
Joystick trajectories are recorded through BCI2000 input logging when joystick logging is enabled.
The application passes signal channels through unchanged:
Output = Input;
Secondary Output
The current FEP implementation does not write an application-specific:
- CSV file.
- JSON file.
- Text results file.
- Database.
There is no ResultsFile parameter.
Successful trials generate diagnostic/log output, but this is not a structured secondary results file.
Offline Analysis Notes
| Measurement / Event
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Event-Like and Persistent States
| State
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
An event state that lasts one BCI2000 processing block will ordinarily be represented across the samples belonging to that signal block rather than necessarily appearing as a single sample in the final data file.
Differences from USBHIDJoystickTask
The FEP task retains much of the center-out reaching and data-recording infrastructure of the earlier USBHIDJoystickTask while substantially changing the participant-facing experimental structure.
Retained
- BCI2000
ApplicationBase application module.
- USB joystick input through BCI2000 input logging.
- Center-out reaching behavior.
- Center hold.
- Yellow warning period.
- Pre-target delay.
- Target-directed movement.
- Feedback interval.
- Continuous target-angle generation.
- Reaction-time measurement.
- Movement-time measurement.
- Total-time measurement.
- Movement-onset deadzone.
- Participant application window.
- Experimenter diagnostic window.
- Manual trial reset.
- Experimental progress bar.
- BCI2000 state logging.
- Direct and inverted joystick-control concepts.
Removed
The FEP task does not use the older task's:
ExperimentMode.
- Automatic-only mode.
- Controlled-only mode.
- Ordered-mode selector.
- Configurable ordered starting condition.
TaskBlockType.
- Green Automatic targets.
- Red Controlled targets.
- Condition-specific target-color cues.
- Detailed Automatic/Controlled tutorial.
- Explicit teaching of the inverted mapping.
- Condition-specific practice trials.
PracticeTrial.
- Optional tutorial enable/disable parameter.
- Diagnostic tutorial-continuation button.
- Condition-specific run-summary statistics.
ResultsFile.
- Secondary CSV output.
- Participant-facing block announcements.
Added
The FEP task adds:
- Fixed six-role experimental sequence.
- Hidden Normal and Inverted mappings.
MappingSwitch.
TrialsSinceMappingSwitch.
PriorCondition.
CursorGainCondition.
HighCursorGain.
- Normal versus high-gain trials.
- Hidden mapping switches.
- Minimal participant introduction.
- Free-movement sandbox.
- Black targets in all conditions.
- Approximately balanced and Normal-dominant mapping blocks.
Changed Condition Terminology
The earlier USB task used:
The FEP task uses:
Changed Trial Organization
The USB task supports selectable experimental modes and explicit ordered or pseudorandom block structures.
The FEP task instead constructs a predefined six-role sequence and omits individual blocks only when their configured trial count is zero.
Changed Participant Information
The earlier task explicitly explains its mappings and provides condition-specific practice.
The FEP task deliberately provides only generic joystick instructions and a Normal-mapping sandbox.
It does not disclose:
- Inversion.
- Gain manipulation.
- Mapping switches.
- Mapping probabilities.
- Block transitions.
Known Limitations and Analysis Considerations
- The FEP module currently has no independent source-control revision.
- There is no task-specific saved parameter file in the inspected source tree.
- There is no task-specific launch batch file in the inspected source tree.
- The participant's subjective expectation or surprise cannot be inferred directly from the software.
PriorCondition describes block context rather than an inferred participant belief.
- Blocks 4 and 6 use the same approximately balanced mapping-generation rule and differ principally in their sequence position and
PriorCondition value.
- The mapping pseudorandomization restrictions are not guaranteed if all 64 candidate shuffles fail.
- There is no unsuccessful-trial timeout.
- The source contains no explicit formal Free Energy Principle model.
- High cursor gain is implemented as a gain manipulation. The source itself does not label it sensory reliability.
- There is no separately recorded untransformed cursor trajectory.
- Analyses requiring the direct joystick-equivalent trajectory should reconstruct it from joystick states.
- Display geometry is normalized from a nominal 1000 x 750 design and physical appearance may depend on monitor geometry and BCI2000 window configuration.
Scientific References
No FEP-specific paper, DOI, PMID, arXiv identifier, or other scientific reference is currently cited in the FEP_VisuomotorJoystickTask source code or supporting files inspected for this documentation.
The current implementation should therefore be described in terms of its implemented experimental manipulations rather than attributed to a specific formal Free Energy Principle model unless an appropriate study protocol or scientific reference is added separately.
See also
|
|
|
|
|
|
|
|
|
|
|