add Taktilen Branch

This commit is contained in:
2022-07-12 08:13:37 +02:00
parent 7fb9ca1d2b
commit 44c73e4a59
45 changed files with 9686 additions and 622 deletions
+124
View File
@@ -0,0 +1,124 @@
########################################################################################################################
# This configuration file contains declarations of variables used by the scenarios of the tactile BCI System #
# #
# Add --config PATH_TO_THIS_FILE when starting the designer from the command line #
# USE --define TOKEN VALUE to assign a different value to a token without changing the default configuration #
# #
# #
# Scenarios requiring this configuration file: p300-tactile-0-signal-monitoring.xml, p300-tactile-1-acquisition.xml, #
# p300-tactile-2-train-xDAWN.xml, p300-tactile-3-train-classifier.xml, #
# p300-tactile-4-online.xml #
# #
# Author : Tobias Baumann #
# Date : 2021-12-27 #
########################################################################################################################
########################################################################################################################
# General Settings #
########################################################################################################################
PATH_CONFIG = ${Player_ScenarioDirectory}/cfg
PATH_SCRIPTS = ${Player_ScenarioDirectory}/scripts
PATH_SIGNALS = ${Player_ScenarioDirectory}/signals
PATH_UI = ${Player_ScenarioDirectory}/ui
ROW_BASE = OVTK_StimulationId_Label_01
N_TACTILOS = 6
FREE_SPELLING = true
########################################################################################################################
# Acquisition and Signal Processing #
########################################################################################################################
ACQUISITION_SERVER_HOST_NAME = ${AcquisitionServer_HostName}
ACQUISITION_SERVER_PORT = 1024
CHANNEL_SELECTION = 1;2;3;4;5;6;7;8
SIGNAL_DECIMATION_FACTOR = 2
FILTER_TYPE = Band Pass
FILTER_ORDER = 4
LOW_CUT_FREQUENCY = 1.000000
HIGH_CUT_FREQUENCY = 20.000000
########################################################################################################################
# Stimulation #
########################################################################################################################
SCRIPT_TACTILE_STIMULATOR = ${PATH_SCRIPTS}/p300-tactile-stimulator.lua
N_REPETITIONS = 4
N_TRIALS = 4
STIM_DURATION = 0.2
NO_STIM_DURATION = 0.1
INTER_REPETITION_DELAY = 1.0
INTER_TRIAL_DELAY = 4.0
START_STIMULATION = OVTK_StimulationId_Label_00
START_DELAY = 20
########################################################################################################################
# Tactilo Control #
########################################################################################################################
SERIAL_PORT = /dev/ttyACM0
########################################################################################################################
# Target Generation #
########################################################################################################################
SCRIPT_TARGET_GENERATION = ${PATH_SCRIPTS}/p300-tactile-target.lua
SEND_DELAY = 2
########################################################################################################################
# FILE I/O #
########################################################################################################################
OUTPUT_FILE_NAME = ${PATH_SIGNALS}/p300-tactile-session.ov
INPUT_FILE_NAME = ${PATH_SIGNALS}/p300-tactile-session.ov
########################################################################################################################
# xDAWN Spatial Filter #
########################################################################################################################
SPATIAL_TRAIN_TRIGGER = OVTK_StimulationId_ExperimentStop
SPATIAL_FILTER_CONFIG = ${PATH_CONFIG}/p300-spatial-filter.cfg
FILTER_DIMENSION = 2
########################################################################################################################
# P300 Classifier #
########################################################################################################################
CLASSIFIER_TRAIN_TRIGGER = OVTK_StimulationId_ExperimentStop
CLASSIFIER_CONFIG = ${PATH_CONFIG}/p300-classifier.cfg
MULTICLASS_STRATEGY = Native
CLASS_1 = OVTK_StimulationId_Target
CLASS_2 = OVTK_StimulationId_NonTarget
ALGORITHM = Linear Discrimimant Analysis (LDA)
USE_SHRINKAGE = false
SHRINKAGE_COEFFICIENT = -1.000000
SHRINKAGE_FORCE_DIAGONAL_COV = false
N_PARTITIONS = 5
CLASS_BALANCE = false
########################################################################################################################
# P300 ACCUMULATOR #
########################################################################################################################
SCRIPT_P300_ACCUMULATOR = ${PATH_SCRIPTS}/p300-tactile-accumulator.lua
########################################################################################################################
# Tactile Visualization #
########################################################################################################################
TACTILE_UI = ${PATH_UI}/p300-tactile-6.ui
FLASH_BG = 5,5,5
FLASH_FG = 100,100,100
FLASH_FONT_SIZE = 50
NO_FLASH_BG = 0,0,0
NO_FLASH_FG = 25,25,25
NO_FLASH_FONT_SIZE = 50
TARGET_BG = 20,20,70
TARGET_FG = 10,10,30
TARGET_FONT_SIZE = 50
SELECTED_BG = 10,40,10
SELECTED_FG = 60,100,60
SELECTED_FONT_SIZE = 50
+4
View File
@@ -0,0 +1,4 @@
<OpenViBE-SettingsOverride>
<SettingValue>Epoch block average</SettingValue>
<SettingValue>1</SettingValue>
</OpenViBE-SettingsOverride>
+58
View File
@@ -0,0 +1,58 @@
#############################################################################################################################################################################################################################################
# OpenViBE Command Lines Tactile-BCI #
# #
# Author : Tobias Baumann #
# Date : 2022-01-18 #
#############################################################################################################################################################################################################################################
#############################################################################################################################################################################################################################################
# Start Acquisition Server #
#############################################################################################################################################################################################################################################
OV_PATH\openvibe-acquisition-server.cmd --define AcquisitionServer_DefaultDriver DRIVER_NAME --define AcquisitionServer_DefaultSampleCountPerBuffer N_SAMPLES_PER_BUFFER --define AcquisitionServer_DefaultConnectionPort PORT_NUMBER
OV_PATH --> Pfad zur openvibe-acquisition-server.sh
DRIVER_NAME --> Bezeichnung des zu verwendenden Treibers z.B.: "g.tec Unicorn Gipsa-lab"
N_SAMPLES_PER_BUFFER --> Anzahl der Samples pro Buffer (4,8,16,32,64,128,256,512) (default: 32)
PORT_NUMBER --> Vom Acquisition Server verwendeter Port (default: 1024)
#############################################################################################################################################################################################################################################
# Wiedergabe der Szenarios ohne Designer GUI und mit der Konfiguration für das Taktile BCI #
#############################################################################################################################################################################################################################################
1. Allgemeiner Aufruf:
OV_PATH\openvibe-designer.cmd --no-gui --config CONFIG_PATH\OV_TACTILE_PANDA.conf --play SCENARIO_PATH\SCENARIO_NAME.xml
OV_PATH --> Pfad zur openvibe-designer.sh
SCENARIO_PATH --> Pfad zu den Szenarios für das Taktile BCI
SCENARIO_NAME --> Name des zu startenden Szenarios
CONFIG_PATH --> Pfad zur Config für das Taktile BCI (=SCENARIO_PATH\cfg)
2. Szenario 0 - Signal Monitoring:
OV_PATH\openvibe-designer.sh --no-gui --config CONFIG_PATH\OV_TACTILE_PANDA.conf --play SCENARIO_PATH\p300-tactile-0-signal-monitoring.xml
3. Szenario 1 - Acquisition:
OV_PATH\openvibe-designer.sh --no-gui --config CONFIG_PATH\OV_TACTILE_PANDA.conf --play SCENARIO_PATH\p300-tactile-1-acquisition.xml
4. Szenario 2 - Train xDAWN Filter:
OV_PATH\openvibe-designer.sh --no-gui --config CONFIG_PATH\OV_TACTILE_PANDA.conf --playfast SCENARIO_PATH\p300-tactile-2-train-xDAWN.xml
4. Szenario 3 - Train P300 Classifier:
OV_PATH\openvibe-designer.sh --no-gui --config CONFIG_PATH\OV_TACTILE_PANDA.conf --playfast SCENARIO_PATH\p300-tactile-3-train-classifier.xml
5. Szenario 4 - Online(Free_Spelling):
OV_PATH\openvibe-designer.sh --no-gui --config CONFIG_PATH\OV_TACTILE_PANDA.conf --define FREE_SPELLING true --play SCENARIO_PATH\p300-tactile-4-online.xml
6. Szenario 4 - Online(Copy_Spelling):
OV_PATH\openvibe-designer.sh --no-gui --config CONFIG_PATH\OV_TACTILE_PANDA.conf --define FREE_SPELLING false --play SCENARIO_PATH\p300-tactile-4-online.xml
+7
View File
@@ -0,0 +1,7 @@
p300-tactile:
- Die Szenarien für das Taktile BCI basieren auf dem OpenVibeSzenrio p300-speller-xDAWN.
- Die Ausführungsreihenfolge ist Acquisition -> train-xDAWN -> train-classifier -> online.
- der Designer muss mit --config CONFIG_PATH\OV_TACTILE_PANDA.conf von der konsole gestartet werden um die im config file festgelegten Tokens verwenden zu können
- weitere Informationen zum ausführen der Szenarios sind in "Commands_TactileBCI.txt" zu finden
@@ -0,0 +1,743 @@
<OpenViBE-Scenario>
<FormatVersion>2</FormatVersion>
<Creator>OpenViBE Designer</Creator>
<CreatorVersion>3.3.0</CreatorVersion>
<Settings></Settings>
<Inputs></Inputs>
<Outputs></Outputs>
<Boxes>
<Box>
<Identifier>(0x000014bf, 0x000034db)</Identifier>
<Name>Identity</Name>
<AlgorithmClassIdentifier>(0x5dffe431, 0x35215c50)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Input stream 1</Name>
</Input>
<Input>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Input stream 2</Name>
</Input>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Input stream 3</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Output stream 1</Name>
</Output>
<Output>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Output stream 2</Name>
</Output>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Output stream 3</Name>
</Output>
</Outputs>
<Attributes>
<Attribute>
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>432</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>928</Value>
</Attribute>
<Attribute>
<Identifier>(0x30a4e5c9, 0x83502953)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xa8ffe2a3, 0x27038f03)</Value>
</Attribute>
<Attribute>
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xac367a9c, 0x2da95abe)</Identifier>
<Value>6</Value>
</Attribute>
<Attribute>
<Identifier>(0xfba64161, 0x65304e21)</Identifier>
<Value></Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00003f1b, 0x00003c78)</Identifier>
<Name>Signal Decimation</Name>
<AlgorithmClassIdentifier>(0x012f4bea, 0x3be37c66)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Input signal</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Output signal</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
<Name>Decimation factor</Name>
<DefaultValue>8</DefaultValue>
<Value>${SIGNAL_DECIMATION_FACTOR}</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>336</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>816</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x5082af41, 0xd0fbf4cb)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x000046bc, 0x00003f08)</Identifier>
<Name>Temporal Filter</Name>
<AlgorithmClassIdentifier>(0xb4f9d042, 0x9d79f2e5)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Input signal</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Output signal</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0xfa20178e, 0x4cba62e9)</TypeIdentifier>
<Name>Filter Type</Name>
<DefaultValue>Band Pass</DefaultValue>
<Value>${FILTER_TYPE}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
<Name>Filter Order</Name>
<DefaultValue>4</DefaultValue>
<Value>${FILTER_ORDER}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Low Cut-off Frequency (Hz)</Name>
<DefaultValue>1</DefaultValue>
<Value>${LOW_CUT_FREQUENCY}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>High Cut-off Frequency (Hz)</Name>
<DefaultValue>40</DefaultValue>
<Value>${HIGH_CUT_FREQUENCY}</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>256</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>816</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x6a7c1e9b, 0x6b00b5c5)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>4</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00005c5c, 0x00007610)</Identifier>
<Name>Raw</Name>
<AlgorithmClassIdentifier>(0x0055be5f, 0x087bdd12)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Data</Name>
</Input>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Stimulations</Name>
</Input>
<Input>
<TypeIdentifier>(0x6ab26b81, 0x0f8c02f3)</TypeIdentifier>
<Name>Channel Units</Name>
</Input>
</Inputs>
<Settings>
<Setting>
<TypeIdentifier>(0x5de046a6, 0x086340aa)</TypeIdentifier>
<Name>Display Mode</Name>
<DefaultValue>Scan</DefaultValue>
<Value>Scan</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x33a30739, 0x00d5299b)</TypeIdentifier>
<Name>Auto vertical scale</Name>
<DefaultValue>Per channel</DefaultValue>
<Value>Per channel</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Scale refresh interval (secs)</Name>
<DefaultValue>5</DefaultValue>
<Value>0.000000</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Vertical Scale</Name>
<DefaultValue>100</DefaultValue>
<Value>100</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Vertical Offset</Name>
<DefaultValue>0</DefaultValue>
<Value>0</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Time Scale</Name>
<DefaultValue>10</DefaultValue>
<Value>5.000000</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Horizontal ruler</Name>
<DefaultValue>true</DefaultValue>
<Value>true</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Vertical ruler</Name>
<DefaultValue>false</DefaultValue>
<Value>false</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Multiview</Name>
<DefaultValue>false</DefaultValue>
<Value>false</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>560</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>1024</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x92c056a7, 0x2dc71aff)</Value>
</Attribute>
<Attribute>
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
<Value>false</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>9</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>3</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00006b6d, 0x00002690)</Identifier>
<Name>Acquisition client</Name>
<AlgorithmClassIdentifier>(0x35d225cb, 0x3e6e3a5f)</AlgorithmClassIdentifier>
<Outputs>
<Output>
<TypeIdentifier>(0x403488e7, 0x565d70b6)</TypeIdentifier>
<Name>Experiment information</Name>
</Output>
<Output>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Signal stream</Name>
</Output>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Stimulations</Name>
</Output>
<Output>
<TypeIdentifier>(0x013df452, 0xa3a8879a)</TypeIdentifier>
<Name>Channel localisation</Name>
</Output>
<Output>
<TypeIdentifier>(0x6ab26b81, 0x0f8c02f3)</TypeIdentifier>
<Name>Channel units</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
<Name>Acquisition server hostname</Name>
<DefaultValue>${AcquisitionServer_HostName}</DefaultValue>
<Value>${ACQUISITION_SERVER_HOST_NAME}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
<Name>Acquisition server port</Name>
<DefaultValue>1024</DefaultValue>
<Value>${ACQUISITION_SERVER_PORT}</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>64</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>944</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x0d4656c0, 0xc95b1fa8)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
<Value>false</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>5</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>2</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00007e4e, 0x00006b7b)</Identifier>
<Name>Filtered</Name>
<AlgorithmClassIdentifier>(0x0055be5f, 0x087bdd12)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Data</Name>
</Input>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Stimulations</Name>
</Input>
<Input>
<TypeIdentifier>(0x6ab26b81, 0x0f8c02f3)</TypeIdentifier>
<Name>Channel Units</Name>
</Input>
</Inputs>
<Settings>
<Setting>
<TypeIdentifier>(0x5de046a6, 0x086340aa)</TypeIdentifier>
<Name>Display Mode</Name>
<DefaultValue>Scan</DefaultValue>
<Value>Scan</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x33a30739, 0x00d5299b)</TypeIdentifier>
<Name>Auto vertical scale</Name>
<DefaultValue>Per channel</DefaultValue>
<Value>Per channel</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Scale refresh interval (secs)</Name>
<DefaultValue>5</DefaultValue>
<Value>0.000000</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Vertical Scale</Name>
<DefaultValue>100</DefaultValue>
<Value>100</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Vertical Offset</Name>
<DefaultValue>0</DefaultValue>
<Value>0</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Time Scale</Name>
<DefaultValue>10</DefaultValue>
<Value>5.000000</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Horizontal ruler</Name>
<DefaultValue>true</DefaultValue>
<Value>true</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Vertical ruler</Name>
<DefaultValue>false</DefaultValue>
<Value>false</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Multiview</Name>
<DefaultValue>false</DefaultValue>
<Value>false</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>560</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>832</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x92c056a7, 0x2dc71aff)</Value>
</Attribute>
<Attribute>
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
<Value>false</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>9</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>3</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x4ff47ca1, 0x133bd33b)</Identifier>
<Name>EEG Signal Selection</Name>
<AlgorithmClassIdentifier>(0x361722e8, 0x311574e8)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Input signal</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Output signal</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
<Name>Channel List</Name>
<DefaultValue>:</DefaultValue>
<Value>${CHANNEL_SELECTION}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x3bcf9e67, 0x0c23994d)</TypeIdentifier>
<Name>Action</Name>
<DefaultValue>Select</DefaultValue>
<Value>Select</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x666f25e9, 0x3e5738d6)</TypeIdentifier>
<Name>Channel Matching Method</Name>
<DefaultValue>Smart</DefaultValue>
<Value>Index</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>176</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>864</Value>
</Attribute>
<Attribute>
<Identifier>(0x30a4e5c9, 0x83502953)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x277826e1, 0xa30a3bd0)</Value>
</Attribute>
<Attribute>
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>3</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
</Boxes>
<Links>
<Link>
<Identifier>(0x000003a7, 0x000034db)</Identifier>
<Source>
<BoxIdentifier>(0x000014bf, 0x000034db)</BoxIdentifier>
<BoxOutputIndex>2</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00005c5c, 0x00007610)</BoxIdentifier>
<BoxInputIndex>1</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x00000554, 0x0000661a)</Identifier>
<Source>
<BoxIdentifier>(0x000014bf, 0x000034db)</BoxIdentifier>
<BoxOutputIndex>2</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00007e4e, 0x00006b7b)</BoxIdentifier>
<BoxInputIndex>1</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x00001d33, 0x00002bb0)</Identifier>
<Source>
<BoxIdentifier>(0x00006b6d, 0x00002690)</BoxIdentifier>
<BoxOutputIndex>2</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x000014bf, 0x000034db)</BoxIdentifier>
<BoxInputIndex>2</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x00003f04, 0x000045c3)</Identifier>
<Source>
<BoxIdentifier>(0x000014bf, 0x000034db)</BoxIdentifier>
<BoxOutputIndex>1</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00005c5c, 0x00007610)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x00004b11, 0x00006a43)</Identifier>
<Source>
<BoxIdentifier>(0x00003f1b, 0x00003c78)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x000014bf, 0x000034db)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x000056fd, 0x00004795)</Identifier>
<Source>
<BoxIdentifier>(0x000014bf, 0x000034db)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00007e4e, 0x00006b7b)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x2336eb7d, 0x44803e51)</Identifier>
<Source>
<BoxIdentifier>(0x4ff47ca1, 0x133bd33b)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x000046bc, 0x00003f08)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x384b6f31, 0x639fff7d)</Identifier>
<Source>
<BoxIdentifier>(0x4ff47ca1, 0x133bd33b)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x000014bf, 0x000034db)</BoxIdentifier>
<BoxInputIndex>1</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x771fd1ca, 0x72794515)</Identifier>
<Source>
<BoxIdentifier>(0x000046bc, 0x00003f08)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00003f1b, 0x00003c78)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x7c0285ed, 0x7aaf8bb7)</Identifier>
<Source>
<BoxIdentifier>(0x00006b6d, 0x00002690)</BoxIdentifier>
<BoxOutputIndex>1</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x4ff47ca1, 0x133bd33b)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
</Links>
<Comments>
<Comment>
<Identifier>(0x000028e8, 0x00003dee)</Identifier>
<Text>&lt;u&gt;&lt;b&gt;&lt;big&gt;Scenario Overview&lt;/big&gt;&lt;/b&gt;&lt;/u&gt;
This scenario can be used in order
to check the quality of the signals
before starting an experiment.
One should &lt;u&gt;definitely&lt;/u&gt;
check the quality of the signals
and ensure that :
- &lt;b&gt;eye blinks&lt;/b&gt; are visible
- &lt;b&gt;jaw clenching&lt;/b&gt; are visible
- &lt;b&gt;alpha waves&lt;/b&gt; are visible when closing eyes
Two Signals are displayed, one is the raw EEG-Signal
and the other one is the filtered signal.
The filtered signal is the one, that will actually be used
in other scenarios.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>576</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>272</Value>
</Attribute>
</Attributes>
</Comment>
</Comments>
<Metadata>
<Entry>
<Identifier>(0x0000775c, 0x000078ff)</Identifier>
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
<Data>[{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":635,"identifier":"(0x000077ee, 0x0000254d)","name":"default","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":783},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x00004579, 0x00005fcb)","index":0,"name":"Default tab","parentIdentifier":"(0x000077ee, 0x0000254d)","type":2},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":2,"dividerPosition":293,"identifier":"(0x00005446, 0x000043a1)","index":0,"maxDividerPosition":590,"name":"Vertical split","parentIdentifier":"(0x00004579, 0x00005fcb)","type":4},{"boxIdentifier":"(0x00005c5c, 0x00007610)","childCount":0,"identifier":"(0x00000e42, 0x000074b8)","index":0,"parentIdentifier":"(0x00005446, 0x000043a1)","type":3},{"boxIdentifier":"(0x00007e4e, 0x00006b7b)","childCount":0,"identifier":"(0x00005db7, 0x000032ad)","index":1,"parentIdentifier":"(0x00005446, 0x000043a1)","type":3}]</Data>
</Entry>
</Metadata>
<Attributes>
<Attribute>
<Identifier>(0x790d75b8, 0x3bb90c33)</Identifier>
<Value>Yann Renard</Value>
</Attribute>
<Attribute>
<Identifier>(0x8c1fc55b, 0x7b433dc2)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x9f5c4075, 0x4a0d3666)</Identifier>
<Value>Signal Monitoring</Value>
</Attribute>
<Attribute>
<Identifier>(0xf36a1567, 0xd13c53da)</Identifier>
<Value>http://openvibe.inria.fr/p300-speller-xdawn/</Value>
</Attribute>
<Attribute>
<Identifier>(0xf6b2e3fa, 0x7bd43926)</Identifier>
<Value>xDAWN P300 Speller</Value>
</Attribute>
<Attribute>
<Identifier>(0xf8034a49, 0x8b3f37cc)</Identifier>
<Value>INRIA</Value>
</Attribute>
</Attributes>
</OpenViBE-Scenario>
File diff suppressed because it is too large Load Diff
+438
View File
@@ -0,0 +1,438 @@
<OpenViBE-Scenario>
<FormatVersion>2</FormatVersion>
<Creator>OpenViBE Designer</Creator>
<CreatorVersion>3.3.0</CreatorVersion>
<Settings></Settings>
<Inputs></Inputs>
<Outputs></Outputs>
<Boxes>
<Box>
<Identifier>(0x00001db8, 0x00001848)</Identifier>
<Name>xDAWN Trainer</Name>
<AlgorithmClassIdentifier>(0x27542f6e, 0x14aa3548)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Stimulations</Name>
</Input>
<Input>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Session signal</Name>
</Input>
<Input>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Evoked potential epochs</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Train-completed Flag</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>Train stimulation</Name>
<DefaultValue>OVTK_StimulationId_Train</DefaultValue>
<Value>${SPATIAL_TRAIN_TRIGGER}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
<Name>Spatial filter configuration</Name>
<DefaultValue></DefaultValue>
<Value>${SPATIAL_FILTER_CONFIG}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
<Name>Filter dimension</Name>
<DefaultValue>4</DefaultValue>
<Value>${FILTER_DIMENSION}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Save as box config</Name>
<DefaultValue>true</DefaultValue>
<Value>true</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>176</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>288</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x4b49a133, 0x42f38d94)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value></Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00002514, 0x00001614)</Identifier>
<Name>Generic stream reader</Name>
<AlgorithmClassIdentifier>(0x6468099f, 0x0370095a)</AlgorithmClassIdentifier>
<Outputs>
<Output>
<TypeIdentifier>(0x403488e7, 0x565d70b6)</TypeIdentifier>
<Name>Output stream 1</Name>
</Output>
<Output>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Output stream 2</Name>
</Output>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Output stream 3</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
<Name>Filename</Name>
<DefaultValue></DefaultValue>
<Value>${INPUT_FILE_NAME}</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>-128</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>400</Value>
</Attribute>
<Attribute>
<Identifier>(0x30a4e5c9, 0x83502953)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xf37b8e7a, 0x1bc33e4e)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x0000267a, 0x0000427f)</Identifier>
<Name>Time based epoching</Name>
<AlgorithmClassIdentifier>(0x00777fa0, 0x5dc3f560)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Input signal</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Epoched signal 1</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Epoch 1 duration (in sec)</Name>
<DefaultValue>1</DefaultValue>
<Value>0.250000</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Epoch 1 intervals (in sec)</Name>
<DefaultValue>0.5</DefaultValue>
<Value>0.250000</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>-16</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>288</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xc5ff41e9, 0xccc59a01)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00004aea, 0x00001465)</Identifier>
<Name>Player Controller</Name>
<AlgorithmClassIdentifier>(0x5f426dce, 0x08456e13)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Stimulations</Name>
</Input>
</Inputs>
<Settings>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>Stimulation name</Name>
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
<Value>OVTK_StimulationId_TrainCompleted</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0xcc14d8d6, 0xf27ecb73)</TypeIdentifier>
<Name>Action to perform</Name>
<DefaultValue>Pause</DefaultValue>
<Value>Stop</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>240</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>288</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x568d148e, 0x650792b3)</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>2</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00006fa4, 0x00003c77)</Identifier>
<Name>Target Selection</Name>
<AlgorithmClassIdentifier>(0x426163d1, 0x324237b0)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Input signal</Name>
</Input>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Input stimulations</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Epoched signal</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Epoch duration (in sec)</Name>
<DefaultValue>1</DefaultValue>
<Value>0.6</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Epoch offset (in sec)</Name>
<DefaultValue>0.5</DefaultValue>
<Value>0</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>Stimulation to epoch from</Name>
<DefaultValue>OVTK_GDF_VEP</DefaultValue>
<Value>OVTK_StimulationId_Target</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>64</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>416</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x5de31172, 0xa1304456)</Value>
</Attribute>
</Attributes>
</Box>
</Boxes>
<Links>
<Link>
<Identifier>(0x00003920, 0x00007a30)</Identifier>
<Source>
<BoxIdentifier>(0x0000267a, 0x0000427f)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00001db8, 0x00001848)</BoxIdentifier>
<BoxInputIndex>1</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x00004bf5, 0x00007908)</Identifier>
<Source>
<BoxIdentifier>(0x00001db8, 0x00001848)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00004aea, 0x00001465)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x000059e8, 0x00000032)</Identifier>
<Source>
<BoxIdentifier>(0x00002514, 0x00001614)</BoxIdentifier>
<BoxOutputIndex>2</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00001db8, 0x00001848)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x00006913, 0x00003182)</Identifier>
<Source>
<BoxIdentifier>(0x00002514, 0x00001614)</BoxIdentifier>
<BoxOutputIndex>1</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x0000267a, 0x0000427f)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x074b170c, 0x37e84571)</Identifier>
<Source>
<BoxIdentifier>(0x0000267a, 0x0000427f)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00006fa4, 0x00003c77)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x188f2058, 0x7ac23f09)</Identifier>
<Source>
<BoxIdentifier>(0x00006fa4, 0x00003c77)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00001db8, 0x00001848)</BoxIdentifier>
<BoxInputIndex>2</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x2b245a90, 0x47f6e438)</Identifier>
<Source>
<BoxIdentifier>(0x00002514, 0x00001614)</BoxIdentifier>
<BoxOutputIndex>2</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00006fa4, 0x00003c77)</BoxIdentifier>
<BoxInputIndex>1</BoxInputIndex>
</Target>
</Link>
</Links>
<Comments>
<Comment>
<Identifier>(0x000049d6, 0x00006e67)</Identifier>
<Text>&lt;u&gt;&lt;b&gt;&lt;big&gt;Scenario Overview&lt;/big&gt;&lt;/b&gt;&lt;/u&gt;
This scenario should be used to train
the spatial filter using the xDAWN algorithm.
At the end of the training, you will have line in
the console about eigen values.
Using a &lt;i&gt;Player Controller&lt;/i&gt; the scenario will
automatically pause at the end of the training.
If you want details on this values, you should read
&lt;u&gt;http://www.icp.inpg.fr/~rivetber/Publications/references/Rivet2009a.pdf&lt;/u&gt;</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>704</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>-32</Value>
</Attribute>
</Attributes>
</Comment>
</Comments>
<Metadata>
<Entry>
<Identifier>(0x0000775c, 0x000078ff)</Identifier>
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
<Data>[]</Data>
</Entry>
</Metadata>
<Attributes>
<Attribute>
<Identifier>(0x790d75b8, 0x3bb90c33)</Identifier>
<Value>Yann Renard</Value>
</Attribute>
<Attribute>
<Identifier>(0x8c1fc55b, 0x7b433dc2)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x9f5c4075, 0x4a0d3666)</Identifier>
<Value>Spatial Filter Training</Value>
</Attribute>
<Attribute>
<Identifier>(0xf36a1567, 0xd13c53da)</Identifier>
<Value>http://openvibe.inria.fr/p300-speller-xdawn/</Value>
</Attribute>
<Attribute>
<Identifier>(0xf6b2e3fa, 0x7bd43926)</Identifier>
<Value>xDAWN P300 Speller</Value>
</Attribute>
<Attribute>
<Identifier>(0xf8034a49, 0x8b3f37cc)</Identifier>
<Value>INRIA</Value>
</Attribute>
</Attributes>
</OpenViBE-Scenario>
@@ -0,0 +1,898 @@
<OpenViBE-Scenario>
<FormatVersion>2</FormatVersion>
<Creator>OpenViBE Designer</Creator>
<CreatorVersion>3.3.0</CreatorVersion>
<Settings></Settings>
<Inputs></Inputs>
<Outputs></Outputs>
<Boxes>
<Box>
<Identifier>(0x00000b2d, 0x00006d61)</Identifier>
<Name>Feature aggregator</Name>
<AlgorithmClassIdentifier>(0x00682417, 0x453635f9)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
<Name>Input stream 1</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x17341935, 0x152ff448)</TypeIdentifier>
<Name>Feature vector stream</Name>
</Output>
</Outputs>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>240</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>336</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xb5d15cc9, 0x6c8c28fb)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x002bb807)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xfba64161, 0x65304e21)</Identifier>
<Value></Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00000d41, 0x000013b7)</Identifier>
<Name>Feature aggregator</Name>
<AlgorithmClassIdentifier>(0x00682417, 0x453635f9)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
<Name>Input stream 1</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x17341935, 0x152ff448)</TypeIdentifier>
<Name>Feature vector stream</Name>
</Output>
</Outputs>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>240</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>528</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xb5d15cc9, 0x6c8c28fb)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x002b7d6e)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xfba64161, 0x65304e21)</Identifier>
<Value></Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00001f83, 0x00004e32)</Identifier>
<Name>Generic stream reader</Name>
<AlgorithmClassIdentifier>(0x6468099f, 0x0370095a)</AlgorithmClassIdentifier>
<Outputs>
<Output>
<TypeIdentifier>(0x403488e7, 0x565d70b6)</TypeIdentifier>
<Name>Output stream 1</Name>
</Output>
<Output>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Output stream 2</Name>
</Output>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Output stream 3</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
<Name>Filename</Name>
<DefaultValue></DefaultValue>
<Value>${INPUT_FILE_NAME}</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>-160</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>400</Value>
</Attribute>
<Attribute>
<Identifier>(0x30a4e5c9, 0x83502953)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xf37b8e7a, 0x1bc33e4e)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x008e34c7)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00002c8b, 0x000001d5)</Identifier>
<Name>Player Controller</Name>
<AlgorithmClassIdentifier>(0x5f426dce, 0x08456e13)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Stimulations</Name>
</Input>
</Inputs>
<Settings>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>Stimulation name</Name>
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
<Value>OVTK_StimulationId_TrainCompleted</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0xcc14d8d6, 0xf27ecb73)</TypeIdentifier>
<Name>Action to perform</Name>
<DefaultValue>Pause</DefaultValue>
<Value>Stop</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>416</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>448</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x568d148e, 0x650792b3)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x00301c7f)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
<Value>false</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>2</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00002f94, 0x00000342)</Identifier>
<Name>Non Target Selection</Name>
<AlgorithmClassIdentifier>(0x426163d1, 0x324237b0)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Input signal</Name>
</Input>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Input stimulations</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Epoched signal</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Epoch duration (in sec)</Name>
<DefaultValue>1</DefaultValue>
<Value>0.6</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Epoch offset (in sec)</Name>
<DefaultValue>0.5</DefaultValue>
<Value>0</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>Stimulation to epoch from</Name>
<DefaultValue>OVTK_GDF_VEP</DefaultValue>
<Value>OVTK_StimulationId_NonTarget</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>112</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>528</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x5de31172, 0xa1304456)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x002bbddf)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x000063a5, 0x0000197d)</Identifier>
<Name>Target Selection</Name>
<AlgorithmClassIdentifier>(0x426163d1, 0x324237b0)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Input signal</Name>
</Input>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Input stimulations</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Epoched signal</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Epoch duration (in sec)</Name>
<DefaultValue>1</DefaultValue>
<Value>0.6</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Epoch offset (in sec)</Name>
<DefaultValue>0.5</DefaultValue>
<Value>0</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>Stimulation to epoch from</Name>
<DefaultValue>OVTK_GDF_VEP</DefaultValue>
<Value>OVTK_StimulationId_Target</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>112</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>336</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x5de31172, 0xa1304456)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x002b4e91)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x000078d0, 0x000029bc)</Identifier>
<Name>Epoch average</Name>
<AlgorithmClassIdentifier>(0x21283d9f, 0xe76ff640)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Input epochs</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Averaged epochs</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x6530bdb1, 0xd057bbfe)</TypeIdentifier>
<Name>Averaging type</Name>
<DefaultValue>Epoch block average</DefaultValue>
<Value>Epoch block average</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
<Name>Epoch count</Name>
<DefaultValue>4</DefaultValue>
<Value>1</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>176</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>336</Value>
</Attribute>
<Attribute>
<Identifier>(0x30a4e5c9, 0x83502953)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xb73cee83, 0xf7215d60)</Value>
</Attribute>
<Attribute>
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x8d21ff41, 0xdf6afe7e)</Identifier>
<Value>${Player_ScenarioDirectory}/cfg/p300-epoch-average.cfg</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x002b5470)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x000078f9, 0x000063eb)</Identifier>
<Name>xDAWN Spatial Filter</Name>
<AlgorithmClassIdentifier>(0xdd332c6c, 0x195b4fd4)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Input Signal</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Output Signal</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
<Name>Spatial Filter Coefficients</Name>
<DefaultValue>1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1</DefaultValue>
<Value>9.970221e-001 -3.729500e-002 -1.177390e-002 2.814447e-002 -3.772446e-003 3.371324e-002 -5.480030e-003 8.893039e-003 -1.565213e-002 -9.956694e-003 -2.347757e-002 -2.312669e-003 -1.847227e-002 -7.550644e-004 -8.423513e-003 3.243223e-002 2.079848e-002 5.079737e-001 -2.835127e-002 8.259231e-002 -3.621803e-001 -2.004259e-001 -2.432480e-001 -1.861558e-001 -3.798139e-001 9.614762e-002 3.407766e-001 -2.158597e-001 3.720552e-001 7.500469e-002 -8.628774e-002 -3.182367e-002 5.923482e-002 4.124707e-001 2.083913e-001 -2.629501e-001 2.023081e-001 -2.658446e-001 4.022738e-001 -1.785569e-001 4.450742e-001 3.549239e-001 1.550204e-002 3.750389e-002 3.114249e-002 9.273764e-002 -7.093797e-002 -2.610929e-001</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
<Name>Number of Output Channels</Name>
<DefaultValue>4</DefaultValue>
<Value>3</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
<Name>Number of Input Channels</Name>
<DefaultValue>4</DefaultValue>
<Value>16</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
<Name>Filter matrix file</Name>
<DefaultValue></DefaultValue>
<Value></Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>-32</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>304</Value>
</Attribute>
<Attribute>
<Identifier>(0x30a4e5c9, 0x83502953)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x81db9bf9, 0xf1cf4ed7)</Value>
</Attribute>
<Attribute>
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x8d21ff41, 0xdf6afe7e)</Identifier>
<Value>${SPATIAL_FILTER_CONFIG}</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x002b601f)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>3</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00007b56, 0x000033f9)</Identifier>
<Name>Epoch average</Name>
<AlgorithmClassIdentifier>(0x21283d9f, 0xe76ff640)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Input epochs</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Averaged epochs</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x6530bdb1, 0xd057bbfe)</TypeIdentifier>
<Name>Averaging type</Name>
<DefaultValue>Epoch block average</DefaultValue>
<Value>Epoch block average</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
<Name>Epoch count</Name>
<DefaultValue>4</DefaultValue>
<Value>1</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>176</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>528</Value>
</Attribute>
<Attribute>
<Identifier>(0x30a4e5c9, 0x83502953)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xb73cee83, 0xf7215d60)</Value>
</Attribute>
<Attribute>
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x8d21ff41, 0xdf6afe7e)</Identifier>
<Value>${Player_ScenarioDirectory}/cfg/p300-epoch-average.cfg</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x002c2168)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x0a5a6a4a, 0x1d92a778)</Identifier>
<Name>Classifier trainer</Name>
<AlgorithmClassIdentifier>(0xf3dae8a8, 0x3b444154)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Stimulations</Name>
</Input>
<Input>
<TypeIdentifier>(0x17341935, 0x152ff448)</TypeIdentifier>
<Name>Features for class 1</Name>
</Input>
<Input>
<TypeIdentifier>(0x17341935, 0x152ff448)</TypeIdentifier>
<Name>Features for class 2</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Train-completed Flag</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>Train trigger</Name>
<DefaultValue>OVTK_StimulationId_Train</DefaultValue>
<Value>${CLASSIFIER_TRAIN_TRIGGER}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
<Name>Filename to save configuration to</Name>
<DefaultValue>${Path_UserData}/my-classifier.xml</DefaultValue>
<Value>${CLASSIFIER_CONFIG}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0xbe9eba5c, 0xa8415d37)</TypeIdentifier>
<Name>Multiclass strategy to apply</Name>
<DefaultValue>Native</DefaultValue>
<Value>${MULTICLASS_STRATEGY}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>Class 1 label</Name>
<DefaultValue>OVTK_StimulationId_Label_01</DefaultValue>
<Value>${CLASS_1}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>Class 2 label</Name>
<DefaultValue>OVTK_StimulationId_Label_02</DefaultValue>
<Value>${CLASS_2}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0xd765a736, 0xed708c65)</TypeIdentifier>
<Name>Algorithm to use</Name>
<DefaultValue>Linear Discrimimant Analysis (LDA)</DefaultValue>
<Value>${ALGORITHM}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Use shrinkage</Name>
<DefaultValue>false</DefaultValue>
<Value>${USE_SHRINKAGE}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Shrinkage coefficient (-1 == auto)</Name>
<DefaultValue>-1.000000</DefaultValue>
<Value>${SHRINKAGE_COEFFICIENT}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Shrinkage: Force diagonal cov (DDA)</Name>
<DefaultValue>false</DefaultValue>
<Value>${SHRINKAGE_FORCE_DIAGONAL_COV}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
<Name>Number of partitions for k-fold cross-validation test</Name>
<DefaultValue>10</DefaultValue>
<Value>${N_PARTITIONS}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Balance classes</Name>
<DefaultValue>false</DefaultValue>
<Value>${CLASS_BALANCE}</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>336</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>448</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x9de21779, 0x37776c89)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
<Value>false</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>6</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>3</Value>
</Attribute>
<Attribute>
<Identifier>(0xfba64161, 0x65304e21)</Identifier>
<Value></Value>
</Attribute>
</Attributes>
</Box>
</Boxes>
<Links>
<Link>
<Identifier>(0x00000192, 0x0000714e)</Identifier>
<Source>
<BoxIdentifier>(0x00001f83, 0x00004e32)</BoxIdentifier>
<BoxOutputIndex>1</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x000078f9, 0x000063eb)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x00001717, 0x00003cf9)</Identifier>
<Source>
<BoxIdentifier>(0x000078d0, 0x000029bc)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00000b2d, 0x00006d61)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x00004674, 0x000061af)</Identifier>
<Source>
<BoxIdentifier>(0x00007b56, 0x000033f9)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00000d41, 0x000013b7)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x0ac1c4d1, 0x0a9429d6)</Identifier>
<Source>
<BoxIdentifier>(0x000063a5, 0x0000197d)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x000078d0, 0x000029bc)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x0f719dbe, 0x6b9207ad)</Identifier>
<Source>
<BoxIdentifier>(0x000078f9, 0x000063eb)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00002f94, 0x00000342)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x175e412c, 0x0692f4ee)</Identifier>
<Source>
<BoxIdentifier>(0x00000d41, 0x000013b7)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x0a5a6a4a, 0x1d92a778)</BoxIdentifier>
<BoxInputIndex>2</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x26545f2f, 0x4e793786)</Identifier>
<Source>
<BoxIdentifier>(0x000078f9, 0x000063eb)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x000063a5, 0x0000197d)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x26dbc15a, 0x2ae965d4)</Identifier>
<Source>
<BoxIdentifier>(0x00001f83, 0x00004e32)</BoxIdentifier>
<BoxOutputIndex>2</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x000063a5, 0x0000197d)</BoxIdentifier>
<BoxInputIndex>1</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x33c4df2d, 0x7548b76f)</Identifier>
<Source>
<BoxIdentifier>(0x00001f83, 0x00004e32)</BoxIdentifier>
<BoxOutputIndex>2</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00002f94, 0x00000342)</BoxIdentifier>
<BoxInputIndex>1</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x431fd3b9, 0x43484889)</Identifier>
<Source>
<BoxIdentifier>(0x00002f94, 0x00000342)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00007b56, 0x000033f9)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x5a67b7d8, 0x1cf07f9a)</Identifier>
<Source>
<BoxIdentifier>(0x00001f83, 0x00004e32)</BoxIdentifier>
<BoxOutputIndex>2</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x0a5a6a4a, 0x1d92a778)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x616495af, 0x5c020b32)</Identifier>
<Source>
<BoxIdentifier>(0x0a5a6a4a, 0x1d92a778)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00002c8b, 0x000001d5)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x63fa63da, 0x0e447c5b)</Identifier>
<Source>
<BoxIdentifier>(0x00000b2d, 0x00006d61)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x0a5a6a4a, 0x1d92a778)</BoxIdentifier>
<BoxInputIndex>1</BoxInputIndex>
</Target>
</Link>
</Links>
<Comments>
<Comment>
<Identifier>(0x00005277, 0x00007fbe)</Identifier>
<Text>&lt;u&gt;&lt;b&gt;&lt;big&gt;Scenario Overview&lt;/big&gt;&lt;/b&gt;&lt;/u&gt;
This scenario should be used to train
the LDA classifier.
At the end of the training, you will have an estimation
of the classifier performance printed in the console.
If this performance is lower than 70%, just run a new
&lt;i&gt;4-online&lt;/i&gt; session to have better results.
&lt;u&gt;&lt;b&gt;Note:&lt;/b&gt;&lt;/u&gt; in order to run this scenario,
the spatial filter should have been trained using
&lt;i&gt;2-train-xDAWN&lt;/i&gt; !</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>688</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>-64</Value>
</Attribute>
</Attributes>
</Comment>
</Comments>
<Metadata>
<Entry>
<Identifier>(0x0000775c, 0x000078ff)</Identifier>
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
<Data>[]</Data>
</Entry>
</Metadata>
<Attributes>
<Attribute>
<Identifier>(0x790d75b8, 0x3bb90c33)</Identifier>
<Value>Yann Renard</Value>
</Attribute>
<Attribute>
<Identifier>(0x8c1fc55b, 0x7b433dc2)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x9f5c4075, 0x4a0d3666)</Identifier>
<Value>LDA Classifier Trainer</Value>
</Attribute>
<Attribute>
<Identifier>(0xf36a1567, 0xd13c53da)</Identifier>
<Value>http://openvibe.inria.fr/p300-speller-xdawn/</Value>
</Attribute>
<Attribute>
<Identifier>(0xf6b2e3fa, 0x7bd43926)</Identifier>
<Value>xDAWN P300 Speller</Value>
</Attribute>
<Attribute>
<Identifier>(0xf8034a49, 0x8b3f37cc)</Identifier>
<Value>INRIA</Value>
</Attribute>
</Attributes>
</OpenViBE-Scenario>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,202 @@
function arrayMax(a)
if #a == 0 then return nil, nil end
local maxIdx, maxValue = 0, a[0]
for i = 1, (#a -1 ) do
if maxValue < a[i] then
maxIdx, maxValue = i, a[i]
end
end
return maxIdx, maxValue
end
-- For handling target fifo
List = {}
function List.new ()
return {first = 0, last = -1}
end
function List.pushright (list, value)
local last = list.last + 1
list.last = last
list[last] = value
end
function List.popleft (list)
local first = list.first
if first > list.last then
error("list is empty")
end
local value = list[first]
list[first] = nil -- to allow garbage collection
list.first = first + 1
return value
end
function List.isempty (list)
if list.first > list.last then
return true
else
return false
end
end
-- this function is called when the box is initialized
function initialize(box)
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
row_base = _G[box:get_setting(2)]
n_tactilos = box:get_setting(3)
segment_start = _G[box:get_setting(4)]
segment_stop = _G[box:get_setting(5)]
col_base = row_base + n_tactilos
-- 0 inactive, 1 segment started, 2 segment stopped (can vote)
segment_status = 0
-- the idea is to push the flash states to the fifo, and when predictions arrive (with some delay), they are matched in oldest-first fashion.
target_fifo = List.new()
-- box:log("Info", string.format("pop %d %d", id[1], id[2]))
row_votes = {}
col_votes = {}
do_debug = false
end
-- this function is called when the box is uninitialized
function uninitialize(box)
end
function process(box)
-- loops until box is stopped
while box:keep_processing() do
-- first, parse the timeline stream
for stimulation = 1, box:get_stimulation_count(2) do
-- gets the received stimulation
local identifier, date, duration = box:get_stimulation(2, 1)
-- discards it
box:remove_stimulation(2, 1)
if identifier == segment_start then
if do_debug then
box:log("Info", string.format("Trial start"))
box:log("Info", string.format("Clear votes"))
end
-- zero the votes
col_votes = {}
row_votes = {}
target_fifo = List.new()
-- fixme fixed 20
for i = 0,20 do
col_votes[i] = 0
row_votes[i] = 0
end
segment_status = 1
end
-- Does the identifier code a flash? if so, put into fifo
if segment_status == 1 and identifier >= row_base and identifier <= OVTK_StimulationId_LabelEnd then
-- assume rows before cols
if identifier < col_base then
local t = {"row", identifier - row_base}
List.pushright(target_fifo,t)
if do_debug then
box:log("Info", string.format("Push row target %d", identifier - row_base ))
end
else
local t = {"col", identifier - col_base}
List.pushright(target_fifo,t)
if do_debug then
box:log("Info", string.format("Push col target %d", identifier - col_base ))
end
end
end
if identifier == segment_stop then
if do_debug then
box:log("Info", string.format("Trial stop"))
end
segment_status = 2
end
end
-- then parse the classifications
for stimulation = 1, box:get_stimulation_count(1) do
-- gets the received stimulation
local identifier, date, duration = box:get_stimulation(1, 1)
-- discards it
box:remove_stimulation(1, 1)
-- Is it an in-class prediction?
if identifier == OVTK_StimulationId_Target then
local t = List.popleft(target_fifo)
if do_debug then
box:log("Info", string.format("Pred fifo %s %d is target", t[1], t[2]))
end
if t[1]=="row" then
row_votes[t[2]] = row_votes[t[2]] + 1
else
col_votes[t[2]] = col_votes[t[2]] + 1
end
end
if identifier == OVTK_StimulationId_NonTarget then
local t = List.popleft(target_fifo)
if do_debug then
box:log("Info", string.format("Pred fifo %s %d is nontarget", t[1], t[2]))
end
end
end
if segment_status == 2 and List.isempty(target_fifo) then
-- output the vote after the segment end when we've matched all predictions
local maxRowIdx, maxRowValue = arrayMax(row_votes)
local maxColIdx, maxColValue = arrayMax(col_votes)
if maxRowValue == 0 and maxColValue == 0 then
box:log("Warning", string.format("Classifier predicted 'no p300' for all flashes of the trial"));
end
if do_debug then
local rowVotes = 0
local colVotes = 0
for ir, val in pairs(row_votes) do
rowVotes = rowVotes + val
end
for ir, val in pairs(col_votes) do
colVotes = colVotes + val
end
box:log("Info", string.format("Vote [%d %d] wt [%d,%d]", maxRowIdx+row_base, maxColIdx+col_base, maxRowValue, maxColValue))
box:log("Info", string.format(" Total [%d %d]", rowVotes, colVotes))
end
local now = box:get_current_time()
box:send_stimulation(1, maxRowIdx + row_base, now, 0)
-- box:send_stimulation(2, maxColIdx + col_base, now, 0)
segment_status = 0
end
box:sleep()
end
end
@@ -0,0 +1,61 @@
-- Picks out 'flashes' from a stimulation stream
-- this function is called when the box is initialized
function initialize(box)
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
box:set_filter_mode(1);
state = 0
do_debug = false
end
-- this function is called when the box is uninitialized
function uninitialize(box)
end
-- this function is called once by the box
function process(box)
-- loop until box:keep_processing() returns zero
-- 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 every received stimulation for a given input
for stimulation = 1, box:get_stimulation_count(1) do
-- gets stimulation
stimulation_id, stimulation_time, stimulation_duration = box:get_stimulation(1, 1)
if stimulation_id == OVTK_StimulationId_SegmentStart then
state = 1
elseif stimulation_id == OVTK_StimulationId_SegmentStop then
state = 0
end
-- If we're between 'rest start' and 'rest_stop', this specifies a target
if state == 1 and stimulation_id >= OVTK_StimulationId_LabelStart and stimulation_id <= OVTK_StimulationId_LabelEnd then
box:send_stimulation(1, stimulation_id, stimulation_time, 0)
if do_debug then
box:log("Info", string.format("Push a target %d at %f (now %f)", stimulation_id, stimulation_time, t))
end
end
-- discards it
box:remove_stimulation(1, 1)
end
-- releases cpu
box:sleep()
end
end
@@ -0,0 +1,61 @@
-- Picks out 'targets' from a stimulation stream
-- this function is called when the box is initialized
function initialize(box)
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
state = 0
box:set_filter_mode(1);
do_debug = false
end
-- this function is called when the box is uninitialized
function uninitialize(box)
end
-- this function is called once by the box
function process(box)
-- loop until box:keep_processing() returns zero
-- 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 every received stimulation for a given input
for stimulation = 1, box:get_stimulation_count(1) do
-- gets stimulation
stimulation_id, stimulation_time, stimulation_duration = box:get_stimulation(1, 1)
if stimulation_id == OVTK_StimulationId_RestStart then
state = 1
elseif stimulation_id == OVTK_StimulationId_RestStop then
state = 0
end
-- If we're between 'rest start' and 'rest_stop', this specifies a target
if state == 1 and stimulation_id >= OVTK_StimulationId_LabelStart and stimulation_id <= OVTK_StimulationId_LabelEnd then
box:send_stimulation(1, stimulation_id, stimulation_time, 0)
if do_debug then
box:log("Info", string.format("Push a target %d at %f (now = %f)", stimulation_id, stimulation_time, t))
end
end
-- discards it
box:remove_stimulation(1, 1)
end
-- releases cpu
box:sleep()
end
end
+21
View File
@@ -0,0 +1,21 @@
-- this function is called when the box is initialized
function initialize(box)
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
stim = _G[box:get_setting(2)]
launchTime = box:get_setting(3)
end
-- this function is called when the box is uninitialized
function uninitialize(box)
end
-- this function is called once by the box
function process(box)
box:send_stimulation(1, stim, launchTime, 0)
end
@@ -0,0 +1,138 @@
-- This Lua script sends Stimulations to the speller visualization box for a tactile p300-System with 6 stimulators
--
-- Author : Tobias Baumann
-- Date : 2021-12-06
-- Revised: 2021-19-11
--This function lets the box sleep until a fixed moment
function wait_until(box, time)
while box:get_current_time() < time do
box:sleep()
end
end
--This function lets the box wait for a fixed duration
function wait_for(box, duration)
wait_until(box, box:get_current_time() + duration)
end
--this function checks, wether value already is an element of the given stim_matrix
function is_element(matrix, value)
for i = 1, #matrix do
if #matrix == 0 then
return(false)
elseif value == matrix[i] then
return(true)
end
end
return(false)
end
--this function creates a sequence of stimulations by shuffeling the values of the given stim_matrix
function create_sequence(matrix)
local stim_matrix = {}
local stim_code = 0
local i = 1
while i <= #matrix do
stim_code = matrix[math.random(1,#matrix)]
if is_element(stim_matrix, stim_code) == false then
stim_matrix[i] = stim_code
i = i + 1
end
end
return(stim_matrix)
end
-- this function is called when the box is initialized
function initialize(box)
--randomseed
math.randomseed(os.time())
--load stimulation codes
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
--load box settings
row_base = _G[box:get_setting(2)]
n_tactilos = box:get_setting(3)
n_repetitions = box:get_setting(4)
n_trials = box:get_setting(5)
flash_duration = box:get_setting(6)
noflash_duration = box:get_setting(7)
inter_repetition_delay = box:get_setting(8)
inter_trial_delay = box:get_setting(9)
send_toggle = _G[box:get_setting(10)]
free_spelling = box:get_setting(11)
time_to_send = box:get_setting(12)
--Set number of trials to 1 in free spelling mode
if free_spelling == 'true' then
n_trials = 1
end
--Lua variables
send = false
experiment_end = false
tactilo_stimcodes = {}
for x = 1, n_tactilos do
tactilo_stimcodes[x] = row_base + x - 1
end
end
-- this function is called when the box is uninitialized
function uninitialize(box)
end
-- this function is called once by the box
function process(box)
while box:keep_processing() do
if send and not experiment_end then
-- iterate over the number of trials
for trial = 1, n_trials do
box:send_stimulation(1, OVTK_StimulationId_RestStart, box:get_current_time() , 0)
wait_for(box, inter_trial_delay)
box:send_stimulation(1, OVTK_StimulationId_RestStop, box:get_current_time() , 0)
box:send_stimulation(1, OVTK_StimulationId_TrialStart ,box:get_current_time() , 0)
-- iterate over the number of repetitions
for segment = 1, n_repetitions do
tactilo_stimcodes = create_sequence(tactilo_stimcodes)
box:send_stimulation(1, OVTK_StimulationId_SegmentStart ,box:get_current_time() , 0)
-- iterate over the number of tactilos
for i = 1, #tactilo_stimcodes do
box:send_stimulation(1, tactilo_stimcodes[i] ,box:get_current_time() , 0)
box:send_stimulation(1, OVTK_StimulationId_VisualStimulationStart ,box:get_current_time() , 0)
wait_for(box, flash_duration)
box:send_stimulation(1, OVTK_StimulationId_VisualStimulationStop ,box:get_current_time() , 0)
wait_for(box, noflash_duration)
end
box:send_stimulation(1, OVTK_StimulationId_SegmentStop ,box:get_current_time() , 0)
wait_for(box, inter_repetition_delay)
end
box:send_stimulation(1, OVTK_StimulationId_TrialStop ,box:get_current_time() , 0)
end
if free_spelling == 'false' then
-- end experiment if set to copy spelling
box:send_stimulation(1, OVTK_StimulationId_ExperimentStop ,box:get_current_time() , 0)
send = false
experiment_end = true
end
else if not send and not experiment_end then
-- delay the start of the experiment by t = time_to_send
wait_for(box, time_to_send)
send = true
box:send_stimulation(1, OVTK_StimulationId_ExperimentStart ,box:get_current_time() , 0)
end
end
-- releases cpu
box:sleep()
end
end
+61
View File
@@ -0,0 +1,61 @@
-- This Lua script generates target stimulations the 1x6 p300-tactile matrix
--
-- Author : Tobias Baumann
-- Date : 2021-06-09
-- this function is called when the box is initialized
function initialize(box)
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
math.randomseed(os.time())
row_base = _G[box:get_setting(2)]
n_tactilos = box:get_setting(3)
delay = box:get_setting(4)
free_spelling = box:get_setting(5)
end
-- this function is called when the box is uninitialized
function uninitialize(box)
end
-- this function is called once by the box
function process(box)
-- loop until box:keep_processing() returns zero
-- 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 every received stimulation for a given input
for stimulation = 1, box:get_stimulation_count(1) do
-- gets stimulation
stimulation_id, stimulation_time, stimulation_duration = box:get_stimulation(1, 1)
if free_spelling == 'false' then
if stimulation_id == OVTK_StimulationId_RestStart then
-- triggers the target
box:send_stimulation(1, row_base+math.random(1,n_tactilos)-1, t+delay, 0)
elseif stimulation_id == OVTK_StimulationId_ExperimentStop then
-- triggers train stimulation
box:send_stimulation(1, OVTK_StimulationId_Train, t+delay+1, 0)
end
end
-- discards it
box:remove_stimulation(1, 1)
end
-- releases cpu
box:sleep()
end
end
+3
View File
@@ -0,0 +1,3 @@
The scenario will record its signals here.
+321
View File
@@ -0,0 +1,321 @@
<?xml version="1.0"?>
<interface>
<!-- interface-requires gtk+ 2.12 -->
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkWindow" id="p300-tactile">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<object class="GtkTable" id="p300-tactile-main">
<property name="visible">True</property>
<property name="n_rows">3</property>
<property name="row_spacing">4</property>
<child>
<object class="GtkTable" id="p300-tactile-table">
<property name="visible">True</property>
<property name="n_rows">10</property>
<property name="n_columns">1</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkEventBox" id="eventbox-1">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-1">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo1</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">1</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-2">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-2">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo2</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-3">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-3">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo3</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-4">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-4">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo4</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-5">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-5">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo5</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-6">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-6">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo6</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-7">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-7">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo7</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-8">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-8">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo8</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">7</property>
<property name="bottom_attach">8</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-9">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-9">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo9</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">8</property>
<property name="bottom_attach">9</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-10">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-10">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo10</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">9</property>
<property name="bottom_attach">10</property>
</packing>
</child>
</object>
</child>
<child>
<object class="GtkTable" id="p300-tactile-table-target-result">
<property name="visible">True</property>
<property name="n_rows">2</property>
<property name="n_columns">3</property>
<property name="column_spacing">4</property>
<property name="row_spacing">4</property>
<child>
<object class="GtkLabel" id="label-result">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-target">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-result-title">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Result :</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-target-title">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Target :</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkImage" id="image">
<property name="visible">True</property>
<property name="stock">gtk-select-font</property>
</object>
<packing>
<property name="bottom_attach">2</property>
<property name="x_options"></property>
<property name="y_options"></property>
</packing>
</child>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkHSeparator" id="hseparator">
<property name="visible">True</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkWindow" id="p300-tactile-toolbar">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="title" translatable="yes">P300 tactile</property>
<property name="type_hint">dialog</property>
<child>
<object class="GtkToolbar" id="toolbar">
<property name="width_request">640</property>
<property name="visible">True</property>
<property name="toolbar_style">both</property>
<child>
<object class="GtkToggleToolButton" id="toolbutton-show_target_text">
<property name="visible">True</property>
<property name="label" translatable="yes">Show Target Text</property>
<property name="stock_id">gtk-info</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="toolbutton-show_result_text">
<property name="visible">True</property>
<property name="label" translatable="yes">Show Result Text</property>
<property name="stock_id">gtk-info</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
+185
View File
@@ -0,0 +1,185 @@
<?xml version="1.0"?>
<interface>
<!-- interface-requires gtk+ 2.12 -->
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkWindow" id="p300-tactile">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<object class="GtkTable" id="p300-tactile-main">
<property name="visible">True</property>
<property name="n_rows">3</property>
<property name="row_spacing">4</property>
<child>
<object class="GtkTable" id="p300-tactile-table">
<property name="visible">True</property>
<property name="n_rows">2</property>
<property name="n_columns">1</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkEventBox" id="eventbox-1">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-1">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo1</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">1</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-2">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-2">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo2</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
</object>
</child>
<child>
<object class="GtkTable" id="p300-tactile-table-target-result">
<property name="visible">True</property>
<property name="n_rows">2</property>
<property name="n_columns">3</property>
<property name="column_spacing">4</property>
<property name="row_spacing">4</property>
<child>
<object class="GtkLabel" id="label-result">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-target">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-result-title">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Result :</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-target-title">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Target :</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkImage" id="image">
<property name="visible">True</property>
<property name="stock">gtk-select-font</property>
</object>
<packing>
<property name="bottom_attach">2</property>
<property name="x_options"></property>
<property name="y_options"></property>
</packing>
</child>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkHSeparator" id="hseparator">
<property name="visible">True</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkWindow" id="p300-tactile-toolbar">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="title" translatable="yes">P300 tactile</property>
<property name="type_hint">dialog</property>
<child>
<object class="GtkToolbar" id="toolbar">
<property name="width_request">640</property>
<property name="visible">True</property>
<property name="toolbar_style">both</property>
<child>
<object class="GtkToggleToolButton" id="toolbutton-show_target_text">
<property name="visible">True</property>
<property name="label" translatable="yes">Show Target Text</property>
<property name="stock_id">gtk-info</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="toolbutton-show_result_text">
<property name="visible">True</property>
<property name="label" translatable="yes">Show Result Text</property>
<property name="stock_id">gtk-info</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
+202
View File
@@ -0,0 +1,202 @@
<?xml version="1.0"?>
<interface>
<!-- interface-requires gtk+ 2.12 -->
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkWindow" id="p300-tactile">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<object class="GtkTable" id="p300-tactile-main">
<property name="visible">True</property>
<property name="n_rows">3</property>
<property name="row_spacing">4</property>
<child>
<object class="GtkTable" id="p300-tactile-table">
<property name="visible">True</property>
<property name="n_rows">3</property>
<property name="n_columns">1</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkEventBox" id="eventbox-1">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-1">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo1</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">1</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-2">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-2">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo2</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-3">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-3">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo3</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
</object>
</child>
<child>
<object class="GtkTable" id="p300-tactile-table-target-result">
<property name="visible">True</property>
<property name="n_rows">2</property>
<property name="n_columns">3</property>
<property name="column_spacing">4</property>
<property name="row_spacing">4</property>
<child>
<object class="GtkLabel" id="label-result">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-target">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-result-title">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Result :</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-target-title">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Target :</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkImage" id="image">
<property name="visible">True</property>
<property name="stock">gtk-select-font</property>
</object>
<packing>
<property name="bottom_attach">2</property>
<property name="x_options"></property>
<property name="y_options"></property>
</packing>
</child>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkHSeparator" id="hseparator">
<property name="visible">True</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkWindow" id="p300-tactile-toolbar">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="title" translatable="yes">P300 tactile</property>
<property name="type_hint">dialog</property>
<child>
<object class="GtkToolbar" id="toolbar">
<property name="width_request">640</property>
<property name="visible">True</property>
<property name="toolbar_style">both</property>
<child>
<object class="GtkToggleToolButton" id="toolbutton-show_target_text">
<property name="visible">True</property>
<property name="label" translatable="yes">Show Target Text</property>
<property name="stock_id">gtk-info</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="toolbutton-show_result_text">
<property name="visible">True</property>
<property name="label" translatable="yes">Show Result Text</property>
<property name="stock_id">gtk-info</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
+219
View File
@@ -0,0 +1,219 @@
<?xml version="1.0"?>
<interface>
<!-- interface-requires gtk+ 2.12 -->
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkWindow" id="p300-tactile">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<object class="GtkTable" id="p300-tactile-main">
<property name="visible">True</property>
<property name="n_rows">3</property>
<property name="row_spacing">4</property>
<child>
<object class="GtkTable" id="p300-tactile-table">
<property name="visible">True</property>
<property name="n_rows">4</property>
<property name="n_columns">1</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkEventBox" id="eventbox-1">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-1">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo1</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">1</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-2">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-2">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo2</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-3">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-3">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo3</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-4">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-4">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo4</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
</packing>
</child>
</object>
</child>
<child>
<object class="GtkTable" id="p300-tactile-table-target-result">
<property name="visible">True</property>
<property name="n_rows">2</property>
<property name="n_columns">3</property>
<property name="column_spacing">4</property>
<property name="row_spacing">4</property>
<child>
<object class="GtkLabel" id="label-result">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-target">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-result-title">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Result :</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-target-title">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Target :</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkImage" id="image">
<property name="visible">True</property>
<property name="stock">gtk-select-font</property>
</object>
<packing>
<property name="bottom_attach">2</property>
<property name="x_options"></property>
<property name="y_options"></property>
</packing>
</child>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkHSeparator" id="hseparator">
<property name="visible">True</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkWindow" id="p300-tactile-toolbar">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="title" translatable="yes">P300 tactile</property>
<property name="type_hint">dialog</property>
<child>
<object class="GtkToolbar" id="toolbar">
<property name="width_request">640</property>
<property name="visible">True</property>
<property name="toolbar_style">both</property>
<child>
<object class="GtkToggleToolButton" id="toolbutton-show_target_text">
<property name="visible">True</property>
<property name="label" translatable="yes">Show Target Text</property>
<property name="stock_id">gtk-info</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="toolbutton-show_result_text">
<property name="visible">True</property>
<property name="label" translatable="yes">Show Result Text</property>
<property name="stock_id">gtk-info</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
+235
View File
@@ -0,0 +1,235 @@
<?xml version="1.0"?>
<interface>
<!-- interface-requires gtk+ 2.12 -->
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkWindow" id="p300-tactile">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<object class="GtkTable" id="p300-tactile-main">
<property name="visible">True</property>
<property name="n_rows">3</property>
<property name="row_spacing">4</property>
<child>
<object class="GtkTable" id="p300-tactile-table">
<property name="visible">True</property>
<property name="n_rows">5</property>
<property name="n_columns">1</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkEventBox" id="eventbox-1">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-1">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo1</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">1</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-2">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-2">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo2</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-3">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-3">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo3</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-4">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-4">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo4</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-5">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-5">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo5</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
</packing>
</child>
</child>
<child>
<object class="GtkTable" id="p300-tactile-table-target-result">
<property name="visible">True</property>
<property name="n_rows">2</property>
<property name="n_columns">3</property>
<property name="column_spacing">4</property>
<property name="row_spacing">4</property>
<child>
<object class="GtkLabel" id="label-result">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-target">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-result-title">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Result :</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-target-title">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Target :</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkImage" id="image">
<property name="visible">True</property>
<property name="stock">gtk-select-font</property>
</object>
<packing>
<property name="bottom_attach">2</property>
<property name="x_options"></property>
<property name="y_options"></property>
</packing>
</child>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkHSeparator" id="hseparator">
<property name="visible">True</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkWindow" id="p300-tactile-toolbar">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="title" translatable="yes">P300 tactile</property>
<property name="type_hint">dialog</property>
<child>
<object class="GtkToolbar" id="toolbar">
<property name="width_request">640</property>
<property name="visible">True</property>
<property name="toolbar_style">both</property>
<child>
<object class="GtkToggleToolButton" id="toolbutton-show_target_text">
<property name="visible">True</property>
<property name="label" translatable="yes">Show Target Text</property>
<property name="stock_id">gtk-info</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="toolbutton-show_result_text">
<property name="visible">True</property>
<property name="label" translatable="yes">Show Result Text</property>
<property name="stock_id">gtk-info</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
+253
View File
@@ -0,0 +1,253 @@
<?xml version="1.0"?>
<interface>
<!-- interface-requires gtk+ 2.12 -->
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkWindow" id="p300-tactile">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<object class="GtkTable" id="p300-tactile-main">
<property name="visible">True</property>
<property name="n_rows">3</property>
<property name="row_spacing">4</property>
<child>
<object class="GtkTable" id="p300-tactile-table">
<property name="visible">True</property>
<property name="n_rows">6</property>
<property name="n_columns">1</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkEventBox" id="eventbox-1">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-1">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo1</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">1</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-2">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-2">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo2</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-3">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-3">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo3</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-4">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-4">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo4</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-5">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-5">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo5</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-6">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-6">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo6</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
</packing>
</child>
</object>
</child>
<child>
<object class="GtkTable" id="p300-tactile-table-target-result">
<property name="visible">True</property>
<property name="n_rows">2</property>
<property name="n_columns">3</property>
<property name="column_spacing">4</property>
<property name="row_spacing">4</property>
<child>
<object class="GtkLabel" id="label-result">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-target">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-result-title">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Result :</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-target-title">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Target :</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkImage" id="image">
<property name="visible">True</property>
<property name="stock">gtk-select-font</property>
</object>
<packing>
<property name="bottom_attach">2</property>
<property name="x_options"></property>
<property name="y_options"></property>
</packing>
</child>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkHSeparator" id="hseparator">
<property name="visible">True</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkWindow" id="p300-tactile-toolbar">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="title" translatable="yes">P300 tactile</property>
<property name="type_hint">dialog</property>
<child>
<object class="GtkToolbar" id="toolbar">
<property name="width_request">640</property>
<property name="visible">True</property>
<property name="toolbar_style">both</property>
<child>
<object class="GtkToggleToolButton" id="toolbutton-show_target_text">
<property name="visible">True</property>
<property name="label" translatable="yes">Show Target Text</property>
<property name="stock_id">gtk-info</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="toolbutton-show_result_text">
<property name="visible">True</property>
<property name="label" translatable="yes">Show Result Text</property>
<property name="stock_id">gtk-info</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
+270
View File
@@ -0,0 +1,270 @@
<?xml version="1.0"?>
<interface>
<!-- interface-requires gtk+ 2.12 -->
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkWindow" id="p300-tactile">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<object class="GtkTable" id="p300-tactile-main">
<property name="visible">True</property>
<property name="n_rows">3</property>
<property name="row_spacing">4</property>
<child>
<object class="GtkTable" id="p300-tactile-table">
<property name="visible">True</property>
<property name="n_rows">7</property>
<property name="n_columns">1</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkEventBox" id="eventbox-1">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-1">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo1</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">1</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-2">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-2">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo2</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-3">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-3">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo3</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-4">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-4">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo4</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-5">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-5">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo5</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-6">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-6">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo6</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-7">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-7">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo7</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
</packing>
</child>
</object>
</child>
<child>
<object class="GtkTable" id="p300-tactile-table-target-result">
<property name="visible">True</property>
<property name="n_rows">2</property>
<property name="n_columns">3</property>
<property name="column_spacing">4</property>
<property name="row_spacing">4</property>
<child>
<object class="GtkLabel" id="label-result">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-target">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-result-title">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Result :</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-target-title">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Target :</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkImage" id="image">
<property name="visible">True</property>
<property name="stock">gtk-select-font</property>
</object>
<packing>
<property name="bottom_attach">2</property>
<property name="x_options"></property>
<property name="y_options"></property>
</packing>
</child>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkHSeparator" id="hseparator">
<property name="visible">True</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkWindow" id="p300-tactile-toolbar">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="title" translatable="yes">P300 tactile</property>
<property name="type_hint">dialog</property>
<child>
<object class="GtkToolbar" id="toolbar">
<property name="width_request">640</property>
<property name="visible">True</property>
<property name="toolbar_style">both</property>
<child>
<object class="GtkToggleToolButton" id="toolbutton-show_target_text">
<property name="visible">True</property>
<property name="label" translatable="yes">Show Target Text</property>
<property name="stock_id">gtk-info</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="toolbutton-show_result_text">
<property name="visible">True</property>
<property name="label" translatable="yes">Show Result Text</property>
<property name="stock_id">gtk-info</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
+287
View File
@@ -0,0 +1,287 @@
<?xml version="1.0"?>
<interface>
<!-- interface-requires gtk+ 2.12 -->
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkWindow" id="p300-tactile">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<object class="GtkTable" id="p300-tactile-main">
<property name="visible">True</property>
<property name="n_rows">3</property>
<property name="row_spacing">4</property>
<child>
<object class="GtkTable" id="p300-tactile-table">
<property name="visible">True</property>
<property name="n_rows">8</property>
<property name="n_columns">1</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkEventBox" id="eventbox-1">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-1">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo1</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">1</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-2">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-2">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo2</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-3">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-3">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo3</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-4">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-4">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo4</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-5">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-5">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo5</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-6">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-6">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo6</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-7">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-7">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo7</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-8">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-8">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo8</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">7</property>
<property name="bottom_attach">8</property>
</packing>
</child>
</object>
</child>
<child>
<object class="GtkTable" id="p300-tactile-table-target-result">
<property name="visible">True</property>
<property name="n_rows">2</property>
<property name="n_columns">3</property>
<property name="column_spacing">4</property>
<property name="row_spacing">4</property>
<child>
<object class="GtkLabel" id="label-result">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-target">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-result-title">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Result :</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-target-title">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Target :</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkImage" id="image">
<property name="visible">True</property>
<property name="stock">gtk-select-font</property>
</object>
<packing>
<property name="bottom_attach">2</property>
<property name="x_options"></property>
<property name="y_options"></property>
</packing>
</child>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkHSeparator" id="hseparator">
<property name="visible">True</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkWindow" id="p300-tactile-toolbar">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="title" translatable="yes">P300 tactile</property>
<property name="type_hint">dialog</property>
<child>
<object class="GtkToolbar" id="toolbar">
<property name="width_request">640</property>
<property name="visible">True</property>
<property name="toolbar_style">both</property>
<child>
<object class="GtkToggleToolButton" id="toolbutton-show_target_text">
<property name="visible">True</property>
<property name="label" translatable="yes">Show Target Text</property>
<property name="stock_id">gtk-info</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="toolbutton-show_result_text">
<property name="visible">True</property>
<property name="label" translatable="yes">Show Result Text</property>
<property name="stock_id">gtk-info</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
+304
View File
@@ -0,0 +1,304 @@
<?xml version="1.0"?>
<interface>
<!-- interface-requires gtk+ 2.12 -->
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkWindow" id="p300-tactile">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<object class="GtkTable" id="p300-tactile-main">
<property name="visible">True</property>
<property name="n_rows">3</property>
<property name="row_spacing">4</property>
<child>
<object class="GtkTable" id="p300-tactile-table">
<property name="visible">True</property>
<property name="n_rows">9</property>
<property name="n_columns">1</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkEventBox" id="eventbox-1">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-1">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo1</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">1</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-2">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-2">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo2</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-3">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-3">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo3</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-4">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-4">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo4</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-5">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-5">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo5</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-6">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-6">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo6</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-7">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-7">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo7</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-8">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-8">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo8</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">7</property>
<property name="bottom_attach">8</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox-9">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label-9">
<property name="visible">True</property>
<property name="label" translatable="yes">Tactilo9</property>
<property name="use_markup">True</property>
<property name="justify">center</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">8</property>
<property name="bottom_attach">9</property>
</packing>
</child>
</object>
</child>
<child>
<object class="GtkTable" id="p300-tactile-table-target-result">
<property name="visible">True</property>
<property name="n_rows">2</property>
<property name="n_columns">3</property>
<property name="column_spacing">4</property>
<property name="row_spacing">4</property>
<child>
<object class="GtkLabel" id="label-result">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-target">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-result-title">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Result :</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-target-title">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Target :</property>
<property name="single_line_mode">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkImage" id="image">
<property name="visible">True</property>
<property name="stock">gtk-select-font</property>
</object>
<packing>
<property name="bottom_attach">2</property>
<property name="x_options"></property>
<property name="y_options"></property>
</packing>
</child>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkHSeparator" id="hseparator">
<property name="visible">True</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkWindow" id="p300-tactile-toolbar">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="title" translatable="yes">P300 tactile</property>
<property name="type_hint">dialog</property>
<child>
<object class="GtkToolbar" id="toolbar">
<property name="width_request">640</property>
<property name="visible">True</property>
<property name="toolbar_style">both</property>
<child>
<object class="GtkToggleToolButton" id="toolbutton-show_target_text">
<property name="visible">True</property>
<property name="label" translatable="yes">Show Target Text</property>
<property name="stock_id">gtk-info</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="toolbutton-show_result_text">
<property name="visible">True</property>
<property name="label" translatable="yes">Show Result Text</property>
<property name="stock_id">gtk-info</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
</object>
</child>
</object>
</interface>