This commit is contained in:
2021-10-14 13:47:35 +02:00
commit 6625a8dfaa
4026 changed files with 844291 additions and 0 deletions
@@ -0,0 +1,48 @@
IF(OV_DISABLE_GTK)
MESSAGE(STATUS "Skipping Plugins: Simple Visualization, no GTK")
RETURN()
ENDIF(OV_DISABLE_GTK)
PROJECT(openvibe-plugins-simple-visualization)
SET(PROJECT_VERSION_MAJOR ${OV_GLOBAL_VERSION_MAJOR})
SET(PROJECT_VERSION ${OV_GLOBAL_VERSION_STRING})
FILE(GLOB_RECURSE SRC_FILES src/*.cpp src/*.h src/*.inl)
ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRC_FILES})
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
FOLDER ${PLUGINS_FOLDER}
COMPILE_FLAGS "-DOVP_Exports -DOVP_Shared")
INCLUDE("FindOpenViBE")
INCLUDE("FindOpenViBECommon")
INCLUDE("FindOpenViBEToolkit")
INCLUDE("FindOpenViBEModuleEBML")
INCLUDE("FindOpenViBEModuleSystem")
INCLUDE("FindOpenViBEModuleTCPTagging")
INCLUDE("FindThirdPartyGTK")
INCLUDE("FindThirdPartyBoost") # need boost for erp plot
INCLUDE("FindOpenViBEVisualizationToolkit")
# ---------------------------------
# ---------------------------------
# -----------------------------
# Install files
# -----------------------------
INSTALL(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION ${DIST_BINDIR}
LIBRARY DESTINATION ${DIST_LIBDIR}
ARCHIVE DESTINATION ${DIST_LIBDIR})
INSTALL(DIRECTORY share/ DESTINATION ${DIST_DATADIR}/openvibe/plugins/simple-visualization)
INSTALL(DIRECTORY box-tutorials DESTINATION ${DIST_DATADIR}/openvibe/scenarios/)
@@ -0,0 +1,755 @@
<OpenViBE-Scenario>
<FormatVersion>1</FormatVersion>
<Creator>openvibe</Creator>
<CreatorVersion>2.0</CreatorVersion>
<Boxes>
<Box>
<Identifier>(0x00000f94, 0x0000209a)</Identifier>
<Name>Display cue image</Name>
<AlgorithmClassIdentifier>(0x005789a4, 0x3ab78a36)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Stimulations</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Stimulations (deprecated)</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Display images in full screen</Name>
<DefaultValue>false</DefaultValue>
<Value>false</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Scale images to fit</Name>
<DefaultValue>false</DefaultValue>
<Value>false</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>Clear screen Stimulation</Name>
<DefaultValue>OVTK_StimulationId_VisualStimulationStop</DefaultValue>
<Value>OVTK_StimulationId_Label_03</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
<Name>Cue Image 1</Name>
<DefaultValue>${Path_Data}/plugins/simple-visualization/p300-magic-card/01.png</DefaultValue>
<Value>${Path_Data}/plugins/simple-visualization/p300-magic-card/01.png</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>Stimulation 1</Name>
<DefaultValue>OVTK_StimulationId_Label_01</DefaultValue>
<Value>OVTK_StimulationId_Label_01</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
<Name>Cue Image 2</Name>
<DefaultValue>${Path_Data}/plugins/simple-visualization/p300-magic-card/02.png</DefaultValue>
<Value>${Path_Data}/plugins/simple-visualization/p300-magic-card/02.png</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>Stimulation 2</Name>
<DefaultValue>OVTK_StimulationId_Label_02</DefaultValue>
<Value>OVTK_StimulationId_Label_02</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>256.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>33</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>624.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x18869d2c, 0x1a544d63)</Value>
</Attribute>
<Attribute>
<Identifier>(0x61d11811, 0x71e65362)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>127</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x032e05cb)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc67a01dc, 0x28ce06c1)</Identifier>
<Value></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>5</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00001596, 0x000018ff)</Identifier>
<Name>Direct (deprecated)</Name>
<AlgorithmClassIdentifier>(0x65731e1d, 0x47de5276)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Stimulation stream 1</Name>
</Input>
</Inputs>
<Settings>
<Setting>
<TypeIdentifier>(0xa88b3667, 0x0871638c)</TypeIdentifier>
<Name>Log level to use</Name>
<DefaultValue>Debug</DefaultValue>
<Value>Information</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>368.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>43</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>624.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xf451ad91, 0x14c75f86)</Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>135</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x029a5eb7)</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</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>(0x00001596, 0x00001900)</Identifier>
<Name>TCP Tagging (recommended)</Name>
<AlgorithmClassIdentifier>(0x65731e1d, 0x47de5276)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Stimulation stream 1</Name>
</Input>
</Inputs>
<Settings>
<Setting>
<TypeIdentifier>(0xa88b3667, 0x0871638c)</TypeIdentifier>
<Name>Log level to use</Name>
<DefaultValue>Debug</DefaultValue>
<Value>Information</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>413.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>53</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>1024.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xf451ad91, 0x14c75f86)</Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>195</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x0013879a)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
<Value>true</Value>
</Attribute>
<Attribute>
<Identifier>(0x341d3912, 0x1478de86)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</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>(0x000039c5, 0x00003d32)</Identifier>
<Name>Signal display</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>5</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>10</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Bottom ruler</Name>
<DefaultValue>true</DefaultValue>
<Value>true</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Left 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>352.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>43</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>912.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x92c056a7, 0x2dc71aff)</Value>
</Attribute>
<Attribute>
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>100</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x001333b9)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
<Value>true</Value>
</Attribute>
<Attribute>
<Identifier>(0x341d3912, 0x1478de86)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>9</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>3</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x0000413b, 0x00007194)</Identifier>
<Name>Keyboard stimulator</Name>
<AlgorithmClassIdentifier>(0x00d317b9, 0x6324c3ff)</AlgorithmClassIdentifier>
<Outputs>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Outgoing Stimulations</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
<Name>Filename</Name>
<DefaultValue>${Path_Data}/plugins/stimulation/simple-keyboard-to-stimulations.txt</DefaultValue>
<Value>${Path_Data}/plugins/stimulation/simple-keyboard-to-stimulations.txt</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>144.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>23</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>624.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x8d89d3b7, 0x8339d210)</Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>140</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x01ca3a3d)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00005760, 0x000043ee)</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>${AcquisitionServer_HostName}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
<Name>Acquisition server port</Name>
<DefaultValue>1024</DefaultValue>
<Value>1024</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>288.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>33</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>944.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x0d4656c0, 0xc95b1fa8)</Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>121</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x0012dfda)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
<Value>true</Value>
</Attribute>
<Attribute>
<Identifier>(0x341d3912, 0x1478de86)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>5</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>2</Value>
</Attribute>
</Attributes>
</Box>
</Boxes>
<Links>
<Link>
<Identifier>(0x00000c5b, 0x00000d31)</Identifier>
<Source>
<BoxIdentifier>(0x00005760, 0x000043ee)</BoxIdentifier>
<BoxOutputIndex>1</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x000039c5, 0x00003d32)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>311</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>929</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>326</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>897</Value>
</Attribute>
</Attributes>
</Link>
<Link>
<Identifier>(0x00003bc6, 0x00005ab0)</Identifier>
<Source>
<BoxIdentifier>(0x00005760, 0x000043ee)</BoxIdentifier>
<BoxOutputIndex>2</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x000039c5, 0x00003d32)</BoxIdentifier>
<BoxInputIndex>1</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>311</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>944</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>326</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>912</Value>
</Attribute>
</Attributes>
</Link>
<Link>
<Identifier>(0x00004468, 0x000059d6)</Identifier>
<Source>
<BoxIdentifier>(0x00000f94, 0x0000209a)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00001596, 0x000018ff)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>279</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>624</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>342</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>624</Value>
</Attribute>
</Attributes>
</Link>
<Link>
<Identifier>(0x000058d2, 0x00002fa9)</Identifier>
<Source>
<BoxIdentifier>(0x0000413b, 0x00007194)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00000f94, 0x0000209a)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>162</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>624</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>235</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>624</Value>
</Attribute>
</Attributes>
</Link>
<Link>
<Identifier>(0x000063f2, 0x00002eeb)</Identifier>
<Source>
<BoxIdentifier>(0x00005760, 0x000043ee)</BoxIdentifier>
<BoxOutputIndex>2</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00001596, 0x00001900)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>311</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>944</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>382</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>1024</Value>
</Attribute>
</Attributes>
</Link>
</Links>
<Comments>
<Comment>
<Identifier>(0x000061de, 0x0000796b)</Identifier>
<Text>Credits:
The few images flashed in this tutorial were
created by &lt;i&gt;zcool&lt;/i&gt;, &lt;i&gt;http://www.zcool.com.cn/&lt;/i&gt;.
Please see 'license.txt'
in the image folder for details.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>912.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>112.000000</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x0000640c, 0x00004614)</Identifier>
<Text>This scenario illustrates the use of the &lt;b&gt;Display cue image&lt;/b&gt; box.
The box can be configured to display different images when different
stimulations are received by it. Right after display, the box sends the
stimulus also as an output, which is printed to the log by
&lt;i&gt;Stimulation listener&lt;/i&gt; in the current scenario.
During play, when you press 'a' or 'z' with &lt;i&gt;Keyboard stimulator&lt;/i&gt;
window having focus, the cue display should display different images.
Press 'e' to clear the display.
You can right-click on the display box and select 'modify settings'
to add more stimulus/image combinations.
For time critical applications and precise alignment to the signal,
the Display Cue Image sends the stimulations to the Acquisition Server
using TCP Tagging right after rendering. Reading the stimulations
from the box output directly is not recommended.
</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>272.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>208.000000</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x000067e0, 0x00000e43)</Identifier>
<Text>You can browse each box' documentation by selecting the box and pressing &lt;b&gt;F1&lt;/b&gt;</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>272.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>400.000000</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x000068a8, 0x00000f8c)</Identifier>
<Text>Unmuting the chain below will show stimulations
as they come back from the Acquisition Server's
TCP Tagging module.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>944.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>224.000000</Value>
</Attribute>
</Attributes>
</Comment>
</Comments>
<Metadata>
<Entry>
<Identifier>(0x0000775c, 0x000078ff)</Identifier>
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
<Data>[{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":320,"identifier":"(0x00001c26, 0x00002268)","index":0,"name":"Default window","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":480},{"boxIdentifier":"(0x0000413b, 0x00007194)","childCount":0,"identifier":"(0x00004185, 0x00006764)","index":0,"parentIdentifier":"(0xffffffff, 0xffffffff)","type":3},{"boxIdentifier":"(0x00000f94, 0x0000209a)","childCount":0,"identifier":"(0x00006aaf, 0x00005171)","index":0,"parentIdentifier":"(0xffffffff, 0xffffffff)","type":3},{"boxIdentifier":"(0x000039c5, 0x00003d32)","childCount":0,"identifier":"(0x00007dc4, 0x00002e75)","index":0,"parentIdentifier":"(0xffffffff, 0xffffffff)","type":3},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x000042b4, 0x0000350e)","index":0,"name":"Default tab","parentIdentifier":"(0x00001c26, 0x00002268)","type":2},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":0,"identifier":"(0x00005ef1, 0x00002e5f)","index":0,"name":"Empty","parentIdentifier":"(0x000042b4, 0x0000350e)","type":0}]</Data>
</Entry>
</Metadata>
</OpenViBE-Scenario>
@@ -0,0 +1,45 @@
g_sent = false
g_numTrials = 10
function initialize(box)
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
-- make sure we get equal number of both trials
g_numTrials = 2 * box:get_setting(2)
g_sent = false;
end
function uninitialize(box)
end
function process(box)
while box:keep_processing() and g_sent == false do
box:send_stimulation(1, OVTK_StimulationId_ExperimentStart, 0, 0)
current_time = 0
for i = 1 , g_numTrials do
if i % 2 == 0 then
box:send_stimulation(1, OVTK_StimulationId_NonTarget, current_time+0, 0)
else
box:send_stimulation(1, OVTK_StimulationId_Target, current_time+0, 0)
end
current_time = current_time + 1
end
box:send_stimulation(1, OVTK_StimulationId_ExperimentStop, current_time, 0)
box:send_stimulation(1, OVTK_StimulationId_EndOfFile, current_time+2, 0)
g_sent = true
box:sleep()
end
end
@@ -0,0 +1,87 @@
function initialize(box)
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
-- Settings
number_of_trials = box:get_setting(2)
baseline_duration = box:get_setting(3)
wait_for_beep_duration = box:get_setting(4)
wait_for_cue_duration = box:get_setting(5)
display_cue_duration = box:get_setting(6)
feedback_duration = box:get_setting(7)
end_of_trial_min_duration = box:get_setting(8)
end_of_trial_max_duration = box:get_setting(9)
number_of_class = box:get_setting(10)
classes = {}
id = 10
for i = 1, number_of_class do
table.insert(classes,1,_G[box:get_setting(id+i)])
end
-- initializes random seed
math.randomseed(os.time())
-- fill the sequence table with predifined order
sequence = {}
for i = 1, number_of_trials do
for j = 1, number_of_class do
table.insert(sequence, 1, classes[j])
end
end
-- randomize the sequence
for i = 1, number_of_trials do
a = math.random(1, number_of_trials*number_of_class)
b = math.random(1, number_of_trials*number_of_class)
swap = sequence[a]
sequence[a] = sequence[b]
sequence[b] = swap
end
end
function process(box)
local t=0
-- manages baseline
box:send_stimulation(1, OVTK_StimulationId_ExperimentStart, t, 0)
t = t + 5
-- manages trials
for i = 1, number_of_trials*number_of_class do
-- first display cross on screen
box:send_stimulation(1, OVTK_GDF_Start_Of_Trial, t, 0)
box:send_stimulation(1, OVTK_GDF_Cross_On_Screen, t, 0)
t = t + wait_for_beep_duration
-- warn the user the cue is going to appear
box:send_stimulation(1, OVTK_StimulationId_Beep, t, 0)
t = t + wait_for_cue_duration
-- display cue
box:send_stimulation(1, sequence[i], t, 0)
t = t + display_cue_duration
-- provide feedback
box:send_stimulation(1, OVTK_GDF_Feedback_Continuous, t, 0)
t = t + feedback_duration
-- ends trial
box:send_stimulation(1, OVTK_GDF_End_Of_Trial, t, 0)
t = t + math.random(end_of_trial_min_duration, end_of_trial_max_duration)
end
-- send end for completeness
box:send_stimulation(1, OVTK_GDF_End_Of_Session, t, 0)
t = t + 5
box:send_stimulation(1, OVTK_StimulationId_Train, t, 0)
t = t + 5
-- used to cause the acquisition scenario to stop
box:send_stimulation(1, OVTK_StimulationId_ExperimentStop, t, 0)
end
@@ -0,0 +1,757 @@
<OpenViBE-Scenario>
<FormatVersion>1</FormatVersion>
<Creator>OpenVIBE</Creator>
<CreatorVersion>2.0</CreatorVersion>
<Settings></Settings>
<Inputs></Inputs>
<Outputs></Outputs>
<Boxes>
<Box>
<Identifier>(0x00000d3a, 0x00007272)</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>${Path_Data}/scenarios/signals/bci-motor-imagery.ov</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>-144</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>(0xf37b8e7a, 0x1bc33e4e)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x00b124ce)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x000016b3, 0x00001395)</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>1.000000</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Epoch 1 intervals (in sec)</Name>
<DefaultValue>0.5</DefaultValue>
<Value>0.062500</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>96</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>336</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xc5ff41e9, 0xccc59a01)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x0080b400)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00003378, 0x00007cd8)</Identifier>
<Name>Spectral analysis</Name>
<AlgorithmClassIdentifier>(0x84218ff8, 0xa87e7995)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Input signal</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</TypeIdentifier>
<Name>Amplitude</Name>
</Output>
<Output>
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</TypeIdentifier>
<Name>Phase</Name>
</Output>
<Output>
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</TypeIdentifier>
<Name>Real Part</Name>
</Output>
<Output>
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</TypeIdentifier>
<Name>Imag Part</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Amplitude</Name>
<DefaultValue>true</DefaultValue>
<Value>true</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Phase</Name>
<DefaultValue>false</DefaultValue>
<Value>false</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Real Part</Name>
<DefaultValue>false</DefaultValue>
<Value>false</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Imaginary Part</Name>
<DefaultValue>false</DefaultValue>
<Value>false</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>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x4e5c55a0, 0xe69eb7db)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x010ae800)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00006157, 0x00000331)</Identifier>
<Name>Reference Channel</Name>
<AlgorithmClassIdentifier>(0x444721ad, 0x78342cf5)</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</Name>
<DefaultValue>Ref_Nose</DefaultValue>
<Value>Nz</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x666f25e9, 0x3e5738d6)</TypeIdentifier>
<Name>Channel Matching Method</Name>
<DefaultValue>Smart</DefaultValue>
<Value>Smart</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>-64</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>336</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x7e39891d, 0x32cf5be7)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>2</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00006394, 0x00005e7d)</Identifier>
<Name>Signal display</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>5</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>10</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>96.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>160.000000</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>(0x00006e55, 0x000045b4)</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>Filtered signal</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x2f2c606c, 0x8512ed68)</TypeIdentifier>
<Name>Filter method</Name>
<DefaultValue>Butterworth</DefaultValue>
<Value>Butterworth</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0xfa20178e, 0x4cba62e9)</TypeIdentifier>
<Name>Filter type</Name>
<DefaultValue>Low pass</DefaultValue>
<Value>Band pass</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
<Name>Filter order</Name>
<DefaultValue>4</DefaultValue>
<Value>4</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Low cut frequency (Hz)</Name>
<DefaultValue>29</DefaultValue>
<Value>1.000000</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>High cut frequency (Hz)</Name>
<DefaultValue>40</DefaultValue>
<Value>128.000000</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Pass band ripple (dB)</Name>
<DefaultValue>0.5</DefaultValue>
<Value>0.500000</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>16</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>336</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x27a4ceec, 0x876d6384)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x79b6f114, 0x5bfc044f)</Identifier>
<Name>Power spectrum display</Name>
<AlgorithmClassIdentifier>(0xecb46081, 0x96da0d49)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</TypeIdentifier>
<Name>Matrix</Name>
</Input>
</Inputs>
<Settings>
<Setting>
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
<Name>Channel Localisation</Name>
<DefaultValue>${AdvancedViz_ChannelLocalisation}</DefaultValue>
<Value>${AdvancedViz_ChannelLocalisation}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Positive Data Only ?</Name>
<DefaultValue>false</DefaultValue>
<Value>true</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Gain</Name>
<DefaultValue>1</DefaultValue>
<Value>0.001</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
<Name>Caption</Name>
<DefaultValue></DefaultValue>
<Value></Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Translucency</Name>
<DefaultValue>1</DefaultValue>
<Value>1</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x3d3c7c7f, 0xef0e7129)</TypeIdentifier>
<Name>Color</Name>
<DefaultValue>${AdvancedViz_DefaultColorGradient}</DefaultValue>
<Value>${AdvancedViz_DefaultColorGradient}</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<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>(0x6b60e2b2, 0xf4839b7d)</Value>
</Attribute>
<Attribute>
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>6</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
</Boxes>
<Links>
<Link>
<Identifier>(0x00000916, 0x000011ea)</Identifier>
<Source>
<BoxIdentifier>(0x00006157, 0x00000331)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00006e55, 0x000045b4)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x000021b1, 0x00004dc0)</Identifier>
<Source>
<BoxIdentifier>(0x00006e55, 0x000045b4)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00006394, 0x00005e7d)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x00004cb8, 0x00005643)</Identifier>
<Source>
<BoxIdentifier>(0x00000d3a, 0x00007272)</BoxIdentifier>
<BoxOutputIndex>1</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00006157, 0x00000331)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x0000665a, 0x000000ac)</Identifier>
<Source>
<BoxIdentifier>(0x000016b3, 0x00001395)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00003378, 0x00007cd8)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x00007484, 0x00001d51)</Identifier>
<Source>
<BoxIdentifier>(0x00006e55, 0x000045b4)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x000016b3, 0x00001395)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x535b3c79, 0x2c5670d5)</Identifier>
<Source>
<BoxIdentifier>(0x00003378, 0x00007cd8)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x79b6f114, 0x5bfc044f)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
</Links>
<Comments>
<Comment>
<Identifier>(0x0000091c, 0x00000811)</Identifier>
<Text>An FFT is applied on each window thanks to the
&lt;i&gt;&lt;b&gt;Spectral Analysis&lt;/b&gt;&lt;/i&gt; box.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>624</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>176</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x00001e48, 0x00004dd6)</Identifier>
<Text>The &lt;i&gt;Signal Display&lt;/i&gt;
box is just present to
monitor the input of
the spectrum
computation pipeline.
The &lt;b&gt;Window Manager&lt;/b&gt;
is used to organize the
two windows correctly !</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>128</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>-48</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x000023b8, 0x0000476a)</Identifier>
<Text>Then the &lt;i&gt;Temporal Filter&lt;/i&gt; box
filters the signal in the [1 128] Hz range.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>624</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>16</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x000024e9, 0x0000634b)</Identifier>
<Text>The &lt;i&gt;Generic Stream Reader&lt;/i&gt; box
reads an OpenViBE file containing signals.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>624</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>-144</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x00003fe9, 0x00004063)</Identifier>
<Text>Each channel is referenced against
channel Nz (which was recorded on the nose
in the demonstrated file) thanks to the
&lt;i&gt;Reference Channel&lt;/i&gt; box.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>624</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>-64</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x0000412d, 0x00004c1d)</Identifier>
<Text>Finally, the &lt;i&gt;&lt;b&gt;Power Spectrum Display&lt;/b&gt;&lt;/i&gt;
displays the resulting spectrum.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>624</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>240</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x00006dde, 0x00002264)</Identifier>
<Text>You can browse each box' documentation by selecting the box and pressing &lt;b&gt;F1&lt;/b&gt;</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>512</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>304</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x00007f06, 0x000056c4)</Identifier>
<Text>The &lt;i&gt;&lt;b&gt;Time Based Epoching&lt;/b&gt;&lt;/i&gt; box
splits the signals in blocks of 1 seconds every
16th of second. This is a moving window.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>624</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>96</Value>
</Attribute>
</Attributes>
</Comment>
</Comments>
<Metadata>
<Entry>
<Identifier>(0x0000775c, 0x000078ff)</Identifier>
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
<Data>[{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":574,"identifier":"(0x00001bcb, 0x00001344)","name":"Default window","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":973},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x000026ea, 0x00001175)","index":0,"name":"Default tab","parentIdentifier":"(0x00001bcb, 0x00001344)","type":2},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":2,"dividerPosition":474,"identifier":"(0x00007859, 0x00005801)","index":0,"maxDividerPosition":953,"name":"Horizontal split","parentIdentifier":"(0x000026ea, 0x00001175)","type":5},{"boxIdentifier":"(0x00006394, 0x00005e7d)","childCount":0,"identifier":"(0x000022fb, 0x000073cc)","index":0,"parentIdentifier":"(0x00007859, 0x00005801)","type":3},{"boxIdentifier":"(0x79b6f114, 0x5bfc044f)","childCount":0,"identifier":"(0x235ae5c3, 0x2e892abf)","index":1,"parentIdentifier":"(0x00007859, 0x00005801)","type":3}]</Data>
</Entry>
</Metadata>
<Attributes>
<Attribute>
<Identifier>(0x790d75b8, 0x3bb90c33)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x8c1fc55b, 0x7b433dc2)</Identifier>
<Value>1.0</Value>
</Attribute>
<Attribute>
<Identifier>(0x9f5c4075, 0x4a0d3666)</Identifier>
<Value>Power Spectrum example</Value>
</Attribute>
<Attribute>
<Identifier>(0xf36a1567, 0xd13c53da)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xf6b2e3fa, 0x7bd43926)</Identifier>
<Value>box-tutorials</Value>
</Attribute>
<Attribute>
<Identifier>(0xf8034a49, 0x8b3f37cc)</Identifier>
<Value>Inria</Value>
</Attribute>
</Attributes>
</OpenViBE-Scenario>
@@ -0,0 +1,772 @@
<OpenViBE-Scenario>
<FormatVersion>1</FormatVersion>
<Creator>openvibe</Creator>
<CreatorVersion>2.0</CreatorVersion>
<Boxes>
<Box>
<Identifier>(0x00005174, 0x00007bed)</Identifier>
<Name>Filtered signal (fixed scale)</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>None</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Scale refresh interval (secs)</Name>
<DefaultValue>5</DefaultValue>
<Value>5</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Vertical Scale</Name>
<DefaultValue>100</DefaultValue>
<Value>30</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>10</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>352.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>43</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>864.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x92c056a7, 0x2dc71aff)</Value>
</Attribute>
<Attribute>
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>187</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x0017ebaf)</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>(0x00006c69, 0x00002365)</Identifier>
<Name>Raw signal (autoscale)</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>5</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>10</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>304.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>43</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>240.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x92c056a7, 0x2dc71aff)</Value>
</Attribute>
<Attribute>
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>157</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x0029ae51)</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>(0x112053af, 0x3da33f80)</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>${Path_Data}/scenarios/signals/bci-motor-imagery.ov</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>176</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>33</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>912</Value>
</Attribute>
<Attribute>
<Identifier>(0x30a4e5c9, 0x83502953)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xf37b8e7a, 0x1bc33e4e)</Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>153</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x0022574e)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x224f7f2d, 0x2178fca3)</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>${Path_Data}/scenarios/signals/bci-motor-imagery.ov</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>190.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>33</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>256.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x30a4e5c9, 0x83502953)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xf37b8e7a, 0x1bc33e4e)</Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>153</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x00577d72)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x549b2de2, 0x5ce25cec)</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>Filtered signal</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x2f2c606c, 0x8512ed68)</TypeIdentifier>
<Name>Filter method</Name>
<DefaultValue>Butterworth</DefaultValue>
<Value>Butterworth</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0xfa20178e, 0x4cba62e9)</TypeIdentifier>
<Name>Filter type</Name>
<DefaultValue>Band pass</DefaultValue>
<Value>Band pass</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
<Name>Filter order</Name>
<DefaultValue>4</DefaultValue>
<Value>4</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Low cut frequency (Hz)</Name>
<DefaultValue>29</DefaultValue>
<Value>4</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>High cut frequency (Hz)</Name>
<DefaultValue>40</DefaultValue>
<Value>40</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Pass band ripple (dB)</Name>
<DefaultValue>0.5</DefaultValue>
<Value>0.5</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>272</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>23</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>864</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x27a4ceec, 0x876d6384)</Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>105</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x004f4c72)</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>1</Value>
</Attribute>
</Attributes>
</Box>
</Boxes>
<Links>
<Link>
<Identifier>(0x00000b25, 0x0000448a)</Identifier>
<Source>
<BoxIdentifier>(0x224f7f2d, 0x2178fca3)</BoxIdentifier>
<BoxOutputIndex>1</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00006c69, 0x00002365)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>213</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>256</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>278</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>225</Value>
</Attribute>
</Attributes>
</Link>
<Link>
<Identifier>(0x000036bb, 0x00003055)</Identifier>
<Source>
<BoxIdentifier>(0x224f7f2d, 0x2178fca3)</BoxIdentifier>
<BoxOutputIndex>2</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00006c69, 0x00002365)</BoxIdentifier>
<BoxInputIndex>1</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>213</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>271</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>278</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>240</Value>
</Attribute>
</Attributes>
</Link>
<Link>
<Identifier>(0x000039fb, 0x000015fb)</Identifier>
<Source>
<BoxIdentifier>(0x549b2de2, 0x5ce25cec)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00005174, 0x00007bed)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>290</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>864</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>326</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>849</Value>
</Attribute>
</Attributes>
</Link>
<Link>
<Identifier>(0x0000548c, 0x00002d14)</Identifier>
<Source>
<BoxIdentifier>(0x112053af, 0x3da33f80)</BoxIdentifier>
<BoxOutputIndex>2</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00005174, 0x00007bed)</BoxIdentifier>
<BoxInputIndex>1</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>199</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>927</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>326</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>864</Value>
</Attribute>
</Attributes>
</Link>
<Link>
<Identifier>(0x68fe1497, 0x07e43c19)</Identifier>
<Source>
<BoxIdentifier>(0x112053af, 0x3da33f80)</BoxIdentifier>
<BoxOutputIndex>1</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x549b2de2, 0x5ce25cec)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>199</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>912</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>256</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>864</Value>
</Attribute>
</Attributes>
</Link>
</Links>
<Comments>
<Comment>
<Identifier>(0x0b7b1bf9, 0x154c9b65)</Identifier>
<Text>The &lt;i&gt;Temporal Filter&lt;/i&gt;, filters the input signal
according to the settings.
Here we use a Butterworth band-pass.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>1120</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>256</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x17bf5ede, 0x4d57f5b5)</Identifier>
<Text>The &lt;i&gt;Generic Stream Reader&lt;/i&gt; box
reads an &lt;i&gt;OpenViBE&lt;/i&gt; file from disk and sends
its content to the following box.
The &lt;i&gt;OpenViBE&lt;/i&gt; file format can store any
stream of the OpenViBE platform into a file.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>512</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>192</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x22866850, 0x7c657523)</Identifier>
<Text>This &lt;i&gt;&lt;b&gt;Signal Display&lt;/b&gt;&lt;/i&gt; box displays
the content in a fixed, specified scale.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>1136.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>352.000000</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x405767d6, 0x682e6c4b)</Identifier>
<Text>This &lt;i&gt;&lt;b&gt;Signal Display&lt;/b&gt;&lt;/i&gt; box displays
the content of the file in a mode where each
channel is automatically vertically scaled,
independently of the other channels.
The red blip in the plot means the scale was changed.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>512.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>304.000000</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x4548e33f, 0x52be494b)</Identifier>
<Text>This scenario illustrates the &lt;b&gt;Signal Display&lt;/b&gt; box.
For serious use, it is recommended to configure the box to use a scaling
suitable for your data to get minimal amount of run-time autoscale changes.
- Very different channel scales: Use per-channel scale
- All channels similar, scale known: Use global scale
- Data is well-behaved: Use fixed scale and specify it
</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>770.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>48.000000</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x7c68e1bc, 0x660ebde3)</Identifier>
<Text>You can browse each box' documentation by selecting the box and pressing &lt;b&gt;F1&lt;/b&gt;</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>464.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>400.000000</Value>
</Attribute>
</Attributes>
</Comment>
</Comments>
<Metadata>
<Entry>
<Identifier>(0x0000775c, 0x000078ff)</Identifier>
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
<Data>[{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":583,"identifier":"(0x7c1b6671, 0x13abdd97)","index":0,"name":"Default window","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":578},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x7631555b, 0x63aa0d68)","index":0,"name":"Default tab","parentIdentifier":"(0x7c1b6671, 0x13abdd97)","type":2},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":2,"dividerPosition":263,"identifier":"(0x00002f97, 0x00001a6e)","index":0,"maxDividerPosition":533,"name":"Vertical split","parentIdentifier":"(0x7631555b, 0x63aa0d68)","type":4},{"boxIdentifier":"(0x00006c69, 0x00002365)","childCount":0,"identifier":"(0x00004e10, 0x00003d21)","index":0,"parentIdentifier":"(0x00002f97, 0x00001a6e)","type":3},{"boxIdentifier":"(0x00005174, 0x00007bed)","childCount":0,"identifier":"(0x00007cba, 0x00001aa6)","index":1,"parentIdentifier":"(0x00002f97, 0x00001a6e)","type":3}]</Data>
</Entry>
</Metadata>
<Attributes>
<Attribute>
<Identifier>(0x790d75b8, 0x3bb90c33)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x8c1fc55b, 0x7b433dc2)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x9f5c4075, 0x4a0d3666)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xf36a1567, 0xd13c53da)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xf6b2e3fa, 0x7bd43926)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xf8034a49, 0x8b3f37cc)</Identifier>
<Value></Value>
</Attribute>
</Attributes>
</OpenViBE-Scenario>
@@ -0,0 +1,945 @@
<OpenViBE-Scenario>
<FormatVersion>1</FormatVersion>
<Creator>OpenVIBE</Creator>
<CreatorVersion>2.0</CreatorVersion>
<Settings></Settings>
<Inputs></Inputs>
<Outputs></Outputs>
<Boxes>
<Box>
<Identifier>(0x000015f2, 0x00002121)</Identifier>
<Name>Reference Channel</Name>
<AlgorithmClassIdentifier>(0x444721ad, 0x78342cf5)</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</Name>
<DefaultValue>Ref_Nose</DefaultValue>
<Value>Nz</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x666f25e9, 0x3e5738d6)</TypeIdentifier>
<Name>Channel Matching Method</Name>
<DefaultValue>Smart</DefaultValue>
<Value>Smart</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>-336</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>352</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x7e39891d, 0x32cf5be7)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x0054fd9b)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>2</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00003595, 0x00006a9b)</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>${Path_Data}/scenarios/signals/bci-motor-imagery.ov</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>-416</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>352</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, 0x00b2cff4)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00004070, 0x0000602c)</Identifier>
<Name>Instant Bars</Name>
<AlgorithmClassIdentifier>(0xecb46081, 0x96da0d49)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</TypeIdentifier>
<Name>Matrix</Name>
</Input>
</Inputs>
<Settings>
<Setting>
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
<Name>Channel Localisation</Name>
<DefaultValue>${AdvancedViz_ChannelLocalisation}</DefaultValue>
<Value>${AdvancedViz_ChannelLocalisation}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Positive Data Only ?</Name>
<DefaultValue>false</DefaultValue>
<Value>true</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Gain</Name>
<DefaultValue>1</DefaultValue>
<Value>0.001</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
<Name>Caption</Name>
<DefaultValue></DefaultValue>
<Value></Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Translucency</Name>
<DefaultValue>1</DefaultValue>
<Value>1</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x3d3c7c7f, 0xef0e7129)</TypeIdentifier>
<Name>Color</Name>
<DefaultValue>${AdvancedViz_DefaultColorGradient}</DefaultValue>
<Value>${AdvancedViz_DefaultColorGradient}</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>208</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>448</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x6b60e2b2, 0xf4839b7d)</Value>
</Attribute>
<Attribute>
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>6</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x000050f8, 0x00006368)</Identifier>
<Name>Stacked Bitmap (Horizontal)</Name>
<AlgorithmClassIdentifier>(0x7b0ddb65, 0xfdc51488)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</TypeIdentifier>
<Name>Matrix</Name>
</Input>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Markers</Name>
</Input>
</Inputs>
<Settings>
<Setting>
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
<Name>Channel Localisation</Name>
<DefaultValue>${AdvancedViz_ChannelLocalisation}</DefaultValue>
<Value>${AdvancedViz_ChannelLocalisation}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x8f02e3f6, 0xffb00f4b)</TypeIdentifier>
<Name>Temporal Coherence</Name>
<DefaultValue>Time Locked</DefaultValue>
<Value>Time Locked</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Time Scale</Name>
<DefaultValue>20</DefaultValue>
<Value>20</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
<Name>Matrix Count</Name>
<DefaultValue>50</DefaultValue>
<Value>50</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Gain</Name>
<DefaultValue>1</DefaultValue>
<Value>0.005</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
<Name>Caption</Name>
<DefaultValue></DefaultValue>
<Value></Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x3d3c7c7f, 0xef0e7129)</TypeIdentifier>
<Name>Color</Name>
<DefaultValue>${AdvancedViz_DefaultColorGradient}</DefaultValue>
<Value>${AdvancedViz_DefaultColorGradient}</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>208</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>272</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xafb1edd5, 0x68e1da05)</Value>
</Attribute>
<Attribute>
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>7</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>2</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x000054d1, 0x00002a5a)</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>Filtered signal</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x2f2c606c, 0x8512ed68)</TypeIdentifier>
<Name>Filter method</Name>
<DefaultValue>Butterworth</DefaultValue>
<Value>Butterworth</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0xfa20178e, 0x4cba62e9)</TypeIdentifier>
<Name>Filter type</Name>
<DefaultValue>Low pass</DefaultValue>
<Value>Band pass</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
<Name>Filter order</Name>
<DefaultValue>4</DefaultValue>
<Value>4</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Low cut frequency (Hz)</Name>
<DefaultValue>29</DefaultValue>
<Value>1.000000</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>High cut frequency (Hz)</Name>
<DefaultValue>40</DefaultValue>
<Value>128.000000</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Pass band ripple (dB)</Name>
<DefaultValue>0.5</DefaultValue>
<Value>0.500000</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>-48</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>352</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x27a4ceec, 0x876d6384)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x005c7eaa)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00005d4a, 0x00005a2d)</Identifier>
<Name>Surface Laplacian</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>4;0;-1;0;-1;-1;0;0;-1;0;0;4;0;-1;0;0;-1;-1;0;-1</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
<Name>Number of Output Channels</Name>
<DefaultValue>4</DefaultValue>
<Value>2</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
<Name>Number of Input Channels</Name>
<DefaultValue>4</DefaultValue>
<Value>10</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>-144</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>352</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>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x003e807e)</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>(0x00006908, 0x00003949)</Identifier>
<Name>Spectral analysis</Name>
<AlgorithmClassIdentifier>(0x84218ff8, 0xa87e7995)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Input signal</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</TypeIdentifier>
<Name>Amplitude</Name>
</Output>
<Output>
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</TypeIdentifier>
<Name>Phase</Name>
</Output>
<Output>
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</TypeIdentifier>
<Name>Real Part</Name>
</Output>
<Output>
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</TypeIdentifier>
<Name>Imag Part</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Amplitude</Name>
<DefaultValue>true</DefaultValue>
<Value>true</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Phase</Name>
<DefaultValue>false</DefaultValue>
<Value>false</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Real Part</Name>
<DefaultValue>false</DefaultValue>
<Value>false</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Imaginary Part</Name>
<DefaultValue>false</DefaultValue>
<Value>false</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>112</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>352</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x4e5c55a0, 0xe69eb7db)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x0cb2e74d)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x0000698b, 0x00007cff)</Identifier>
<Name>C3;C4;FC3;FC4;C5;C1;C2;C6;CP3;CP4</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>C3;C4;FC3;FC4;C5;C1;C2;C6;CP3;CP4</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>Smart</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>-240.000000</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>304.000000</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>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x0060049b)</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>3</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00007e73, 0x00000676)</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>1.000000</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Epoch 1 intervals (in sec)</Name>
<DefaultValue>0.5</DefaultValue>
<Value>0.006250</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>32</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>352</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xc5ff41e9, 0xccc59a01)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x00cd01e9)</Value>
</Attribute>
</Attributes>
</Box>
</Boxes>
<Links>
<Link>
<Identifier>(0x00000b4d, 0x00000d30)</Identifier>
<Source>
<BoxIdentifier>(0x00007e73, 0x00000676)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00006908, 0x00003949)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x00001bf3, 0x000038b8)</Identifier>
<Source>
<BoxIdentifier>(0x0000698b, 0x00007cff)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00005d4a, 0x00005a2d)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x000044ec, 0x00002288)</Identifier>
<Source>
<BoxIdentifier>(0x00006908, 0x00003949)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x000050f8, 0x00006368)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x00005220, 0x000060a2)</Identifier>
<Source>
<BoxIdentifier>(0x00006908, 0x00003949)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00004070, 0x0000602c)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x0000631d, 0x00004f18)</Identifier>
<Source>
<BoxIdentifier>(0x00005d4a, 0x00005a2d)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x000054d1, 0x00002a5a)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x000068a1, 0x00003e8e)</Identifier>
<Source>
<BoxIdentifier>(0x000015f2, 0x00002121)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x0000698b, 0x00007cff)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x0000782d, 0x0000214e)</Identifier>
<Source>
<BoxIdentifier>(0x000054d1, 0x00002a5a)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00007e73, 0x00000676)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x00007fb4, 0x00006b06)</Identifier>
<Source>
<BoxIdentifier>(0x00003595, 0x00006a9b)</BoxIdentifier>
<BoxOutputIndex>1</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x000015f2, 0x00002121)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
</Links>
<Comments>
<Comment>
<Identifier>(0x00000ac1, 0x00006367)</Identifier>
<Text>Each channel is referenced against
channel Nz (which was recorded on the nose
in the demonstrated file) thanks to the
&lt;i&gt;Reference Channel&lt;/i&gt; box.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>624</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>-336</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x00001195, 0x0000392b)</Identifier>
<Text>The &lt;i&gt;&lt;b&gt;Time Based Epoching&lt;/b&gt;&lt;/i&gt; box
splits the signals in blocks of 1 seconds every
160th of second. This is a moving window.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>624</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>32</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x000021b1, 0x00005fdd)</Identifier>
<Text>The &lt;i&gt;Spatial Filter&lt;/i&gt; box applies a
surface laplacion to the 10 input channels,
resulting in a two channels output : one for
the left motor cortex, and one for the right
motor cortex.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>624</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>-144</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x00002802, 0x00001618)</Identifier>
<Text>The &lt;i&gt;Generic Stream Reader&lt;/i&gt; box
reads an OpenViBE file containing signals.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>624</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>-416</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x00002fd8, 0x00005632)</Identifier>
<Text>Then the &lt;i&gt;Temporal Filter&lt;/i&gt; box
filters the signal in the [1 128] Hz range.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>624</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>-48</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x0000389d, 0x000005e2)</Identifier>
<Text>An FFT is applied on each window thanks to the
&lt;i&gt;&lt;b&gt;Spectral Analysis&lt;/b&gt;&lt;/i&gt; box.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>624</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>112</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x00003de6, 0x00005b0d)</Identifier>
<Text>Finally, the &lt;i&gt;&lt;b&gt;Power Spectrum Display&lt;/b&gt;&lt;/i&gt;
and the &lt;i&gt;&lt;b&gt;Time-Frequency Map Display&lt;/b&gt;&lt;/i&gt;
boxes display the resulting spectrum.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>624</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>192</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x00005b3a, 0x00004773)</Identifier>
<Text>You can browse each box' documentation by selecting the box and pressing &lt;b&gt;F1&lt;/b&gt;</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>512</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>272</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x00005e3a, 0x0000499b)</Identifier>
<Text>The &lt;i&gt;Channel Selector&lt;/i&gt; box selects
5 channels over the left motor cortex and
5 channels over the right motor cortex.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>624</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>-240</Value>
</Attribute>
</Attributes>
</Comment>
</Comments>
<Metadata>
<Entry>
<Identifier>(0x0000775c, 0x000078ff)</Identifier>
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
<Data>[{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":370,"identifier":"(0x0000359a, 0x00003742)","name":"Default window","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":989},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x00007f20, 0x000032fb)","index":0,"name":"Default tab","parentIdentifier":"(0x0000359a, 0x00003742)","type":2},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":2,"dividerPosition":482,"identifier":"(0x000043a4, 0x000063a3)","index":0,"maxDividerPosition":969,"name":"Horizontal split","parentIdentifier":"(0x00007f20, 0x000032fb)","type":5},{"boxIdentifier":"(0x00004070, 0x0000602c)","childCount":0,"identifier":"(0x00003b44, 0x0000208c)","index":0,"parentIdentifier":"(0x000043a4, 0x000063a3)","type":3},{"boxIdentifier":"(0x000050f8, 0x00006368)","childCount":0,"identifier":"(0x00006ad7, 0x00005ebb)","index":1,"parentIdentifier":"(0x000043a4, 0x000063a3)","type":3}]</Data>
</Entry>
</Metadata>
<Attributes>
<Attribute>
<Identifier>(0x790d75b8, 0x3bb90c33)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x8c1fc55b, 0x7b433dc2)</Identifier>
<Value>1.0</Value>
</Attribute>
<Attribute>
<Identifier>(0x9f5c4075, 0x4a0d3666)</Identifier>
<Value>Time/Frequency map example</Value>
</Attribute>
<Attribute>
<Identifier>(0xf36a1567, 0xd13c53da)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xf6b2e3fa, 0x7bd43926)</Identifier>
<Value>box-tutorials</Value>
</Attribute>
<Attribute>
<Identifier>(0xf8034a49, 0x8b3f37cc)</Identifier>
<Value>Inria</Value>
</Attribute>
</Attributes>
</OpenViBE-Scenario>
@@ -0,0 +1,806 @@
<OpenViBE-Scenario>
<FormatVersion>1</FormatVersion>
<Creator>OpenVIBE</Creator>
<CreatorVersion>0.2.99</CreatorVersion>
<Settings></Settings>
<Inputs></Inputs>
<Outputs></Outputs>
<Boxes>
<Box>
<Identifier>(0x0fbb365f, 0x0a3f89b8)</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>Moving epoch average</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
<Name>Epoch count</Name>
<DefaultValue>4</DefaultValue>
<Value>4</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>416</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>416</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>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x00cdd939)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x1f949de2, 0x2337d854)</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>1.000000</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Epoch 1 intervals (in sec)</Name>
<DefaultValue>0.5</DefaultValue>
<Value>0.062500</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>192</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>416</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xc5ff41e9, 0xccc59a01)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x21fcf924, 0x5d3b2684)</Identifier>
<Name>Signal average</Name>
<AlgorithmClassIdentifier>(0x00642c4d, 0x5df7e50a)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Input signal</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Filtered signal</Name>
</Output>
</Outputs>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>320</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>416</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xc5ff4187, 0xffc5f432)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x0061f9ef)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x3ec7a705, 0x4cd766d5)</Identifier>
<Name>2D topographic map</Name>
<AlgorithmClassIdentifier>(0x0b104632, 0x451c265f)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
<Name>Signal</Name>
</Input>
<Input>
<TypeIdentifier>(0x013df452, 0xa3a8879a)</TypeIdentifier>
<Name>Channel localization</Name>
</Input>
</Inputs>
<Settings>
<Setting>
<TypeIdentifier>(0x44b76d9e, 0x618229bc)</TypeIdentifier>
<Name>Interpolation type</Name>
<DefaultValue>1</DefaultValue>
<Value>Spline (potentials)</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Delay (in s)</Name>
<DefaultValue>0</DefaultValue>
<Value>0.000000</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>544</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>320</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x7b15868b, 0x3fd9a6ab)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x16218589)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x44ee7a32, 0x52ad995f)</Identifier>
<Name>Electrode localisation file reader</Name>
<AlgorithmClassIdentifier>(0x40704155, 0x19c50e8f)</AlgorithmClassIdentifier>
<Outputs>
<Output>
<TypeIdentifier>(0x013df452, 0xa3a8879a)</TypeIdentifier>
<Name>Channel localisation</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
<Name>Filename</Name>
<DefaultValue></DefaultValue>
<Value>${AdvancedViz_ChannelLocalisation}</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>464</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>240</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x54c15135, 0x285756a5)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x00371d9f)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x4b427aec, 0x6b0fac6f)</Identifier>
<Name>Simple DSP</Name>
<AlgorithmClassIdentifier>(0x00e26fa1, 0x1dbab1b2)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Input - A</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Output</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
<Name>Equation</Name>
<DefaultValue>x</DefaultValue>
<Value>x*x</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>272</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>416</Value>
</Attribute>
<Attribute>
<Identifier>(0x30a4e5c9, 0x83502953)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x21889dc4, 0x1126497e)</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>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xfba64161, 0x65304e21)</Identifier>
<Value></Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x63d6b541, 0x6b05c2ad)</Identifier>
<Name>3D Topography</Name>
<AlgorithmClassIdentifier>(0xc709ea84, 0xb577d910)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
<Name>Matrix</Name>
</Input>
</Inputs>
<Settings>
<Setting>
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
<Name>Channel Localisation</Name>
<DefaultValue>${AdvancedViz_ChannelLocalisation}</DefaultValue>
<Value>${AdvancedViz_ChannelLocalisation}</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Gain</Name>
<DefaultValue>0.05</DefaultValue>
<Value>0.05</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
<Name>Caption</Name>
<DefaultValue></DefaultValue>
<Value></Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x3d3c7c7f, 0xef0e7129)</TypeIdentifier>
<Name>Color</Name>
<DefaultValue>${AdvancedViz_DefaultColorGradient}</DefaultValue>
<Value>${AdvancedViz_DefaultColorGradient}</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>496</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>432</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xa291db4a, 0x5f4fcbfc)</Value>
</Attribute>
<Attribute>
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>4</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x6cb7e55b, 0x0e13304e)</Identifier>
<Name>Reference Channel</Name>
<AlgorithmClassIdentifier>(0x444721ad, 0x78342cf5)</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</Name>
<DefaultValue>Ref_Nose</DefaultValue>
<Value>Nz</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x666f25e9, 0x3e5738d6)</TypeIdentifier>
<Name>Channel Matching Method</Name>
<DefaultValue>Smart</DefaultValue>
<Value>Smart</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>32</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>416</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x7e39891d, 0x32cf5be7)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>2</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x6faaa401, 0x3c7307af)</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>Filtered signal</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x2f2c606c, 0x8512ed68)</TypeIdentifier>
<Name>Filter method</Name>
<DefaultValue>Butterworth</DefaultValue>
<Value>Butterworth</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0xfa20178e, 0x4cba62e9)</TypeIdentifier>
<Name>Filter type</Name>
<DefaultValue>Low pass</DefaultValue>
<Value>Band pass</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
<Name>Filter order</Name>
<DefaultValue>4</DefaultValue>
<Value>4</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Low cut frequency (Hz)</Name>
<DefaultValue>29</DefaultValue>
<Value>16.000000</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>High cut frequency (Hz)</Name>
<DefaultValue>40</DefaultValue>
<Value>24.000000</Value>
<Modifiability>false</Modifiability>
</Setting>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Pass band ripple (dB)</Name>
<DefaultValue>0.5</DefaultValue>
<Value>0.500000</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>112</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>416</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x27a4ceec, 0x876d6384)</Value>
</Attribute>
<Attribute>
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
<Value>(0x00000000, 0x00ba7336)</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x789ad7f5, 0x4791b012)</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>${Path_Data}/scenarios/signals/bci-motor-imagery.ov</Value>
<Modifiability>false</Modifiability>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>-48</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>416</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, 0x00b124ce)</Value>
</Attribute>
</Attributes>
</Box>
</Boxes>
<Links>
<Link>
<Identifier>(0x06238c03, 0x2a587fa2)</Identifier>
<Source>
<BoxIdentifier>(0x21fcf924, 0x5d3b2684)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x0fbb365f, 0x0a3f89b8)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x062e7816, 0x2087ee95)</Identifier>
<Source>
<BoxIdentifier>(0x4b427aec, 0x6b0fac6f)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x21fcf924, 0x5d3b2684)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x12e790de, 0x1bd0aeee)</Identifier>
<Source>
<BoxIdentifier>(0x789ad7f5, 0x4791b012)</BoxIdentifier>
<BoxOutputIndex>1</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x6cb7e55b, 0x0e13304e)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x18347c94, 0x77e1d57d)</Identifier>
<Source>
<BoxIdentifier>(0x0fbb365f, 0x0a3f89b8)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x63d6b541, 0x6b05c2ad)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x2365a7fa, 0x25b829e6)</Identifier>
<Source>
<BoxIdentifier>(0x0fbb365f, 0x0a3f89b8)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x3ec7a705, 0x4cd766d5)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x2428cc78, 0x69daa97c)</Identifier>
<Source>
<BoxIdentifier>(0x6cb7e55b, 0x0e13304e)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x6faaa401, 0x3c7307af)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x5b997461, 0x0c57fefb)</Identifier>
<Source>
<BoxIdentifier>(0x1f949de2, 0x2337d854)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x4b427aec, 0x6b0fac6f)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x6fbd214b, 0x4f657c81)</Identifier>
<Source>
<BoxIdentifier>(0x44ee7a32, 0x52ad995f)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x3ec7a705, 0x4cd766d5)</BoxIdentifier>
<BoxInputIndex>1</BoxInputIndex>
</Target>
</Link>
<Link>
<Identifier>(0x7dc31517, 0x57a0704e)</Identifier>
<Source>
<BoxIdentifier>(0x6faaa401, 0x3c7307af)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x1f949de2, 0x2337d854)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
</Link>
</Links>
<Comments>
<Comment>
<Identifier>(0x16fc202a, 0x76849bc1)</Identifier>
<Text>The &lt;i&gt;Generic Stream Reader&lt;/i&gt; box
reads an OpenViBE file containing signals.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>704</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>-48</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x18f469ad, 0x485d85d3)</Identifier>
<Text>Then the &lt;i&gt;Temporal Filter&lt;/i&gt; box
filters the signal in the beta [16 24] Hz range.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>704</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>112</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x1a9d4942, 0x19261e44)</Identifier>
<Text>Then for each window, the band power is
computed thanks to the &lt;i&gt;&lt;b&gt;Simple DSP&lt;/b&gt;&lt;/i&gt;
box (wich computes squares of each sample) and
the &lt;i&gt;&lt;b&gt;Signal Average&lt;/b&gt;&lt;/i&gt; box
which reduces each window to a single sample for
each channl : the mean of all the samples
of this window for this channel.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>704</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>304</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x2b693b93, 0x5e2a4195)</Identifier>
<Text>Finally, the &lt;i&gt;&lt;b&gt;2D Topographic Map&lt;/b&gt;&lt;/i&gt;
and the &lt;i&gt;&lt;b&gt;3D Topographic Map&lt;/b&gt;&lt;/i&gt;
boxes display the resulting beta power over the scalp
surface, getting the channel localisation from the
&lt;i&gt;&lt;b&gt;Electrode Localisation File Reader&lt;/b&gt;&lt;/i&gt;.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>704</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>512</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x3563e422, 0x6847fe24)</Identifier>
<Text>The average beta power is averaged over
4 estimations thanks to the &lt;i&gt;Epoch
Average&lt;/i&gt; box.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>704</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>416</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x35c7d728, 0x52b44a42)</Identifier>
<Text>The &lt;i&gt;&lt;b&gt;Time Based Epoching&lt;/b&gt;&lt;/i&gt; box
splits the signals in blocks of 1 seconds every
16th of second. This is a moving window.</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>704</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>192</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x4de3a357, 0x1b13df95)</Identifier>
<Text>You can browse each box' documentation by selecting the box and pressing &lt;b&gt;F1&lt;/b&gt;</Text>
<Attributes>
<Attribute>
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
<Value>544</Value>
</Attribute>
<Attribute>
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
<Value>608</Value>
</Attribute>
</Attributes>
</Comment>
<Comment>
<Identifier>(0x51a26769, 0x20fd0303)</Identifier>
<Text>Each channel is referenced against
channel Nz (which was recorded on the nose
in the demonstrated file) thanks to the
&lt;i&gt;Reference Channel&lt;/i&gt; box.</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>[{"boxIdentifier":"(0x63d6b541, 0x6b05c2ad)","childCount":0,"identifier":"(0x772c7cdf, 0x33c98441)","parentIdentifier":"(0xffffffff, 0xffffffff)","type":3},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":645,"identifier":"(0x7f3626b8, 0x4d26e675)","name":"Default window","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":844},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x77e1919d, 0x34fdfde0)","index":0,"name":"Default tab","parentIdentifier":"(0x7f3626b8, 0x4d26e675)","type":2},{"boxIdentifier":"(0x3ec7a705, 0x4cd766d5)","childCount":0,"identifier":"(0x13283f74, 0x6dbed40e)","index":0,"parentIdentifier":"(0x77e1919d, 0x34fdfde0)","type":3}]</Data>
</Entry>
</Metadata>
</OpenViBE-Scenario>
@@ -0,0 +1,82 @@
/**
* \page BoxAlgorithm_3DTopographicMap 3D topographic map
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_3DTopographicMap_Description|
The 3D topographic map uses the same visualization paradigm as its 2D version, which consists in interpolating potentials (or current densities) at the surface of the scalp, converting them to colors using a color scale and mapping them over the surface of the scalp. The 3D version offers the possibility to freeky move around the head to observe brain activity from a custom point of view.
It requires a head model to be available. This model is divided in two : the lower part, which includes the face and the neck, is static (meaning once it's loaded, it doesn't get modified). The other part, the 'scalp', is the area where potentials are mapped. Its size and shape determine where brain activity mapping will occur once the plugin is running. This second mesh is a set of vertices whose colors will be modified depending on the value of the potential interpolated there.
Potentials interpolation works using a spherical spline algorithm. The coordinates of the electrodes used in the experiment are sent to the algorithm in an initialization step. Then as the experiment is conducted, the values of the potentials measured at the electrodes location are sent to the algorithm.
Potentials at scalp vertices locations can be retrieved by converting each vertex location (expressed in model frame) to a cartesian orthonormal frame.
* |OVP_DocEnd_BoxAlgorithm_3DTopographicMap_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_3DTopographicMap_Inputs|
Note: the channel names specified on the 'Signal' and 'Channel Localization' input streams should match. Mismatches may not be reported by the box. For example, if electrode localisation file reader provides the positions of the electrodes from some configuration file, the channel names in that file should correspend to the names of the signal channels delivered in the Signal stream.
* |OVP_DocEnd_BoxAlgorithm_3DTopographicMap_Inputs|
* |OVP_DocBegin_BoxAlgorithm_3DTopographicMap_Input1|
* |OVP_DocEnd_BoxAlgorithm_3DTopographicMap_Input1|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_3DTopographicMap_Settings|
* |OVP_DocEnd_BoxAlgorithm_3DTopographicMap_Settings|
* |OVP_DocBegin_BoxAlgorithm_3DTopographicMap_Setting1|
Choice of spline or laplacian interpolation.
* |OVP_DocEnd_BoxAlgorithm_3DTopographicMap_Setting1|
* |OVP_DocBegin_BoxAlgorithm_3DTopographicMap_Setting2|
Delay to apply to displayed data, in seconds.
* |OVP_DocEnd_BoxAlgorithm_3DTopographicMap_Setting2|
__________________________________________________________________
Online visualization settings
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_3DTopographicMap_OnlineVisualizationSettings|
Online settings include :
- Map Potentials/Currents : these settings control the nature of mapped values. While potentials are computed from spline values, currents computation uses the spline laplacian.
- Toggle Electrodes : toggle electrodes on/off.
- Toggle Sampling Points : toggle sampling points on/off. Sampling points lie at the vertices of the skull mesh.
\image html topographicmap3ddisplay_toolbar.png "3D Topographic Map toolbar"
* |OVP_DocEnd_BoxAlgorithm_3DTopographicMap_OnlineVisualizationSettings|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_3DTopographicMap_Examples|
This example is based on the following scenario file : <i>box-tutorials/topographic_map.xml</i>
In this example an EEG recording is read using a GDF file reader, and data is processed and filtered before being mapped onto the scalp surface. For details on this data processing step, see the example in \ref Doc_BoxAlgorithm_2DTopographicMap.
A 2D topographic map is displayed next to the 3D version for comparison purposes.
\image html topographicmap3ddisplay_2d_vs_3d_online.png "Mapping brain activity in 2D and 3D"
* |OVP_DocEnd_BoxAlgorithm_3DTopographicMap_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_3DTopographicMap_Miscellaneous|
* |OVP_DocEnd_BoxAlgorithm_3DTopographicMap_Miscellaneous|
*/
@@ -0,0 +1,84 @@
/**
* \page BoxAlgorithm_DisplayCueImage Display cue image
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_DisplayCueImage_Description|
Displays different images according to the input stimulations. User can define as many images as needed, with one stimulation associated to each image. A specific stimulation clears the screen.
* |OVP_DocEnd_BoxAlgorithm_DisplayCueImage_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_DisplayCueImage_Inputs|
* |OVP_DocEnd_BoxAlgorithm_DisplayCueImage_Inputs|
* |OVP_DocBegin_BoxAlgorithm_DisplayCueImage_Input1|
Stimulations used to display an image or clear the screen.
* |OVP_DocEnd_BoxAlgorithm_DisplayCueImage_Input1|
__________________________________________________________________
Outputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_DisplayCueImage_Outputs|
* |OVP_DocEnd_BoxAlgorithm_DisplayCueImage_Outputs|
* |OVP_DocBegin_BoxAlgorithm_DisplayCueImage_Output1|
The input stimulations are output when the GTK rendering is actually finished (image is displayed or screen is cleared). This output is deprecated.
* |OVP_DocEnd_BoxAlgorithm_DisplayCueImage_Output1|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_DisplayCueImage_Settings|
* |OVP_DocEnd_BoxAlgorithm_DisplayCueImage_Settings|
* |OVP_DocBegin_BoxAlgorithm_DisplayCueImage_Setting1|
Render the images in fullscreen, centered.
* |OVP_DocEnd_BoxAlgorithm_DisplayCueImage_Setting1|
* |OVP_DocBegin_BoxAlgorithm_DisplayCueImage_Setting2|
Scale the images to fit the displayed area.
* |OVP_DocEnd_BoxAlgorithm_DisplayCueImage_Setting2|
* |OVP_DocBegin_BoxAlgorithm_DisplayCueImage_Setting3|
The stimulation that clears the screen to black.
* |OVP_DocEnd_BoxAlgorithm_DisplayCueImage_Setting3|
* |OVP_DocBegin_BoxAlgorithm_DisplayCueImage_Setting4|
The first image to display.
* |OVP_DocEnd_BoxAlgorithm_DisplayCueImage_Setting4|
* |OVP_DocBegin_BoxAlgorithm_DisplayCueImage_Setting5|
The stimulation used to display the first image.
* |OVP_DocEnd_BoxAlgorithm_DisplayCueImage_Setting5|
__________________________________________________________________
Online visualization settings
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_DisplayCueImage_OnlineVisualizationSettings|
None.
* |OVP_DocEnd_BoxAlgorithm_DisplayCueImage_OnlineVisualizationSettings|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_DisplayCueImage_Examples|
The Display Cue Image box can be used to make scenarios that record Event-Related Potentials (ERPs) based on visual events. Use the Lua Stimulator box with a .lua script to create a timeline of stimulations to drive the box (e.g. SSVEP scenarios have examples of such lua scripts). Then, capture the recorded data and events with the Acquisition Client box and feed to Generic Stream Writer.
* |OVP_DocEnd_BoxAlgorithm_DisplayCueImage_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_DisplayCueImage_Miscellaneous|
After rendering each image, the Display Cue Image box sends the corresponding stimulations to the Acquisition Server using TCP Tagging.
* |OVP_DocEnd_BoxAlgorithm_DisplayCueImage_Miscellaneous|
*/
@@ -0,0 +1,78 @@
/**
* \page BoxAlgorithm_ERPPlot Event related potential Plot
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_ERPPlot_Description|
Plots target event-related potentials (ERP) versus non target ERP. Also draw the spread (variance) around these values.
Saves the picture in a png file if a certain trigger is received on its first input.
* |OVP_DocEnd_BoxAlgorithm_ERPPlot_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_ERPPlot_Inputs|
You can add mode inputs to this box. Excluding the first input (stimulis), the inputs work by pair signal/standard deviation so when you add an input, a pair of input will be added. The corresponding settings are automatically added as well.
* |OVP_DocEnd_BoxAlgorithm_ERPPlot_Inputs|
* |OVP_DocBegin_BoxAlgorithm_ERPPlot_Input1|
Stimulis channel. If the stimulus received matches the 'Trigger to save figure' setting, it writes a png file at 'Filename final figure'
* |OVP_DocEnd_BoxAlgorithm_ERPPlot_Input1|
* |OVP_DocBegin_BoxAlgorithm_ERPPlot_Input2|
The signal to plot.
* |OVP_DocEnd_BoxAlgorithm_ERPPlot_Input2|
* |OVP_DocBegin_BoxAlgorithm_ERPPlot_Input3|
The variance of the signal to plot.
* |OVP_DocEnd_BoxAlgorithm_ERPPlot_Input3|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_ERPPlot_Settings|
* |OVP_DocEnd_BoxAlgorithm_ERPPlot_Settings|
* |OVP_DocBegin_BoxAlgorithm_ERPPlot_Setting1|
Filename final figure. Path to where you want the picture to be saved (png file).
* |OVP_DocEnd_BoxAlgorithm_ERPPlot_Setting1|
* |OVP_DocBegin_BoxAlgorithm_ERPPlot_Setting2|
Trigger to save figure. Identifier of the stimulis that triggers the saving of the file.
* |OVP_DocEnd_BoxAlgorithm_ERPPlot_Setting2|
* |OVP_DocBegin_BoxAlgorithm_ERPPlot_Setting3|
Should X-Axis time labels always start from 0?
* |OVP_DocEnd_BoxAlgorithm_ERPPlot_Setting3|
* |OVP_DocBegin_BoxAlgorithm_ERPPlot_Setting4|
Line color 1. Color of the curve. The confidence zone is drawn with the same color but with 50% transparency.
* |OVP_DocEnd_BoxAlgorithm_ERPPlot_Setting4|
* |OVP_DocBegin_BoxAlgorithm_ERPPlot_Setting5|
Line label 1. The name you want to appear next to your plotted signal.
* |OVP_DocEnd_BoxAlgorithm_ERPPlot_Setting5|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_ERPPlot_Examples|
Here is an example using a \ref BoxAlgorithm_ERPPlot box with the first signal labelled target displayed in green and the second one labelled non target in red.
\image html "erp-plot.png" "Target vs non target displayed using the Erp Plot".
* |OVP_DocEnd_BoxAlgorithm_ERPPlot_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_ERPPlot_Miscellaneous|
* |OVP_DocEnd_BoxAlgorithm_ERPPlot_Miscellaneous|
*/
@@ -0,0 +1,105 @@
/**
* \page BoxAlgorithm_GrazVisualization Graz visualization
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_GrazVisualization_Description|
The Graz visualization box implements the display of the well-known
Graz BCI paradigm, typically used for Motor Imagery BCI experiments.
The paradigm is described e.g. in Pfurtscheller & Neuper,
"Motor Imagery and Direct Brain-Computer Communication", 2001.
In its most common use, the Graz visualization instructs the user to
perform either left or right hand motor imagery by presenting left and
right arrows, correspondingly. In order to know when to present what,
the box must be driven with a stimulation stream that provides the
timeline of the experiment, including trial starts, trial stops, etc.
The same box can be used both for data collection and for real-time
displays. When used real time, the box can display a directional blue
bar to illustrate the strength and direction of the prediction.
* |OVP_DocEnd_BoxAlgorithm_GrazVisualization_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_GrazVisualization_Inputs|
* |OVP_DocEnd_BoxAlgorithm_GrazVisualization_Inputs|
* |OVP_DocBegin_BoxAlgorithm_GrazVisualization_Input1|
The timeline of the events.
* |OVP_DocEnd_BoxAlgorithm_GrazVisualization_Input1|
* |OVP_DocBegin_BoxAlgorithm_GrazVisualization_Input2|
For online use and feedback, the strength of the current activation.
This can be for example the continuous output from a classifier.
* |OVP_DocEnd_BoxAlgorithm_GrazVisualization_Input2|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_GrazVisualization_Settings|
* |OVP_DocEnd_BoxAlgorithm_GrazVisualization_Settings|
* |OVP_DocBegin_BoxAlgorithm_GrazVisualization_Setting1|
If true, the user will be shown the arrows.
* |OVP_DocEnd_BoxAlgorithm_GrazVisualization_Setting1|
* |OVP_DocBegin_BoxAlgorithm_GrazVisualization_Setting2|
If true, the current activation will be presented as feedback in form of a blue bar.
* |OVP_DocEnd_BoxAlgorithm_GrazVisualization_Setting2|
* |OVP_DocBegin_BoxAlgorithm_GrazVisualization_Setting3|
If true, feedback will be shown only after the trial. Otherwise immediately.
* |OVP_DocEnd_BoxAlgorithm_GrazVisualization_Setting3|
* |OVP_DocBegin_BoxAlgorithm_GrazVisualization_Setting4|
If true, a little matrix will display how many online trials matched the arrow direction.
* |OVP_DocEnd_BoxAlgorithm_GrazVisualization_Setting4|
* |OVP_DocBegin_BoxAlgorithm_GrazVisualization_Setting5|
How many predictions to integrate for computing the feedback bar?
* |OVP_DocEnd_BoxAlgorithm_GrazVisualization_Setting5|
* |OVP_DocBegin_BoxAlgorithm_GrazVisualization_Setting6|
If true, the blue bar will only be displayed if its direction agrees with the arrow.
* |OVP_DocEnd_BoxAlgorithm_GrazVisualization_Setting6|
__________________________________________________________________
Online visualization settings
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_GrazVisualization_OnlineVisualizationSettings|
* |OVP_DocEnd_BoxAlgorithm_GrazVisualization_OnlineVisualizationSettings|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_GrazVisualization_Examples|
* |OVP_DocEnd_BoxAlgorithm_GrazVisualization_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_GrazVisualization_Miscellaneous|
The timeline required by the box can be generated by a Lua stimulator.
OpenViBE is bundled with a few motor imagery examples illustrating
this (in folder "bci-examples/").
In order to place the markers (stimulations) to the recorded EEG stream accurately in time,
the box connects to the Acquisition Server's TCP Tagging plugin and forwards the received
timeline there after rendering. The subsequent scenarios and writers should then use the timeline
from the Acquisition Server output and not directly from the timeline generating box. But
due to the long duration of time the motor imagery is typically integrated, this paradigm
could be less sensitive to marker alignment issues compared e.g. to P300.
* |OVP_DocEnd_BoxAlgorithm_GrazVisualization_Miscellaneous|
*/
@@ -0,0 +1,51 @@
/**
* \page BoxAlgorithm_LevelMeasure Level measure
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_LevelMeasure_Description|
Values contained in input matrix are displayed as levels shown on vertical progress bars. A normalization is performed so that the sum of all displayed levels is 1.
* |OVP_DocEnd_BoxAlgorithm_LevelMeasure_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_LevelMeasure_Inputs|
* |OVP_DocEnd_BoxAlgorithm_LevelMeasure_Inputs|
* |OVP_DocBegin_BoxAlgorithm_LevelMeasure_Input1|
* |OVP_DocEnd_BoxAlgorithm_LevelMeasure_Input1|
__________________________________________________________________
Online visualization settings
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_LevelMeasure_OnlineVisualizationSettings|
Online settings :
Setting1 : Reset scores
Setting2 : Threshold that must be reached for scores to be incremented
Setting3 : Show levels as percentages
* |OVP_DocEnd_BoxAlgorithm_LevelMeasure_OnlineVisualizationSettings|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_LevelMeasure_Examples|
* |OVP_DocEnd_BoxAlgorithm_LevelMeasure_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_LevelMeasure_Miscellaneous|
* |OVP_DocEnd_BoxAlgorithm_LevelMeasure_Miscellaneous|
*/
@@ -0,0 +1,117 @@
/**
* \page BoxAlgorithm_MultimodalGrazVisualization Multimodal Graz visualization
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_MultimodalGrazVisualization_Description|
This is a generalization of the Graz visualization allowing to display the result of the classification on two or more classes, always choosing which action to ask the user.
* |OVP_DocEnd_BoxAlgorithm_MultimodalGrazVisualization_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_MultimodalGrazVisualization_Inputs|
* |OVP_DocEnd_BoxAlgorithm_MultimodalGrazVisualization_Inputs|
* |OVP_DocBegin_BoxAlgorithm_MultimodalGrazVisualization_Input1|
The timeline of the events.
* |OVP_DocEnd_BoxAlgorithm_MultimodalGrazVisualization_Input1|
* |OVP_DocBegin_BoxAlgorithm_MultimodalGrazVisualization_Input2|
For online use and feedback, the strength of the current activation.
This can be for example the continuous output from a classifier.
* |OVP_DocEnd_BoxAlgorithm_MultimodalGrazVisualization_Input2|
__________________________________________________________________
Outputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_MultimodalGrazVisualization_Outputs|
* |OVP_DocEnd_BoxAlgorithm_MultimodalGrazVisualization_Outputs|
* |OVP_DocBegin_BoxAlgorithm_MultimodalGrazVisualization_Outputs|
Vector of displayed Bar Size.
* |OVP_DocEnd_BoxAlgorithm_MultimodalGrazVisualization_Outputs|
* |OVP_DocBegin_BoxAlgorithm_MultimodalGrazVisualization_Outputs|
Confusion matrix (recommended to save only last matrix if you want to save to csv).
* |OVP_DocEnd_BoxAlgorithm_MultimodalGrazVisualization_Outputs|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_MultimodalGrazVisualization_Settings|
* |OVP_DocEnd_BoxAlgorithm_MultimodalGrazVisualization_Settings|
* |OVP_DocBegin_BoxAlgorithm_MultimodalGrazVisualization_Setting1|
If true, the user will be shown the modalities.
* |OVP_DocEnd_BoxAlgorithm_MultimodalGrazVisualization_Setting1|
* |OVP_DocBegin_BoxAlgorithm_MultimodalGrazVisualization_Setting2|
Selection of the feedback mode:\n
None = no Feedback\n
Positive Only = only the expected modality is the predicted\n
Best Only = Feedback only for the predicted Feedback\n
All = Feedback of all modality
* |OVP_DocEnd_BoxAlgorithm_MultimodalGrazVisualization_Setting2|
* |OVP_DocBegin_BoxAlgorithm_MultimodalGrazVisualization_Setting3|
If true, feedback will be shown only after the trial. Otherwise immediately.
* |OVP_DocEnd_BoxAlgorithm_MultimodalGrazVisualization_Setting3|
* |OVP_DocBegin_BoxAlgorithm_MultimodalGrazVisualization_Setting4|
If true, a little matrix will display how many online trials matched the arrow direction.
* |OVP_DocEnd_BoxAlgorithm_MultimodalGrazVisualization_Setting4|
* |OVP_DocBegin_BoxAlgorithm_MultimodalGrazVisualization_Setting5|
How many predictions to integrate for computing the feedback bar.
* |OVP_DocEnd_BoxAlgorithm_MultimodalGrazVisualization_Setting5|
* |OVP_DocBegin_BoxAlgorithm_MultimodalGrazVisualization_Setting6|
Path to the modality image if we don't show the instruction.
* |OVP_DocEnd_BoxAlgorithm_MultimodalGrazVisualization_Setting6|
* |OVP_DocBegin_BoxAlgorithm_MultimodalGrazVisualization_Setting7|
Label of the stimulation for the first class.
* |OVP_DocEnd_BoxAlgorithm_MultimodalGrazVisualization_Setting7|
* |OVP_DocBegin_BoxAlgorithm_MultimodalGrazVisualization_Setting8|
Path to the modality image of the first class.
* |OVP_DocEnd_BoxAlgorithm_MultimodalGrazVisualization_Setting8|
* |OVP_DocBegin_BoxAlgorithm_MultimodalGrazVisualization_Setting9|
Label of the stimulation for the first class.
* |OVP_DocEnd_BoxAlgorithm_MultimodalGrazVisualization_Setting9|
* |OVP_DocBegin_BoxAlgorithm_MultimodalGrazVisualization_Setting10|
Path to the modality image of the second class.
* |OVP_DocEnd_BoxAlgorithm_MultimodalGrazVisualization_Setting10|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_MultimodalGrazVisualization_Examples|
* |OVP_DocEnd_BoxAlgorithm_MultimodalGrazVisualization_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_MultimodalGrazVisualization_Miscellaneous|
The timeline required by the box can be generated by a Lua stimulator.
OpenViBE is bundled with a few motor imagery examples illustrating
this (in folder "bci-examples/").
In order to place the markers (stimulations) to the recorded EEG stream accurately in time,
the box connects to the Acquisition Server's TCP Tagging plugin and forwards the received
timeline there after rendering. The subsequent scenarios and writers should then use the timeline
from the Acquisition Server output and not directly from the timeline generating box. But
due to the long duration of time the motor imagery is typically integrated, this paradigm
could be less sensitive to marker alignment issues compared e.g. to P300.
* |OVP_DocEnd_BoxAlgorithm_MultimodalGrazVisualization_Miscellaneous|
*/
@@ -0,0 +1,157 @@
/**
* \page BoxAlgorithm_P300IdentifierCardVisualization P300 Identifier Card Visualization
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Description|
This box can be used with a P300 based paradigm to have a simple game. A target card is choose among a collection of cards and it display in the “Target” area. The application shows each card sequentially.
After a number of repetitions, the card that the user was focusing on is automatically found.
\image html Doc_BoxAlgorithm_P300IdentifierCardVisualization_Snapshot.png "The P300 Identification Card Visualization"
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Inputs|
This box has three inputs. The most important one is the first one, sequencing the which card to show to the user.
The two other inputs are optional and used for defining the target and the selected card.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Inputs|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Input1|
This input is used for sequencing the card display. It uses specific stimulations to know which
card should be shown (see \ref Doc_BoxAlgorithm_P300IdentifierCardVisualization_Setting_5)
The card display is switched off thanks to the \c OVTK_StimulationId_VisualStimulationStop stimulation
(this is automatically triggered by the \ref Doc_BoxAlgorithm_P300SpellerStimulator box).
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Input1|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Input2|
This input is used in order to define the target card the user should focus on. See
\ref Doc_BoxAlgorithm_P300IdentificationCardVisualization_Setting_5 to know what stimulation should be used.
The target card will be displayed in the "Target" area, with a specific color so the user quickly notices it.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Input2|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Input3|
This input is used in order to define the selected card the user should focus on. See
\ref Doc_BoxAlgorithm_P300IdentifierCardVisualization_Setting_5 to know what stimulation should be used.
The selected card will be displayed in the "Selected" area, with a specific color so the user quickly notices it.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Input3|
__________________________________________________________________
Outputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Outputs|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Outputs|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Output1|
This output is used to translate incoming stimulations depending if they are target or not.
The actual target is determined with the second input. As soon as the target is known, each display card
can be considered as a target display or not. This can be later use for selecting evoked response
potentials against other responses.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Output1|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Settings|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Settings|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Setting1|
This is the gtk builder interface to use for the GUI.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Setting1|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Setting2|
This color defines the default background.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Setting2|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Setting3|
This color defines the background color for target card.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Setting3|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Setting4|
This color defines the background color for selected card.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Setting4|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Setting5|
This stimulation is used as a basis for the flashes. For example, flashing the first card consists in sending this
exact stimulation code to the first input. Flashing the second card needs this stimulation code + 1 and so on.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Setting5|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Setting6|
This image correspond to the image display between 2 repetitions
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Setting6|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Setting7|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Setting7|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Setting8|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Setting8|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Setting9|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Setting9|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Setting10|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Setting10|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Setting11|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Setting11|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Setting12|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Setting12|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Setting13|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Setting13|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Setting14|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Setting14|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Setting15|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Setting15|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Setting16|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Setting16|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Setting17|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Setting17|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Setting18|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Setting18|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Setting19|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Setting19|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Setting20|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Setting20|
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Setting21|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Setting21|
__________________________________________________________________
Online visualization settings
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_OnlineVisualizationSettings|
There are no online visualization settings for this box.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_OnlineVisualizationSettings|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Examples|
This box is used in the <em>P300 Identifier card</em> BCI. Please see this
scenario in the sample <em>openvibe-scenarios</em>.
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300IdentifierCardVisualization_Miscellaneous|
* |OVP_DocEnd_BoxAlgorithm_P300IdentifierCardVisualization_Miscellaneous|
*/
@@ -0,0 +1,163 @@
/**
* \page BoxAlgorithm_P300MagicCardVisualization P300 Magic Card Visualization
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Description|
This box can be used with a P300 based paradigm to have a simple game. A collection of cards are presented to
the user. He chooses one card among all and focuses on this card. The application shows each card sequentially.
After a number of repetitions, the card that the user was focusing on is automatically found.
\image html Doc_BoxAlgorithm_P300MagicCardVisualization_Snapshot1.png "The P300 Magic Card Visualization showing all the cards"
\image html Doc_BoxAlgorithm_P300MagicCardVisualization_Snapshot2.png "The P300 Magic Card Visualization flashing one of the cards"
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Inputs|
This box has three inputs. The most important one is the first one, sequencing the which card to show to the user.
The two other inputs are optional and used for defining the target and the selected card.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Inputs|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Input1|
This input is used for sequencing the card display. It uses specific stimulations to know which
card should be shown (see \ref Doc_BoxAlgorithm_P300MagicCardVisualization_Setting_5)
The card display is switched off thanks to the \c OVTK_StimulationId_VisualStimulationStop stimulation
(this is automatically triggered by the \ref Doc_BoxAlgorithm_P300SpellerStimulator box).
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Input1|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Input2|
This input is used in order to define the target card the user should focus on. See
\ref Doc_BoxAlgorithm_P300MagicCardVisualization_Setting_5 to know what stimulation should be used.
The target card will be highlighted with a specific color so the user quickly notices it.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Input2|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Input3|
This input is used in order to define the selected card the user should focus on. See
\ref Doc_BoxAlgorithm_P300MagicCardVisualization_Setting_5 to know what stimulation should be used.
The selected card will be highlighted with a specific color so the user quickly notices it.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Input3|
__________________________________________________________________
Outputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Outputs|
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Outputs|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Output1|
This output is used to translate incoming stimulations depending if they are target or not.
The actual target is determined with the second input. As soon as the target is known, each flash
can be considered as a target flash or not. This can be later use for selecting evoked response
potentials against other responses.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Output1|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Settings|
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Settings|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Setting1|
This is the gtk builder interface to use for the GUI.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Setting1|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Setting2|
This color defines the default background.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Setting2|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Setting3|
This color defines the background color for target card.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Setting3|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Setting4|
This color defines the background color for selected card.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Setting4|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Setting5|
This stimulation is used as a basis for the flashes. For example, flashing the first card consists in sending this
exact stimulation code to the first input. Flashing the second card needs this stimulation code + 1 and so on.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Setting5|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Setting6|
Default background image for every card (the image displayed when the card is NOT flashed).
If this setting is empty, the background image for every card must be named "<i>cardname</i>-offscreen" (e.g. "01.png-offscreen").
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Setting6|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Setting7|
1st card. Cards are ordered from left to right, line after line.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Setting7|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Setting8|
2nd card. Cards are ordered from left to right, line after line.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Setting8|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Setting9|
3rd card. Cards are ordered from left to right, line after line.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Setting9|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Setting10|
4th card. Cards are ordered from left to right, line after line.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Setting10|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Setting11|
5th card. Cards are ordered from left to right, line after line.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Setting11|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Setting12|
6th card. Cards are ordered from left to right, line after line.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Setting12|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Setting13|
7th card. Cards are ordered from left to right, line after line.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Setting13|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Setting14|
8th card. Cards are ordered from left to right, line after line.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Setting14|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Setting15|
9th card. Cards are ordered from left to right, line after line.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Setting15|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Setting16|
10th card. Cards are ordered from left to right, line after line.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Setting16|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Setting17|
11th card. Cards are ordered from left to right, line after line.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Setting17|
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Setting18|
12th card. Cards are ordered from left to right, line after line.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Setting18|
__________________________________________________________________
Online visualization settings
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_OnlineVisualizationSettings|
There are no online visualization settings for this box.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_OnlineVisualizationSettings|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Examples|
This box is used in the <em>P300 magic card</em> BCI. Please see this
scenario in the sample <em>openvibe-scenarios</em>.
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300MagicCardVisualization_Miscellaneous|
* |OVP_DocEnd_BoxAlgorithm_P300MagicCardVisualization_Miscellaneous|
*/
@@ -0,0 +1,181 @@
/**
* \page BoxAlgorithm_P300SpellerVisualization P300 Speller Visualization
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Description|
This box can be used with the \ref Doc_BoxAlgorithm_P300SpellerStimulator box in order to
implement a P300 speller application. The visualization consists in a matrix of 6 lines and
columns containing 26 characters and 10 numbers. The lines and columns can be flashed sequentially
to cause an evoked potential in the user's brain activity. This evoked potential can be
detected and used to find which line and which column the user was focused on, thus resulting
in the ability to write text.
This box relies on a gtk builder interface that contains the actual letters & numbers. This glade
interface can be freely adpated if you need for example more than 6 lines or 6 columns, or
if you need something else than letters & words (e.g. words).
\image html Doc_BoxAlgorithm_P300SpellerVisualization_Snapshot.png "The P300 Speller Visualization in action"
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Inputs|
This box has four inputs. The most important one is the first one, sequencing the flashes.
The three other inputs are optional and used for defining the target and the selected line/columns.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Inputs|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Input1|
This input is used for sequencing the flashes. It uses specific stimulations to know which
line/column should be flashed (see \ref Doc_BoxAlgorithm_P300SpellerVisualization_Setting_2
and \ref Doc_BoxAlgorithm_P300SpellerVisualization_Setting_3). The flash is switched off thanks
to the \c OVTK_StimulationId_VisualStimulationStop stimulation (this is automatically triggered
by the \ref Doc_BoxAlgorithm_P300SpellerStimulator box).
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Input1|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Input2|
This input is used in order to define the target row/column the user should focus on. See
\ref Doc_BoxAlgorithm_P300SpellerVisualization_Setting_2 and
\ref Doc_BoxAlgorithm_P300SpellerVisualization_Setting_3 to know what stimulation should be used.
The target row/column will be highlighted with a specific color/size so the user quickly notices
the letter to focus on.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Input2|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Input3|
This input is used in order to define the selected row. See
\ref Doc_BoxAlgorithm_P300SpellerVisualization_Setting_2 and
\ref Doc_BoxAlgorithm_P300SpellerVisualization_Setting_3 to know what stimulation should be used.
The target row/column will be highlighted with a specific color/size so the user quickly notices
the letter that has been selected.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Input3|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Input4|
This input is used in order to define the selected column. See
\ref Doc_BoxAlgorithm_P300SpellerVisualization_Setting2 and
\ref Doc_BoxAlgorithm_P300SpellerVisualization_Setting3 to know what stimulation should be used.
The target row/column will be highlighted with a specific color/size so the user quickly notices
the letter that has been selected.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Input4|
__________________________________________________________________
Outputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Outputs|
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Outputs|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Output1|
DEPRECATED. This output should not be used anymore. See Miscellaneous Description below.
This output is used to translate incoming flash stimulations depending if they are target or not.
The actual target is determined with the second input. As soon as the target is known, each flash
can be considered as a target flash or not. This can be later use for selecting evoked response
potentials against other responses.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Output1|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Settings|
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Settings|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Setting1|
This is the gtk builder interface to use for the GUI. This file can be adapted depending on your needs, for example
if you want to replace the letters / numbers by e.g. words or symbols, or if you want to add more lines / columns.
However, the structure of the GUI is important (wee need some specific hierarchies to allow flash/selection coloring
to work). So please, respect this structure.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Setting1|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Setting2|
This stimulation is used as a basis for the row flashes. For example, flashing the first row consists in sending this
exact stimulation code to the first input. Flashing the second row needs this stimulation code + 1 and so on.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Setting2|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Setting3|
This stimulation is used as a basis for the column flashes. For example, flashing the first column consists in sending this
exact stimulation code to the first input. Flashing the second column needs this stimulation code + 1 and so on.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Setting3|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Setting4|
This color defines the flash background. It is not common in P300 spellers to have a changing background but this
probably enhances the response.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Setting4|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Setting5|
This color defines the flash foreground (the colors of the letters).
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Setting5|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Setting6|
This setting defines the size of the letter when the flash occurs. Consider this value as a scale factor with no specific unit.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Setting6|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Setting7|
This color defines the background when there is no flash.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Setting7|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Setting8|
This color defines the foreground when there is no flash.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Setting8|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Setting9|
This setting defines the size of the letter when there is no flash. Consider this value as a scale factor with no specific unit.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Setting9|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Setting10|
This color defines the background of the target letter.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Setting10|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Setting11|
This color defines the foreground of the target letter.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Setting11|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Setting12|
This setting defines the size of the target letter. Consider this value as a scale factor with no specific unit.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Setting12|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Setting13|
This color defines the background of the selected letter.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Setting13|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Setting14|
This color defines the foreground of the selected letter.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Setting14|
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Setting15|
This setting defines the size of the selected letter. Consider this value as a scale factor with no specific unit.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Setting15|
__________________________________________________________________
Online visualization settings
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_OnlineVisualizationSettings|
There are no online visualization settings for this box.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_OnlineVisualizationSettings|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Examples|
This box is used in the <em>P300 speller</em> BCI. Please see this
scenario in the sample <em>openvibe-scenarios</em>.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_P300SpellerVisualization_Miscellaneous|
The box relies on the TCP Tagging plugin of the OpenViBE Acquisition Server. A stimulation stream including target/nontarget
stimulations will be sent to the Acquisition Server directly after rendering. This 'software tagging' approach tries to
align the stimulations as well as possible with relation to the underlying EEG stream. It should be more time-accurate than using
the stimulations from the output socket of the box (deprecated). An even better option would be 'hardware tagging', i.e. to
send the stimulations to the amplifier. Hardware tagging is currently not supported due to a lack of a standard for such.
* |OVP_DocEnd_BoxAlgorithm_P300SpellerVisualization_Miscellaneous|
*/
@@ -0,0 +1,88 @@
/**
* \page BoxAlgorithm_PowerSpectrumDisplay Power Spectrum Display
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_PowerSpectrumDisplay_Description|
The power spectrum displays the amplitude of a signal in a set of frequency bands. One 2D graph is plotted per channel, where amplitudes are distributed on the vertical axis
and frequency bands on the horizontal axis. There is one spectrum per channel.
* |OVP_DocEnd_BoxAlgorithm_PowerSpectrumDisplay_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_PowerSpectrumDisplay_Inputs|
* |OVP_DocEnd_BoxAlgorithm_PowerSpectrumDisplay_Inputs|
* |OVP_DocBegin_BoxAlgorithm_PowerSpectrumDisplay_Input1|
Power spectrum of each channel to display.
* |OVP_DocEnd_BoxAlgorithm_PowerSpectrumDisplay_Input1|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_PowerSpectrumDisplay_Settings|
Offline settings include the minimum and maximum frequencies to display. If these frequencies lie outside the effective incoming frequency range, they will be clamped to it at Player
start time.
* |OVP_DocEnd_BoxAlgorithm_PowerSpectrumDisplay_Settings|
* |OVP_DocBegin_BoxAlgorithm_PowerSpectrumDisplay_Setting1|
Minimum frequency to display in power spectra
* |OVP_DocEnd_BoxAlgorithm_PowerSpectrumDisplay_Setting1|
* |OVP_DocBegin_BoxAlgorithm_PowerSpectrumDisplay_Setting2|
Maximum frequency to display in power spectra
* |OVP_DocEnd_BoxAlgorithm_PowerSpectrumDisplay_Setting2|
__________________________________________________________________
Online visualization settings
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_PowerSpectrumDisplay_OnlineVisualizationSettings|
Online settings :
- Best Fit : clicking this button ensures the vertical scale is adapted to the sample values plotted on all channels.
- Best Fit per Channel : similar to the previous button, only this time the vertical scale is adapted on a per-channel basis.
- Left/Bottom Ruler : these buttons toggle amplitude values and frequency values on/off.
- Min/Max Frequency : the range of frequency bands that are drawn may be adjusted with these buttons.
- Select Channels : clicking this button pops up a dialog that allows to show/hide some of the channels.
\image html powerspectrumdisplay_toolbar.png "Power Spectrum toolbar."
* |OVP_DocEnd_BoxAlgorithm_PowerSpectrumDisplay_OnlineVisualizationSettings|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_PowerSpectrumDisplay_Examples|
* |OVP_DocEnd_BoxAlgorithm_PowerSpectrumDisplay_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_PowerSpectrumDisplay_Miscellaneous|
This example is based on the following scenario file : tutorials/visualization/sample_power_spectrum
Let's use a Sinus Oscillator to generate sinusoidal signals. A Signal Display box will be used in addition to a Power Spectrum box (both are found under '2D Visualization) to
visualize signals and their spectra at the same time.
The power spectrum plugin has one input connector of 'Spectrum' type. Indeed, signal information must be processed before being sent to this plugin,
so that amplitude values are computed for a set of frequency bands. These computations can be done using a Spectral Analysis filter (found under 'Signal Processing > Spectral
Analysis'), making sure 'Amplitude' computation is enable in its settings (see \ref Doc_SignalProcessing_SpectralAnalysis for more on this). However, results might not be satisfactory due to the small size of data chunks being processed by the Spectral Analysis plugin.
To feed the plugin more significant data, one can use the Time-Based Epoching
plugin to store data and send it only when it amounts to a given duration (see \ref Doc_SignalProcessing_Epoching to learn more about this box). One can insert an epoching
box right after a Sinus Oscillator, setting its epoch duration to e.g. 1s and epoch intervals to 0.0625s (1/16th of a second). This will ensure 1s-long chunks are sent 16 times
a second to the Spectral Analysis box.
Typical spectra of combinations of sinusoidal signals, as generated by a Sinus Oscillator box, should look like the following :
\image html powerspectrumdisplay_online.png "Time-based epoching for power spectra computation."
* |OVP_DocEnd_BoxAlgorithm_PowerSpectrumDisplay_Miscellaneous|
*/
@@ -0,0 +1,170 @@
/**
* \page BoxAlgorithm_SignalDisplay Signal display
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_SignalDisplay_Description|
This plugin displays incoming signals. It plots values on the vertical axis while the horizontal axis represents time.
To display your signal correctly and as smoothly as possible, you may need to configure this box. Please see below for examples.
* |OVP_DocEnd_BoxAlgorithm_SignalDisplay_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_SignalDisplay_Inputs|
* |OVP_DocEnd_BoxAlgorithm_SignalDisplay_Inputs|
* |OVP_DocBegin_BoxAlgorithm_SignalDisplay_Input1|
Data to display. Signal and Streamed Matrix types are supported.
* |OVP_DocEnd_BoxAlgorithm_SignalDisplay_Input1|
* |OVP_DocBegin_BoxAlgorithm_SignalDisplay_Input2|
Stimulations.
* |OVP_DocEnd_BoxAlgorithm_SignalDisplay_Input2|
* |OVP_DocBegin_BoxAlgorithm_SignalDisplay_Input3|
Measurement units of the data.
* |OVP_DocEnd_BoxAlgorithm_SignalDisplay_Input3|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_SignalDisplay_Settings|
* |OVP_DocEnd_BoxAlgorithm_SignalDisplay_Settings|
* |OVP_DocBegin_BoxAlgorithm_SignalDisplay_Setting1|
Type of display, can be either Scan mode or Scroll mode. In Scan mode, the new data arrives
from left to right and the displayed data does not move. In Scroll mode, the new data always
arrives on the right and all displayed data moves right to left.
* |OVP_DocEnd_BoxAlgorithm_SignalDisplay_Setting1|
* |OVP_DocBegin_BoxAlgorithm_SignalDisplay_Setting2|
Automatic vertical (y) scaling mode: Per channel, Global, or None.
* |OVP_DocEnd_BoxAlgorithm_SignalDisplay_Setting2|
* |OVP_DocBegin_BoxAlgorithm_SignalDisplay_Setting3|
How often the vertical scale is refreshed. Only used when automatic vertical scaling mode is not None.
* |OVP_DocEnd_BoxAlgorithm_SignalDisplay_Setting3|
* |OVP_DocBegin_BoxAlgorithm_SignalDisplay_Setting4|
Vertical (y) scale for each channel when automatic vertical scaling mode is None.
* |OVP_DocEnd_BoxAlgorithm_SignalDisplay_Setting4|
* |OVP_DocBegin_BoxAlgorithm_SignalDisplay_Setting5|
Vertical (y) offset for each channel when automatic vertical scaling mode is None.
* |OVP_DocEnd_BoxAlgorithm_SignalDisplay_Setting5|
* |OVP_DocBegin_BoxAlgorithm_SignalDisplay_Setting6|
Size of time window to display, in seconds.
* |OVP_DocEnd_BoxAlgorithm_SignalDisplay_Setting6|
* |OVP_DocBegin_BoxAlgorithm_SignalDisplay_Setting7|
Enable bottom (x) ruler?
* |OVP_DocEnd_BoxAlgorithm_SignalDisplay_Setting7|
* |OVP_DocBegin_BoxAlgorithm_SignalDisplay_Setting8|
Enable left (y, vertical) ruler?
* |OVP_DocEnd_BoxAlgorithm_SignalDisplay_Setting8|
* |OVP_DocBegin_BoxAlgorithm_SignalDisplay_Setting9|
Enable multiview? This mode displays several signals on top of each other. It is sometimes called a 'butterfly plot'.
* |OVP_DocEnd_BoxAlgorithm_SignalDisplay_Setting9|
__________________________________________________________________
Online visualization settings
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_SignalDisplay_OnlineVisualizationSettings|
By clicking the bar at the top of the window during runtime, the user gets access to the online
toolbar of the display. This allows settings of the box to be modified during playback.
Online settings :
The toolbar allows access to the following settings,
- Scan/scroll mode : this button switches the type of display (scan or scroll)
- Left/Bottom Ruler : these buttons toggle channel y and x legend (coordinate axes).
- Channel units : Show channel units. Requires meaningful data from the measurement units stream.
- Auto vertical scale : Change the vertical (y) scaling mode
- Vertical scale : Value when automatic scaling is not used
- Vertical offset : Value when automatic scaling is not used
- Time Scale : this setting adjusts the time span displayed, in seconds.
- Select Channels : Allows to show/hide some of the channels by checking/unchecking each channel.
- Multi-View : Allows to configure what channels should be plotted in an extra graph at the bottom of the Signal Display window. When no channels are selected (default) this extra graph is not displayed. To disable multiview, select 'None' in the channel list.
- Stimulation colors : Display stimulation name or identifier corresponding to the plotted colors.
- Information : This button displays information about the data (min/max values and so on).
\image html signaldisplay_toolbar.png "Signal Display toolbar"
* |OVP_DocEnd_BoxAlgorithm_SignalDisplay_OnlineVisualizationSettings|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_SignalDisplay_Examples|
To get some signals displayed right, changing the automatic y scaling may be useful. The provided scaling settings are
- Per channel (default) : Every channel will get centered and scaled separately. This should allow viewing arbitrary signals. This is suitable for unfiltered data which may have huge differences in scale and DC between channels.
- Global : All channels are put to the same scale which is the maximum of all the channels. This mode is suitable for filtered EEG and data which may have long-term trends but where all channels generally stay in the same range.
- None: User must specify global center and scale. Display is never automatically rescaled. This is suitable for filtered EEG data where the meaningful range is within known parameters and DC doesn't vary.
Note that the automatic scalers may include discontinuities in the plot when the scale changes (see below for 'Best practices').
Practical example :
OpenViBE has a tutorial scenario bundled : box-tutorials/signal-display.xml
An easy way to test this box consists of generating signals with the Sinus Oscillator plugin (found under 'Data generation' in Designer), and then connecting its signal output to the signal input of the Signal Display plugin.
\image html signaldisplay_online.png "Visualizing 2 channels using the Signal Display plugin."
* |OVP_DocEnd_BoxAlgorithm_SignalDisplay_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_SignalDisplay_Miscellaneous|
Best practices
All vertical scaling modes except 'None' will change the scaling dynamically
when the scale of the data appears to have changed. To avoid slow redraws,
the box simply changes the scale and leaves the old part of the signal
as it was, meaning that you may see a discontinuity in the signal, as
for the moment there are two or more different scales visible. The scale
change is marked by small red ticks at the top and bottom of the display.
For most situations, and to avoid the discontinuities of the automatic
scaling, the following is recommended:
- First filter the signals meaningfully to remove DC and slow trends by using the Temporal Filter box. For EEG, you can use a bandpass configuration with a range a such as [1,40] hz.
- Next, set the vertical scaling to 'None' and provide the display box a meaningful fixed scale corresponding to your signal. You can find out a suitable scale by activating 'Left Ruler' when the auto scale is active. Note that when the scale is given in the box parameters, the scale can be saved with the scenario.
Known issues and workarounds
The box supports only two data stream types: Matrix and Signal. Many OpenViBE
stream types derive from the Streamed Matrix type. In this case, you can
configure the box to have a Streamed Matrix input socket, and then connect the
derived stream type to that. Note that the data of the stream not contained in the
matrix will be ignored. In any case, you may be able to visualize something
meaningful. In the case of Feature Vector stream, you can try to use the
Matrix Transpose box on the feature stream first to turn the features into
channels.
Multiview: Multiview presents all the signals in the same space.
The different channels are not centered, so if they have large DC differences,
the view may not show anything meaningful. In this case, filter the signal first.
Scroll mode is known to be slow, notably on Windows. For faster scrolling display, use Linux.
* |OVP_DocEnd_BoxAlgorithm_SignalDisplay_Miscellaneous|
*/
@@ -0,0 +1,65 @@
/**
* \page BoxAlgorithm_Simple3DViewer Simple 3D viewer
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_Simple3DViewer_Description|
This plugin was developed for 3D testing purposes. This standalone box demonstrates some capabilities of the OpenViBE 3D API, and can help make sure a 3D context is available, or a 3D model behaves as expected.
This viewer creates an empty 3D scene by default. It's then up to the user to load 3D models and apply transformations to them, such as position/scale/color transformations.
* |OVP_DocEnd_BoxAlgorithm_Simple3DViewer_Description|
__________________________________________________________________
Online visualization settings
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_Simple3DViewer_OnlineVisualizationSettings|
Online options include :
- Create Object : opens a dialog to create an object.
- Delete Object : opens a dialog to delete an object.
- Set Position : opens a dialog to position an object.
- Set Scale : opens a dialog to scale an object.
- Set Color : opens a dialog to change the color of an object.
- View All : resets the camera position so that it encompasses the whole 3D scene, facing the +Z side of its bounding box
\image html simple3dviewer_toolbar.png "Simple 3D Viewer toolbar"
* |OVP_DocEnd_BoxAlgorithm_Simple3DViewer_OnlineVisualizationSettings|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_Simple3DViewer_Examples|
This example is based on the following scenario file : tutorials/visualization/sample_simple_3D_viewer
To start with, one should make sure the 3D context was initialised properly. This is done at startup time, and a log message should read "[INF] Created primary render window" at some point during application startup. In any case, loading the sample 3D viewer scenario and pressing Play should display an empty 3D window. If it doesn't, it probably means the 3D context could not be initialised in the first place.
The viewer allows to load and manipulate 3D objects. Since the rendering library used in OpenViBE is Ogre3D, objects must be stored in the proprietary format of this library which is the .mesh format. See the Ogre3D website for information about it. For now, one can test OpenViBE 3D rendering using the sample objects that come with the platform.
Press the Create Object button (situated in the plugin toolbar) : here one can load a 'standard' object (these are simple geometrical shapes such as spheres and cones) or any 'custom' object (one should then type in the name of the 3d object file to be loaded, omitting its extension). Let's load a sphere by typing in 'mysphere' in the object name field, then checking the 'standard' radio button and selecting 'sphere' in the drop-down box. Press OK. The camera might end up lying within the object that was just created. Press the 'View All' button to automatically reset the camera position so that it lies in front of the 3D scene. A sphere should now be visible.
To delete an object, one can press the Delete Object button and type in the name of the object to destroy.
Now let's move our object. Press the Set Position button, enter 'mysphere' as the object name and then some non-null coordinates to move the sphere. Press OK to see the results. Similarly, the object scale may be modified using the Set Scale button. Notice how the scale can be set independently for each axis. To apply a uniform scale to an object, one should enter the same scale for each axis.
Let's now change the object color. Type in the object name, and then select 'Set Material Color'. This will modify the material properties of the object, meaning all objects using this material will be affected by this change. Enter an RGB color to attribute to the diffuse color of the material (each component should remain in the [0, 1] range). Similarly, the transparency of an object may be changed using the Transparency field (0 corresponding to a totally opaque object and 1 totally transparent).
The Object color can also be changed by modifying the colors of its vertices. This may be done by selecting 'Set Vertex Color' in the Set Color dialog box. However, this requires objects to have special properties. Namely, the vertex buffers of the object must have the 'colors_diffuse' tag, which means each element (or vertex) has its own color in addition to a position and a normal.
Also, one can move the camera at any time using the mouse. Maintaining the left mouse button pressed and moving the mouse rotates the camera around the center of the scene. To recompute the center (e.g. whenever the scene contents have changed), press the 'View All' button. To zoom in and out of the scene, press the right mouse button and move the mouse up or down.
\image html simple3dviewer_online.png "Manipulating 3D objects using the Simple 3D Viewer plugin"
* |OVP_DocEnd_BoxAlgorithm_Simple3DViewer_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_Simple3DViewer_Miscellaneous|
* |OVP_DocEnd_BoxAlgorithm_Simple3DViewer_Miscellaneous|
*/
@@ -0,0 +1,101 @@
/**
* \page BoxAlgorithm_TimeFrequencyMapDisplay Time-frequency map display
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_TimeFrequencyMapDisplay_Description|
A Time-Frequency (TF) map displays power spectra of signals over time, making it possible to track changes in amplitudes over a given time span. To that end, it
uses a color scale to convert amplitudes to colors. This makes it possible to represent a single spectrum as a column of color-coded blocks. As time goes by, they
are shifted to the left of the graph to make room for more recent spectra. There is one map per channel.
Depending on the resolution of the map, a variable number of frequency bands are displayed per spectrum, or column of the map.
If the number of frequency bands equals the height of the map for a given channel, each frequency band is one pixel high. Smaller maps won't be able to display all
frequency bands, while in bigger maps, each frequency band will be allotted an area that is one pixel high or more.
Since a TF map displays a series of power spectra, input data should be preprocessed by a Spectral Analysis box, as is the case with the Power Spectrum plugin.
See \ref Doc_BoxAlgorithm_PowerSpectrumDisplay for an example, and \ref Doc_BoxAlgorithm_SpectralAnalysis for more information.
* |OVP_DocEnd_BoxAlgorithm_TimeFrequencyMapDisplay_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_TimeFrequencyMapDisplay_Inputs|
* |OVP_DocEnd_BoxAlgorithm_TimeFrequencyMapDisplay_Inputs|
* |OVP_DocBegin_BoxAlgorithm_TimeFrequencyMapDisplay_Input1|
Power spectrum of each channel to display.
* |OVP_DocEnd_BoxAlgorithm_TimeFrequencyMapDisplay_Input1|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_TimeFrequencyMapDisplay_Settings|
Online options include :
- Bottom Ruler : this button toggles time values on/off.
- Min/Max Frequency : the range of frequency bands that are drawn may be adjusted with these buttons.
- Time Scale : this setting adjusts the time span displayed by the plugin.
- Select Channels : clicking this button pops up a dialog that allows to show/hide some of the channels.
- Attenuation : this setting allows to gradually adapt color thresholds. Valid values are in the [0,1] interval.
\image html timefrequencymapdisplay_toolbar.png "Time Frequency Map toolbar."
* |OVP_DocEnd_BoxAlgorithm_TimeFrequencyMapDisplay_Settings|
* |OVP_DocBegin_BoxAlgorithm_TimeFrequencyMapDisplay_Setting1|
Size of time window to display.
* |OVP_DocEnd_BoxAlgorithm_TimeFrequencyMapDisplay_Setting1|
* |OVP_DocBegin_BoxAlgorithm_TimeFrequencyMapDisplay_Setting2|
Minimum frequency to display in time frequency maps.
* |OVP_DocEnd_BoxAlgorithm_TimeFrequencyMapDisplay_Setting2|
* |OVP_DocBegin_BoxAlgorithm_TimeFrequencyMapDisplay_Setting3|
Maximum frequency to display in time frequency maps.
* |OVP_DocEnd_BoxAlgorithm_TimeFrequencyMapDisplay_Setting3|
__________________________________________________________________
Online visualization settings
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_TimeFrequencyMapDisplay_OnlineVisualizationSettings|
* |OVP_DocEnd_BoxAlgorithm_TimeFrequencyMapDisplay_OnlineVisualizationSettings|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_TimeFrequencyMapDisplay_Examples|
Practical example :
This example is based on the following scenario file : tutorials/visualization/sample_time_frequency_map
To test this plugin, one can extend the \ref Doc_DataVisualization_2DVisualization_PowerSpectrum example by adding a Time-Frequency Map plugin. Since Sinus Oscillator
signals are made up of sinusoidal signals with frequencies in the [0-50Hz] range, one should make sure the minimum and maximum displayed frequencies settings of the
Power Spectrum and TF Map plugins match this range. Results should look like the following screenshot.
A few remarks :
- For now, there is no frequency scale displayed to the left of the maps. Frequencies are mapped from bottom to top for each channel.
- TF maps don't change much over time, which is logical since power spectra displayed by the Power Spectrum box are pretty much constant themselves. This translates
into (almost uninterrupted) horizontal lines in the TF maps.
- Finally, one can notice two dominant frequency bands in the power spectrum of each channel, where they stand out as high amplitude peaks. These bands translate into
dark horizontal lines in the TF maps.
\image html timefrequencymapdisplay_online.png "Power spectra and their "history" displayed over the last 10 seconds using the TF map plugin."
* |OVP_DocEnd_BoxAlgorithm_TimeFrequencyMapDisplay_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_TimeFrequencyMapDisplay_Miscellaneous|
* |OVP_DocEnd_BoxAlgorithm_TimeFrequencyMapDisplay_Miscellaneous|
*/
Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

@@ -0,0 +1,15 @@
<?xml version="1.0"?>
<interface>
<!-- interface-requires gtk+ 2.12 -->
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkWindow" id="main-window">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="default_width">400</property>
<property name="default_height">400</property>
<!--<property name="resizable">True</property> -->
<child>
<object class="GtkDrawingArea" id="plot-window">
</object>
</child>
</object>
</interface>
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,18 @@
<?xml version="1.0"?>
<interface>
<!-- interface-requires gtk+ 2.12 -->
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkWindow" id="DisplayCueImage">
<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">DispImage</property>
<property name="window_position">center</property>
<property name="default_width">600</property>
<property name="default_height">600</property>
<child>
<object class="GtkDrawingArea" id="DisplayCueImageDrawingArea">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,17 @@
<?xml version="1.0"?>
<!--Generated with glade3 3.2.0 on Thu May 24 09:59:23 2007 by brenier@monlinux.irisa.fr-->
<interface>
<object class="GtkWindow" id="GrazVisualizationWindow">
<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">Graz Visualization</property>
<property name="window_position">GTK_WIN_POS_CENTER</property>
<property name="default_width">600</property>
<property name="default_height">600</property>
<child>
<object class="GtkDrawingArea" id="GrazVisualizationDrawingArea">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,124 @@
<?xml version="1.0"?>
<interface>
<!-- interface-requires gtk+ 2.6 -->
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkAdjustment" id="adjustment1">
<property name="value">85</property>
<property name="upper">100</property>
<property name="step_increment">0.10000000000000001</property>
<property name="page_increment">2</property>
</object>
<object class="GtkWindow" id="level-measure">
<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="level-measure-table">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="border_width">8</property>
<property name="column_spacing">8</property>
<property name="row_spacing">8</property>
<property name="homogeneous">True</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
<object class="GtkWindow" id="level-measure-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">Level measure</property>
<property name="type_hint">dialog</property>
<child>
<object class="GtkToolbar" id="level-measure-settings">
<property name="visible">True</property>
<property name="show_arrow">False</property>
<child>
<object class="GtkToolButton" id="reset-score-button">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">reset scores</property>
<property name="stock_id">gtk-refresh</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolItem" id="threshold-item">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<object class="GtkVBox" id="vbox">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<object class="GtkSpinButton" id="threshold-spinbutton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="adjustment">adjustment1</property>
<property name="digits">2</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="threshold-label">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">threshold</property>
<property name="justify">center</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkSeparatorToolItem" id="separator">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="show-percentages-toggle-button">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">percentages</property>
<property name="stock_id">gtk-justify-center</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkWindow" id="dummy_window">
<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"> Level measure</property>
<child>
<object class="GtkProgressBar" id="progress-bar-level">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="show_text">True</property>
<property name="text_xalign">0</property>
<property name="text_yalign">0</property>
<property name="fraction">0.20000000298023224</property>
<property name="orientation">bottom-to-top</property>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,80 @@
<?xml version="1.0"?>
<interface>
<!-- interface-requires gtk+ 2.6 -->
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkWindow" id="matrix-display">
<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="matrix-display-table">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="border_width">8</property>
<property name="column_spacing">8</property>
<property name="row_spacing">8</property>
<property name="homogeneous">True</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
<object class="GtkWindow" id="matrix-display-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">Matrix Display</property>
<property name="type_hint">dialog</property>
<child>
<object class="GtkToolbar" id="matrix-display-settings">
<property name="visible">True</property>
<property name="show_arrow">False</property>
<child>
<object class="GtkToggleToolButton" id="show-values-toggle-button">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">show values</property>
<property name="stock_id">gtk-refresh</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkSeparatorToolItem" id="separator">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="show-colors-toggle-button">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">show colors</property>
<property name="stock_id">gtk-select-color</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkWindow" id="dummy-window">
<child>
<object class="GtkEventBox" id="matrix-value-eventbox">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="matrix-value-label">
<property name="visible">True</property>
<property name="label" translatable="yes">X</property>
</object>
</child>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,449 @@
<?xml version="1.0"?>
<interface>
<requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkAdjustment" id="adjustment1">
<property name="upper">100</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkAdjustment" id="adjustment2">
<property name="upper">100</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkWindow" id="PowerSpectrumDisplayMainWindow">
<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">Power spectrum display</property>
<property name="default_width">800</property>
<property name="default_height">400</property>
<child>
<object class="GtkScrolledWindow" id="PowerSpectrumDisplayScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">never</property>
<child>
<object class="GtkViewport" id="PowerSpectrumDisplayViewport">
<property name="visible">True</property>
<child>
<object class="GtkVBox" id="PowerSpectrumDisplayVBox">
<property name="visible">True</property>
<child>
<object class="GtkScrolledWindow" id="PowerSpectrumDisplayChannelsScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_STRUCTURE_MASK</property>
<property name="hscrollbar_policy">never</property>
<property name="vscrollbar_policy">automatic</property>
<property name="window_placement">top-right</property>
<property name="window_placement_set">True</property>
<child>
<object class="GtkViewport" id="PowerSpectrumDisplayChannelsViewport">
<property name="visible">True</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkTable" id="PowerSpectrumDisplayMainTable">
<property name="visible">True</property>
<property name="n_columns">3</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkHBox" id="PowerSpectrumDisplayBottomBox">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="PowerSpectrumDisplayBottomBoxLabel1">
<property name="visible">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="PowerSpectrumDisplayBottomBoxLabel2">
<property name="visible">True</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
<object class="GtkDialog" id="PowerSpectrumDisplayChannelSelectDialog">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="border_width">5</property>
<property name="title" translatable="yes">Select Channels</property>
<property name="window_position">mouse</property>
<property name="type_hint">dialog</property>
<property name="has_separator">False</property>
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox3">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="spacing">2</property>
<child>
<object class="GtkScrolledWindow" id="PowerSpectrumDisplayChannelSelectScrolledWindow">
<property name="width_request">320</property>
<property name="height_request">240</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<child>
<object class="GtkViewport" id="PowerSpectrumDisplayChannelSelectViewport">
<property name="visible">True</property>
<property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">queue</property>
<child>
<object class="GtkTreeView" id="PowerSpectrumDisplayChannelSelectList">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="rules_hint">True</property>
<property name="search_column">0</property>
<property name="rubber_banding">True</property>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child internal-child="action_area">
<object class="GtkHButtonBox" id="dialog-action_area3">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="layout_style">end</property>
<child>
<object class="GtkButton" id="PowerSpectrumDisplayChannelSelectApplyButton">
<property name="label" translatable="yes">Apply</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="PowerSpectrumDisplayChannelSelectCancelButton">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="pack_type">end</property>
<property name="position">0</property>
</packing>
</child>
</object>
</child>
<action-widgets>
<action-widget response="0">PowerSpectrumDisplayChannelSelectApplyButton</action-widget>
<action-widget response="0">PowerSpectrumDisplayChannelSelectCancelButton</action-widget>
</action-widgets>
</object>
<object class="GtkWindow" id="Toolbar">
<property name="title" translatable="yes">Power Spectrum Toolbar</property>
<property name="resizable">False</property>
<property name="window_position">mouse</property>
<property name="type_hint">dialog</property>
<child>
<object class="GtkToolbar" id="PowerSpectrumDisplayToolbar">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="toolbar_style">both</property>
<property name="show_arrow">False</property>
<child>
<object class="GtkToggleToolButton" id="PowerSpectrumDisplayBestFitButton">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="visible_horizontal">False</property>
<property name="visible_vertical">False</property>
<property name="label">Best fit</property>
<property name="stock_id">gtk-zoom-fit</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="PowerSpectrumDisplayBestFitPerChannelButton">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="visible_horizontal">False</property>
<property name="visible_vertical">False</property>
<property name="label">Best Fit per Channel</property>
<property name="stock_id">gtk-zoom-fit</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkSeparatorToolItem" id="separatortoolitem1">
<property name="visible">True</property>
<property name="visible_horizontal">False</property>
<property name="visible_vertical">False</property>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="PowerSpectrumDisplayToggleLeftRulerButton">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label">Left Ruler</property>
<property name="stock_id">gtk-goto-first</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="PowerSpectrumDisplayToggleBottomRulerButton">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label">Bottom Ruler</property>
<property name="stock_id">gtk-goto-bottom</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkSeparatorToolItem" id="separatortoolitem2">
<property name="visible">True</property>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkToolItem" id="PowerSpectrumDisplayVerticalScaleItem">
<property name="visible">True</property>
<child>
<object class="GtkVBox" id="vbox3">
<property name="visible">True</property>
<child>
<object class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<child>
<object class="GtkRadioButton" id="PowerSpectrumDisplayAutoVerticalScaleButton">
<property name="label" translatable="yes">Best Fit</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkHBox" id="hbox2">
<property name="visible">True</property>
<child>
<object class="GtkRadioButton" id="PowerSpectrumDisplayCustomVerticalScaleButton">
<property name="label" translatable="yes">Custom</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">PowerSpectrumDisplayAutoVerticalScaleButton</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="PowerSpectrumDisplayCustomVerticalScaleEntry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="width_chars">10</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="PowerSpectrumDisplayVerticalScaleLabel">
<property name="visible">True</property>
<property name="label" translatable="yes">Vertical Scale</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkSeparatorToolItem" id="toolbutton4">
<property name="visible">True</property>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkToolItem" id="PowerSpectrumDisplayMinFrequencyItem">
<property name="visible">True</property>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="border_width">1</property>
<child>
<object class="GtkSpinButton" id="PowerSpectrumDisplayMinFrequencyButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">adjustment1</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="PowerSpectrumDisplayMinFrequencyLabel">
<property name="visible">True</property>
<property name="label" translatable="yes">Min Frequency</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkToolItem" id="PowerSpectrumDisplayMaxFrequencyItem">
<property name="visible">True</property>
<child>
<object class="GtkVBox" id="vbox2">
<property name="visible">True</property>
<property name="border_width">1</property>
<child>
<object class="GtkSpinButton" id="PowerSpectrumDisplayMaxFrequencyButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">adjustment2</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="PowerSpectrumDisplayMaxFrequencyLabel">
<property name="visible">True</property>
<property name="label" translatable="yes">Max Frequency</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkSeparatorToolItem" id="toolbutton3">
<property name="visible">True</property>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="PowerSpectrumDisplaySelectChannelsButton">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label">Select Channels</property>
<property name="stock_id">gtk-index</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,701 @@
<?xml version="1.0"?>
<interface>
<!-- interface-requires gtk+ 2.12 -->
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkDialog" id="SetPositionDialog">
<property name="border_width">5</property>
<property name="title" translatable="yes">Set object position</property>
<property name="type_hint">normal</property>
<property name="has_separator">False</property>
<child internal-child="vbox">
<object class="GtkVBox" id="SetPositionVBox">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
<property name="spacing">2</property>
<child>
<object class="GtkTable" id="SetPositionTable">
<property name="visible">True</property>
<property name="n_rows">4</property>
<property name="n_columns">2</property>
<child>
<object class="GtkEntry" id="PositionObjectName">
<property name="visible">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="object">
<property name="visible">True</property>
<property name="label" translatable="yes">Object name</property>
</object>
</child>
<child>
<object class="GtkEntry" id="XPositionEntry">
<property name="visible">True</property>
<property name="text" translatable="yes">0</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>
</packing>
</child>
<child>
<object class="GtkLabel" id="x">
<property name="visible">True</property>
<property name="label" translatable="yes">x</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="YPositionEntry">
<property name="visible">True</property>
<property name="text" translatable="yes">0</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="y">
<property name="visible">True</property>
<property name="label" translatable="yes">y</property>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="ZPositionEntry">
<property name="visible">True</property>
<property name="text" translatable="yes">0</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="z">
<property name="visible">True</property>
<property name="label" translatable="yes">z</property>
</object>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
</packing>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child internal-child="action_area">
<object class="GtkHButtonBox" id="dialog-action_area1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
<property name="layout_style">end</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="pack_type">end</property>
<property name="position">0</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkDialog" id="CreateObjectDialog">
<property name="border_width">5</property>
<property name="title" translatable="yes">Create a new object</property>
<property name="type_hint">normal</property>
<property name="has_separator">False</property>
<child internal-child="vbox">
<object class="GtkVBox" id="CreateObjectVBox">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
<property name="spacing">2</property>
<child>
<object class="GtkTable" id="CreateObjectTable">
<property name="visible">True</property>
<property name="n_rows">2</property>
<property name="n_columns">2</property>
<child>
<object class="GtkLabel" id="object1">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<property name="label" translatable="yes">Object name</property>
</object>
<packing>
<property name="y_options">GTK_EXPAND</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="CreateObjectName">
<property name="visible">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
<child>
<object class="GtkTable" id="table1">
<property name="visible">True</property>
<property name="n_rows">3</property>
<property name="n_columns">2</property>
<child>
<object class="GtkTable" id="StandardObjectComboBoxTable">
<property name="visible">True</property>
<child>
<placeholder/>
</child>
</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>
</packing>
</child>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="label" translatable="yes">Object type</property>
</object>
<packing>
<property name="right_attach">2</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="CreateObjectStandard">
<property name="label" translatable="yes">Standard</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="CreateObjectCustom">
<property name="label" translatable="yes">Custom</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
<property name="group">CreateObjectStandard</property>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="CustomObjectEntry">
<property name="visible">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
</object>
<packing>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child internal-child="action_area">
<object class="GtkHButtonBox" id="dialog-action_area2">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
<property name="layout_style">end</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="pack_type">end</property>
<property name="position">0</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkDialog" id="SetScaleDialog">
<property name="border_width">5</property>
<property name="title" translatable="yes">Set object scale</property>
<property name="type_hint">normal</property>
<property name="has_separator">False</property>
<child internal-child="vbox">
<object class="GtkVBox" id="SetScaleVBox">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
<property name="spacing">2</property>
<child>
<object class="GtkTable" id="SetScaleTable">
<property name="visible">True</property>
<property name="n_rows">4</property>
<property name="n_columns">2</property>
<child>
<object class="GtkLabel" id="z1">
<property name="visible">True</property>
<property name="label" translatable="yes">Scale z</property>
</object>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="ZScaleEntry">
<property name="visible">True</property>
<property name="text" translatable="yes">1</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="y1">
<property name="visible">True</property>
<property name="label" translatable="yes">Scale y</property>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="YScaleEntry">
<property name="visible">True</property>
<property name="text" translatable="yes">1</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="x1">
<property name="visible">True</property>
<property name="label" translatable="yes">Scale x</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="XScaleEntry">
<property name="visible">True</property>
<property name="text" translatable="yes">1</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>
</packing>
</child>
<child>
<object class="GtkLabel" id="object2">
<property name="visible">True</property>
<property name="label" translatable="yes">Object name</property>
</object>
</child>
<child>
<object class="GtkEntry" id="ScaleObjectName">
<property name="visible">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child internal-child="action_area">
<object class="GtkHButtonBox" id="dialog-action_area3">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
<property name="layout_style">end</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="pack_type">end</property>
<property name="position">0</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkDialog" id="SetColorDialog">
<property name="border_width">5</property>
<property name="title" translatable="yes">Set object color</property>
<property name="type_hint">normal</property>
<property name="has_separator">False</property>
<child internal-child="vbox">
<object class="GtkVBox" id="SetColorVBox">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
<property name="spacing">2</property>
<child>
<object class="GtkTable" id="SetColorTable">
<property name="visible">True</property>
<property name="n_rows">6</property>
<property name="n_columns">2</property>
<child>
<object class="GtkRadioButton" id="SetVertexColorRadioButton">
<property name="label" translatable="yes">Set Vertex Color</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
<property name="group">SetMaterialColorRadioButton</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>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="SetMaterialColorRadioButton">
<property name="label" translatable="yes">Set Material Color</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="TransparencyEntry">
<property name="visible">True</property>
<property name="text" translatable="yes">0</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="label" translatable="yes">Transparency (0 to 1)</property>
</object>
<packing>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="ColorObjectName">
<property name="visible">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="object3">
<property name="visible">True</property>
<property name="label" translatable="yes">Object name</property>
</object>
</child>
<child>
<object class="GtkEntry" id="RedEntry">
<property name="visible">True</property>
<property name="text" translatable="yes">1</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="1">
<property name="visible">True</property>
<property name="label" translatable="yes">Red (0 to 1)</property>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="GreenEntry">
<property name="visible">True</property>
<property name="text" translatable="yes">1</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="y2">
<property name="visible">True</property>
<property name="label" translatable="yes">Green (0 to 1)</property>
</object>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="BlueEntry">
<property name="visible">True</property>
<property name="text" translatable="yes">1</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="z2">
<property name="visible">True</property>
<property name="label" translatable="yes">Blue (0 to 1)</property>
</object>
<packing>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
</packing>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child internal-child="action_area">
<object class="GtkHButtonBox" id="dialog-action_area4">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
<property name="layout_style">end</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="pack_type">end</property>
<property name="position">0</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkDialog" id="DeleteObjectDialog">
<property name="border_width">5</property>
<property name="title" translatable="yes">Delete an object</property>
<property name="type_hint">normal</property>
<property name="has_separator">False</property>
<child internal-child="vbox">
<object class="GtkVBox" id="DeleteObjectVBox">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
<property name="spacing">2</property>
<child>
<object class="GtkTable" id="DeleteObjectTable">
<property name="visible">True</property>
<property name="n_columns">2</property>
<child>
<object class="GtkEntry" id="DeleteObjectName">
<property name="visible">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="deleteObjectLabel">
<property name="visible">True</property>
<property name="label" translatable="yes">Object name</property>
</object>
<packing>
<property name="y_options">GTK_EXPAND</property>
</packing>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child internal-child="action_area">
<object class="GtkHButtonBox" id="dialog-action_area5">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
<property name="layout_style">end</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="pack_type">end</property>
<property name="position">0</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkWindow" id="Toolbar">
<property name="title" translatable="yes">Simple 3D Viewer Toolbar</property>
<property name="resizable">False</property>
<property name="type_hint">dialog</property>
<child>
<object class="GtkToolbar" id="DisplayToolbar">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="toolbar_style">both</property>
<property name="show_arrow">False</property>
<child>
<object class="GtkToolButton" id="CreateObject">
<property name="visible">True</property>
<property name="label">Create Object</property>
<property name="stock_id">gtk-apply</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="DeleteObject">
<property name="visible">True</property>
<property name="label">Delete Object</property>
<property name="stock_id">gtk-cancel</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="SetPosition">
<property name="visible">True</property>
<property name="label">Set Position</property>
<property name="stock_id">gtk-fullscreen</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="SetScale">
<property name="visible">True</property>
<property name="label">Set Scale</property>
<property name="stock_id">gtk-zoom-fit</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="SetColor">
<property name="visible">True</property>
<property name="label">Set Color</property>
<property name="stock_id">gtk-select-color</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkSeparatorToolItem" id="separatortoolitem1">
<property name="visible">True</property>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="RepositionCamera">
<property name="visible">True</property>
<property name="label">View All</property>
<property name="stock_id">gtk-home</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,419 @@
<?xml version="1.0"?>
<interface>
<requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkAdjustment" id="adjustment1">
<property name="upper">100</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkAdjustment" id="adjustment2">
<property name="upper">100</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkAdjustment" id="adjustment3">
<property name="value">10</property>
<property name="upper">9999999999</property>
<property name="step_increment">1</property>
<property name="page_increment">100</property>
</object>
<object class="GtkAdjustment" id="adjustment4">
<property name="value">0.90000000000000002</property>
<property name="upper">1</property>
<property name="step_increment">0.01</property>
<property name="page_increment">0.10000000000000001</property>
</object>
<object class="GtkWindow" id="TimeFrequencyMapDisplayMainWindow">
<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">Time frequency display</property>
<property name="default_width">800</property>
<property name="default_height">400</property>
<child>
<object class="GtkScrolledWindow" id="TimeFrequencyMapDisplayScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">never</property>
<child>
<object class="GtkViewport" id="TimeFrequencyMapDisplayViewport">
<property name="visible">True</property>
<property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<object class="GtkVBox" id="TimeFrequencyMapDisplayVBox">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<object class="GtkScrolledWindow" id="TimeFrequencyMapDisplayChannelsScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="hscrollbar_policy">never</property>
<property name="vscrollbar_policy">automatic</property>
<property name="window_placement">top-right</property>
<property name="window_placement_set">True</property>
<child>
<object class="GtkViewport" id="TimeFrequencyMapDisplayChannelsViewport">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkTable" id="TimeFrequencyMapDisplayMainTable">
<property name="visible">True</property>
<property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="n_columns">2</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkHBox" id="TimeFrequencyMapDisplayBottomBox">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<object class="GtkLabel" id="TimeFrequencyMapDisplayBottomBoxLabel1">
<property name="visible">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="TimeFrequencyMapDisplayBottomBoxLabel2">
<property name="visible">True</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
<object class="GtkDialog" id="TimeFrequencyMapDisplayChannelSelectDialog">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="border_width">5</property>
<property name="title" translatable="yes">Select Channels</property>
<property name="window_position">mouse</property>
<property name="type_hint">dialog</property>
<property name="has_separator">False</property>
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox3">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="spacing">2</property>
<child>
<object class="GtkScrolledWindow" id="TimeFrequencyMapDisplayChannelSelectScrolledWindow">
<property name="width_request">320</property>
<property name="height_request">240</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<child>
<object class="GtkViewport" id="TimeFrequencyMapDisplayChannelSelectViewport">
<property name="visible">True</property>
<property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">queue</property>
<child>
<object class="GtkTreeView" id="TimeFrequencyMapDisplayChannelSelectList">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="rules_hint">True</property>
<property name="search_column">0</property>
<property name="rubber_banding">True</property>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child internal-child="action_area">
<object class="GtkHButtonBox" id="dialog-action_area3">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="layout_style">end</property>
<child>
<object class="GtkButton" id="TimeFrequencyMapDisplayChannelSelectApplyButton">
<property name="label" translatable="yes">Apply</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="TimeFrequencyMapDisplayChannelSelectCancelButton">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="pack_type">end</property>
<property name="position">0</property>
</packing>
</child>
</object>
</child>
<action-widgets>
<action-widget response="0">TimeFrequencyMapDisplayChannelSelectApplyButton</action-widget>
<action-widget response="0">TimeFrequencyMapDisplayChannelSelectCancelButton</action-widget>
</action-widgets>
</object>
<object class="GtkWindow" id="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">Time-Frequency Map Toolbar</property>
<property name="resizable">False</property>
<property name="window_position">mouse</property>
<property name="type_hint">dialog</property>
<child>
<object class="GtkToolbar" id="TimeFrequencyMapDisplayToolbar">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="toolbar_style">both</property>
<property name="show_arrow">False</property>
<child>
<object class="GtkToggleToolButton" id="TimeFrequencyMapDisplayToggleLeftRulerButton">
<property name="visible">True</property>
<property name="label" translatable="yes">Left Ruler</property>
<property name="stock_id">gtk-goto-first</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="TimeFrequencyMapDisplayToggleBottomRulerButton">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label">Bottom Ruler</property>
<property name="stock_id">gtk-goto-bottom</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkSeparatorToolItem" id="toolbutton1">
<property name="visible">True</property>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkToolItem" id="TimeFrequencyMapDisplayMinFrequencyItem">
<property name="visible">True</property>
<child>
<object class="GtkVBox" id="vbox3">
<property name="visible">True</property>
<property name="border_width">1</property>
<child>
<object class="GtkSpinButton" id="TimeFrequencyMapDisplayMinFrequencyButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">adjustment1</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="TimeFrequencyMapDisplayMinFrequencyLabel">
<property name="visible">True</property>
<property name="label" translatable="yes">Min Frequency</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkToolItem" id="TimeFrequencyMapDisplayMaxFrequencyItem">
<property name="visible">True</property>
<child>
<object class="GtkVBox" id="vbox4">
<property name="visible">True</property>
<property name="border_width">1</property>
<child>
<object class="GtkSpinButton" id="TimeFrequencyMapDisplayMaxFrequencyButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">adjustment2</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="TimeFrequencyMapDisplayMaxFrequencyLabel">
<property name="visible">True</property>
<property name="label" translatable="yes">Max Frequency</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkSeparatorToolItem" id="toolbutton4">
<property name="visible">True</property>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkToolItem" id="TimeFrequencyMapDisplayTimeScaleItem">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<object class="GtkSpinButton" id="TimeFrequencyMapDisplayTimeScaleButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="adjustment">adjustment3</property>
<property name="climb_rate">0.0099999997764825821</property>
<property name="digits">3</property>
<property name="snap_to_ticks">True</property>
<property name="numeric">True</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="TimeFrequencyMapDisplayTimeScaleLabel">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Time Scale</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TimeFrequencyMapDisplayChannelSelectButton">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label">Select Channels</property>
<property name="stock_id">gtk-index</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolItem" id="TimeFrequencyMapDisplayMinMaxAttenuationItem">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<object class="GtkVBox" id="vbox2">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<object class="GtkSpinButton" id="TimeFrequencyMapDisplayMinMaxAttenuationButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="adjustment">adjustment4</property>
<property name="climb_rate">0.05000000074505806</property>
<property name="digits">3</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="TimeFrequencyMapDisplayMinMaxAttenuationLabel">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Attenuation</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,208 @@
<?xml version="1.0"?>
<interface>
<!-- interface-requires gtk+ 2.12 -->
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkAdjustment" id="adjustment1">
<property name="upper">2</property>
<property name="step_increment">0.10000000000000001</property>
<property name="page_increment">0.5</property>
<property name="page_size">10</property>
</object>
<object class="GtkWindow" id="Toolbar">
<property name="title" translatable="yes">2D Topographic Map Toolbar</property>
<property name="resizable">False</property>
<property name="window_position">mouse</property>
<property name="type_hint">dialog</property>
<child>
<object class="GtkToolbar" id="DisplayToolbar">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="toolbar_style">both</property>
<property name="show_arrow">False</property>
<child>
<object class="GtkRadioToolButton" id="RadialProjection">
<property name="visible">True</property>
<property name="label" translatable="yes">Radial Projection</property>
<property name="stock_id">gtk-convert</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkRadioToolButton" id="AxialProjection">
<property name="visible">True</property>
<property name="label" translatable="yes">Axial Projection</property>
<property name="stock_id">gtk-convert</property>
<property name="group">RadialProjection</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkSeparatorToolItem" id="separator">
<property name="visible">True</property>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkRadioToolButton" id="MapPotentials">
<property name="visible">True</property>
<property name="label" translatable="yes">Map Potentials</property>
<property name="stock_id">gtk-preferences</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkRadioToolButton" id="MapCurrents">
<property name="visible">True</property>
<property name="label" translatable="yes">Map Currents</property>
<property name="stock_id">gtk-preferences</property>
<property name="group">MapPotentials</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkSeparatorToolItem" id="separator1">
<property name="visible">True</property>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="ToggleElectrodes">
<property name="visible">True</property>
<property name="label" translatable="yes">Toggle Electrodes</property>
<property name="stock_id">gtk-info</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkSeparatorToolItem" id="separator2">
<property name="visible">True</property>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkRadioToolButton" id="TopView">
<property name="visible">True</property>
<property name="label" translatable="yes">Top View</property>
<property name="stock_id">gtk-orientation-portrait</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkRadioToolButton" id="LeftView">
<property name="visible">True</property>
<property name="label" translatable="yes">Left View</property>
<property name="stock_id">gtk-orientation-portrait</property>
<property name="group">TopView</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkRadioToolButton" id="RightView">
<property name="visible">True</property>
<property name="label" translatable="yes">Right View</property>
<property name="stock_id">gtk-orientation-portrait</property>
<property name="group">TopView</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkRadioToolButton" id="BackView">
<property name="visible">True</property>
<property name="label" translatable="yes">Back View</property>
<property name="stock_id">gtk-orientation-portrait</property>
<property name="group">TopView</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkSeparatorToolItem" id="sep">
<property name="visible">True</property>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkToolItem" id="toolbutton2">
<property name="visible">True</property>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<child>
<object class="GtkHScale" id="DelayScale">
<property name="width_request">100</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">adjustment1</property>
<property name="lower_stepper_sensitivity">on</property>
<property name="upper_stepper_sensitivity">on</property>
<property name="restrict_to_fill_level">False</property>
<property name="fill_level">0</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="label" translatable="yes">Delay (s)</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkWindow" id="Window">
<child>
<object class="GtkDrawingArea" id="TopographicMap2DDrawingArea">
<property name="visible">True</property>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,109 @@
<?xml version="1.0"?>
<interface>
<!-- interface-requires gtk+ 2.12 -->
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkAdjustment" id="adjustment1">
<property name="upper">2</property>
<property name="step_increment">0.10000000000000001</property>
<property name="page_increment">0.5</property>
<property name="page_size">10</property>
</object>
<object class="GtkWindow" id="Toolbar">
<property name="title" translatable="yes">3D Topographic Map Toolbar</property>
<property name="resizable">False</property>
<property name="window_position">mouse</property>
<property name="type_hint">dialog</property>
<child>
<object class="GtkToolbar" id="DisplayToolbar">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="toolbar_style">both</property>
<property name="show_arrow">False</property>
<child>
<object class="GtkRadioToolButton" id="MapPotentials">
<property name="visible">True</property>
<property name="label" translatable="yes">Map Potentials</property>
<property name="stock_id">gtk-preferences</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkRadioToolButton" id="MapCurrents">
<property name="visible">True</property>
<property name="label" translatable="yes">Map Currents</property>
<property name="stock_id">gtk-preferences</property>
<property name="group">MapPotentials</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkSeparatorToolItem" id="sep">
<property name="visible">True</property>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="ToggleElectrodes">
<property name="visible">True</property>
<property name="label" translatable="yes">Toggle Electrodes</property>
<property name="stock_id">gtk-info</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkSeparatorToolItem" id="toolbutton1">
<property name="visible">True</property>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkToolItem" id="toolbutton3">
<property name="visible">True</property>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<child>
<object class="GtkHScale" id="DelayScale">
<property name="width_request">100</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">adjustment1</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="label" translatable="yes">Delay (s)</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,153 @@
<?xml version="1.0"?>
<interface>
<!-- interface-requires gtk+ 2.12 -->
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkWindow" id="p300-Identifier-card-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 Identifier</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="use_underline">True</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="use_underline">True</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>
<object class="GtkWindow" id="p300-Identifier-card">
<child>
<object class="GtkEventBox" id="p300-Identifier-card-main">
<property name="visible">True</property>
<child>
<object class="GtkTable" id="p300-Identifier-card-table">
<property name="visible">True</property>
<property name="border_width">16</property>
<property name="n_rows">3</property>
<property name="n_columns">3</property>
<property name="column_spacing">16</property>
<property name="row_spacing">16</property>
<child>
<object class="GtkLabel" id="labelTarget">
<property name="visible">True</property>
<property name="label" translatable="yes" context="yes">&lt;span weight="bold" size="xx-large" color="white"&gt;Target&lt;/span&gt;</property>
<property name="use_markup">True</property>
</object>
</child>
<child>
<object class="GtkLabel" id="labelResult">
<property name="visible">True</property>
<property name="label" translatable="yes" context="yes">&lt;span weight="bold" size="xx-large" color="white"&gt;Selected&lt;/span&gt;</property>
<property name="use_markup">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox3">
<property name="visible">True</property>
<child>
<object class="GtkAspectFrame" id="aspectframe3">
<property name="visible">True</property>
<property name="border_width">8</property>
<property name="label_xalign">0</property>
<child>
<placeholder/>
</child>
</object>
</child>
</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>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox2">
<property name="visible">True</property>
<child>
<object class="GtkAspectFrame" id="aspectframe2">
<property name="width_request">384</property>
<property name="height_request">384</property>
<property name="visible">True</property>
<property name="border_width">8</property>
<property name="label_xalign">0</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox1">
<property name="visible">True</property>
<child>
<object class="GtkAspectFrame" id="aspectframe1">
<property name="visible">True</property>
<property name="border_width">8</property>
<property name="label_xalign">0</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
</child>
</object>
</interface>
@@ -0,0 +1,319 @@
<?xml version="1.0"?>
<interface>
<!-- interface-requires gtk+ 2.12 -->
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkWindow" id="p300-magic-card-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 Speller</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>
<object class="GtkWindow" id="p300-magic-card">
<child>
<object class="GtkEventBox" id="p300-magic-card-main">
<property name="visible">True</property>
<child>
<object class="GtkTable" id="p300-magic-card-table">
<property name="visible">True</property>
<property name="border_width">16</property>
<property name="n_rows">3</property>
<property name="n_columns">4</property>
<property name="column_spacing">16</property>
<property name="row_spacing">16</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkEventBox" id="eventbox12">
<property name="visible">True</property>
<child>
<object class="GtkAspectFrame" id="aspectframe12">
<property name="visible">True</property>
<property name="border_width">8</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<property name="obey_child">False</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox11">
<property name="visible">True</property>
<child>
<object class="GtkAspectFrame" id="aspectframe11">
<property name="visible">True</property>
<property name="border_width">8</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<property name="obey_child">False</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox10">
<property name="visible">True</property>
<child>
<object class="GtkAspectFrame" id="aspectframe10">
<property name="visible">True</property>
<property name="border_width">8</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<property name="obey_child">False</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox9">
<property name="visible">True</property>
<child>
<object class="GtkAspectFrame" id="aspectframe9">
<property name="visible">True</property>
<property name="border_width">8</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<property name="obey_child">False</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox8">
<property name="visible">True</property>
<child>
<object class="GtkAspectFrame" id="aspectframe8">
<property name="visible">True</property>
<property name="border_width">8</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<property name="obey_child">False</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox7">
<property name="visible">True</property>
<child>
<object class="GtkAspectFrame" id="aspectframe7">
<property name="visible">True</property>
<property name="border_width">8</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<property name="obey_child">False</property>
<child>
<placeholder/>
</child>
</object>
</child>
</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>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox6">
<property name="visible">True</property>
<child>
<object class="GtkAspectFrame" id="aspectframe6">
<property name="visible">True</property>
<property name="border_width">8</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<property name="obey_child">False</property>
<child>
<placeholder/>
</child>
</object>
</child>
</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>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox5">
<property name="visible">True</property>
<child>
<object class="GtkAspectFrame" id="aspectframe5">
<property name="visible">True</property>
<property name="border_width">8</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<property name="obey_child">False</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox4">
<property name="visible">True</property>
<child>
<object class="GtkAspectFrame" id="aspectframe4">
<property name="visible">True</property>
<property name="border_width">8</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<property name="obey_child">False</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox3">
<property name="visible">True</property>
<child>
<object class="GtkAspectFrame" id="aspectframe3">
<property name="visible">True</property>
<property name="border_width">8</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<property name="obey_child">False</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox2">
<property name="visible">True</property>
<child>
<object class="GtkAspectFrame" id="aspectframe2">
<property name="visible">True</property>
<property name="border_width">8</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<property name="obey_child">False</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="eventbox1">
<property name="visible">True</property>
<child>
<object class="GtkAspectFrame" id="aspectframe1">
<property name="visible">True</property>
<property name="border_width">8</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<property name="obey_child">False</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</interface>
Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Some files were not shown because too many files have changed in this diff Show More