init
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
doc/html/*
|
||||
.vscode/
|
||||
*-output.csv
|
||||
@@ -0,0 +1,46 @@
|
||||
PROJECT(openvibe-plugins-riemannian)
|
||||
|
||||
SET(PROJECT_VERSION_MAJOR ${OV_GLOBAL_VERSION_MAJOR})
|
||||
SET(PROJECT_VERSION ${OV_GLOBAL_VERSION_STRING})
|
||||
|
||||
FILE(GLOB_RECURSE SRC_FILES src/*.cpp src/*.hpp src/*.h src/*.inl src/*.c)
|
||||
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 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE")
|
||||
|
||||
INCLUDE_DIRECTORIES("src")
|
||||
|
||||
# OpenViBE Base
|
||||
INCLUDE("FindOpenViBE")
|
||||
INCLUDE("FindOpenViBECommon")
|
||||
|
||||
# OpenViBE Module
|
||||
INCLUDE("FindOpenViBEModuleXML")
|
||||
INCLUDE("FindModuleGeometry")
|
||||
|
||||
# OpenViBE Third Party
|
||||
INCLUDE("FindThirdPartyEigen")
|
||||
INCLUDE("FindThirdPartyBoost")
|
||||
|
||||
# ---------------------------------
|
||||
# Target macros
|
||||
# Defines target operating system, architecture and compiler
|
||||
# ---------------------------------
|
||||
SET_BUILD_PLATFORM()
|
||||
|
||||
# -----------------------------
|
||||
# Install files
|
||||
# -----------------------------
|
||||
INSTALL(TARGETS ${PROJECT_NAME}
|
||||
RUNTIME DESTINATION ${DIST_BINDIR}
|
||||
LIBRARY DESTINATION ${DIST_LIBDIR}
|
||||
ARCHIVE DESTINATION ${DIST_LIBDIR})
|
||||
|
||||
SET(SUB_DIR_NAME riemannian)
|
||||
|
||||
INSTALL(DIRECTORY box-tutorials/ DESTINATION ${DIST_DATADIR}/openvibe/scenarios/box-tutorials/${SUB_DIR_NAME})
|
||||
INSTALL(DIRECTORY bci-examples/ DESTINATION ${DIST_DATADIR}/openvibe/scenarios/bci-examples/${SUB_DIR_NAME})
|
||||
|
||||
+860
@@ -0,0 +1,860 @@
|
||||
<OpenViBE-Scenario>
|
||||
<FormatVersion>2</FormatVersion>
|
||||
<Creator>OpenViBE Designer</Creator>
|
||||
<CreatorVersion>2.2.0</CreatorVersion>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<Identifier>(0x005e47b5, 0x7accff5e)</Identifier>
|
||||
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
|
||||
<Name>Directory</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}</DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}</Value>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<Identifier>(0x004e186f, 0xc24bdf6a)</Identifier>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>LWF Mean</Name>
|
||||
<DefaultValue>Mean-Riemann-LWF.csv</DefaultValue>
|
||||
<Value>Mean-Riemann-LWF.csv</Value>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<Identifier>(0x0027a6f6, 0x70ff3236)</Identifier>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Cor Mean</Name>
|
||||
<DefaultValue>Mean-Riemann-COR.csv</DefaultValue>
|
||||
<Value>Mean-Riemann-COR.csv</Value>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<Identifier>(0x000e76d1, 0xb1bece46)</Identifier>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Stimulation</Name>
|
||||
<DefaultValue>OVTK_StimulationId_TrainCompleted</DefaultValue>
|
||||
<Value>OVTK_StimulationId_TrainCompleted</Value>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<Identifier>(0x007a31e5, 0x7abc0fe2)</Identifier>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Log Level</Name>
|
||||
<DefaultValue>Information</DefaultValue>
|
||||
<Value>Information</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Inputs></Inputs>
|
||||
<Outputs></Outputs>
|
||||
<Boxes>
|
||||
<Box>
|
||||
<Identifier>(0x00000577, 0x0000375f)</Identifier>
|
||||
<Name>Player Controller</Name>
|
||||
<AlgorithmClassIdentifier>(0x5f426dce, 0x08456e13)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
|
||||
<Name>Stimulation name</Name>
|
||||
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
|
||||
<Value>OVTK_StimulationId_TrainCompleted</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xcc14d8d6, 0xf27ecb73)</TypeIdentifier>
|
||||
<Name>Action to perform</Name>
|
||||
<DefaultValue>Pause</DefaultValue>
|
||||
<Value>Stop</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>384</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>640</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x568d148e, 0x650792b3)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>2</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x000013ef, 0x00004894)</Identifier>
|
||||
<Name>Timeout</Name>
|
||||
<AlgorithmClassIdentifier>(0x24fcd292, 0x5c8f6aa8)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Input Stream</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Output Stimulations</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Timeout delay</Name>
|
||||
<DefaultValue>5</DefaultValue>
|
||||
<Value>60</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
|
||||
<Name>Output Stimulation</Name>
|
||||
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
|
||||
<Value>OVTK_StimulationId_TrainCompleted</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>288</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>640</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x1eaee00e, 0xdb05d34e)</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>(0x0000241d, 0x0000786a)</Identifier>
|
||||
<Name>LWF</Name>
|
||||
<AlgorithmClassIdentifier>(0x9a93af80, 0x6449c826)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Input Signal</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Output Covariance Matrix</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x5261636b, 0x45535449)</TypeIdentifier>
|
||||
<Name>Estimator</Name>
|
||||
<DefaultValue>Covariance</DefaultValue>
|
||||
<Value>Ledoit and Wolf</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Center Data</Name>
|
||||
<DefaultValue>true</DefaultValue>
|
||||
<Value>true</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xa88b3667, 0x0871638c)</TypeIdentifier>
|
||||
<Name>Log Level</Name>
|
||||
<DefaultValue>Information</DefaultValue>
|
||||
<Value>$var{Log Level}</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>304</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>480</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xa227af77, 0xcd1af363)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x666fffff, 0x666fffff)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x0000241d, 0x0000786b)</Identifier>
|
||||
<Name>COR</Name>
|
||||
<AlgorithmClassIdentifier>(0x9a93af80, 0x6449c826)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Input Signal</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Output Covariance Matrix</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x5261636b, 0x45535449)</TypeIdentifier>
|
||||
<Name>Estimator</Name>
|
||||
<DefaultValue>Covariance</DefaultValue>
|
||||
<Value>Pearson Correlation</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Center Data</Name>
|
||||
<DefaultValue>true</DefaultValue>
|
||||
<Value>true</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xa88b3667, 0x0871638c)</TypeIdentifier>
|
||||
<Name>Log Level</Name>
|
||||
<DefaultValue>Information</DefaultValue>
|
||||
<Value>$var{Log Level}</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>304</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>800</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xa227af77, 0xcd1af363)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x666fffff, 0x666fffff)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00003a4d, 0x00004a1b)</Identifier>
|
||||
<Name>Covariance Mean Calculator</Name>
|
||||
<AlgorithmClassIdentifier>(0x67955ea4, 0x7c643c0f)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Input Stimulation</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Input Covariance Matrix 1</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Output Mean Matrix</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x5261636b, 0x4d455452)</TypeIdentifier>
|
||||
<Name>Metric</Name>
|
||||
<DefaultValue>Riemann</DefaultValue>
|
||||
<Value>Riemann</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename to save Matrix (CSV, empty to not save)</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}/Mean.csv</DefaultValue>
|
||||
<Value>$var{Directory}/$var{LWF Mean}</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
|
||||
<Name>Stimulation name that triggers the compute</Name>
|
||||
<DefaultValue>OVTK_StimulationId_TrainCompleted</DefaultValue>
|
||||
<Value>$var{Stimulation}</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xa88b3667, 0x0871638c)</TypeIdentifier>
|
||||
<Name>Log Level</Name>
|
||||
<DefaultValue>Information</DefaultValue>
|
||||
<Value>$var{Log Level}</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>384</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>480</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xa6202e43, 0xaf22cef6)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x666fffff, 0x666fffff)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>4</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>2</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xfba64161, 0x65304e21)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00003a4d, 0x00004a1c)</Identifier>
|
||||
<Name>Covariance Mean Calculator</Name>
|
||||
<AlgorithmClassIdentifier>(0x67955ea4, 0x7c643c0f)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Input Stimulation</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Input Covariance Matrix 1</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Output Mean Matrix</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x5261636b, 0x4d455452)</TypeIdentifier>
|
||||
<Name>Metric</Name>
|
||||
<DefaultValue>Riemann</DefaultValue>
|
||||
<Value>Riemann</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename to save Matrix (CSV, empty to not save)</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}/Mean.csv</DefaultValue>
|
||||
<Value>$var{Directory}/$var{Cor Mean}</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
|
||||
<Name>Stimulation name that triggers the compute</Name>
|
||||
<DefaultValue>OVTK_StimulationId_TrainCompleted</DefaultValue>
|
||||
<Value>$var{Stimulation}</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xa88b3667, 0x0871638c)</TypeIdentifier>
|
||||
<Name>Log Level</Name>
|
||||
<DefaultValue>Information</DefaultValue>
|
||||
<Value>$var{Log Level}</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>384</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>800</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xa6202e43, 0xaf22cef6)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x666fffff, 0x666fffff)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>4</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>2</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xfba64161, 0x65304e21)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00004173, 0x000028f8)</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+1)*10</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>160</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>640</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>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x009ba89e)</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>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xfba64161, 0x65304e21)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x0000586a, 0x00001f44)</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</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Epoch duration (in sec)</Name>
|
||||
<DefaultValue>1</DefaultValue>
|
||||
<Value>1.000000</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Epoch intervals (in sec)</Name>
|
||||
<DefaultValue>0.5</DefaultValue>
|
||||
<Value>0.5</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>224</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>640</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xc5ff41e9, 0xccc59a01)</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>(0x00006642, 0x00007f5c)</Identifier>
|
||||
<Name>Noise generator</Name>
|
||||
<AlgorithmClassIdentifier>(0x0e3929f1, 0x15af76b9)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Generated signal</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Channel count</Name>
|
||||
<DefaultValue>4</DefaultValue>
|
||||
<Value>4</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Sampling frequency</Name>
|
||||
<DefaultValue>512</DefaultValue>
|
||||
<Value>512</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Generated epoch sample count</Name>
|
||||
<DefaultValue>32</DefaultValue>
|
||||
<Value>32</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2e85e95e, 0x8a1a8365)</TypeIdentifier>
|
||||
<Name>Noise type</Name>
|
||||
<DefaultValue>Uniform</DefaultValue>
|
||||
<Value>Uniform</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>112</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>640</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x88a4a7f6, 0x4180bdb0)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>4</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
</Boxes>
|
||||
<Links>
|
||||
<Link>
|
||||
<Identifier>(0x00002145, 0x0000754f)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000013ef, 0x00004894)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00000577, 0x0000375f)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000026f2, 0x00005da6)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x0000586a, 0x00001f44)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x0000241d, 0x0000786a)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x0000577e, 0x00000ace)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x0000586a, 0x00001f44)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x0000241d, 0x0000786b)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00006078, 0x00007097)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x0000241d, 0x0000786b)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00003a4d, 0x00004a1c)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000065eb, 0x00000ed7)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000013ef, 0x00004894)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00003a4d, 0x00004a1b)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00006656, 0x00002fdb)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00006642, 0x00007f5c)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00004173, 0x000028f8)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00006ab6, 0x0000519d)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x0000241d, 0x0000786a)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00003a4d, 0x00004a1b)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00007b25, 0x00006cb8)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00004173, 0x000028f8)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x0000586a, 0x00001f44)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00007f37, 0x0000790c)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000013ef, 0x00004894)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00003a4d, 0x00004a1c)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
</Links>
|
||||
<Comments>
|
||||
<Comment>
|
||||
<Identifier>(0x000054d7, 0x00005adf)</Identifier>
|
||||
<Text>Compute Mean</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>288</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>384</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x000054d7, 0x00005ae0)</Identifier>
|
||||
<Text>Input Signal</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>288</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>144</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x000054d7, 0x00005ae1)</Identifier>
|
||||
<Text>Compute Covariance</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>288</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>304</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
</Comments>
|
||||
<Metadata>
|
||||
<Entry>
|
||||
<Identifier>(0x05377d7e, 0x41751bb3)</Identifier>
|
||||
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
|
||||
<Data>[{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":592,"identifier":"(0x00001f6c, 0x000012a7)","name":"Display","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":831},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x00003bf6, 0x000002ba)","index":0,"name":"Default tab","parentIdentifier":"(0x00001f6c, 0x000012a7)","type":2},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":0,"identifier":"(0x00005d22, 0x00004235)","index":0,"name":"Empty","parentIdentifier":"(0x00003bf6, 0x000002ba)","type":0}]</Data>
|
||||
</Entry>
|
||||
</Metadata>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x079d1f09, 0x667c7871)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4c90d4ad, 0x7a2554ec)</Identifier>
|
||||
<Value>320</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x60bc58ab, 0x7a1b4d83)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x790d75b8, 0x3bb90c33)</Identifier>
|
||||
<Value>Thibaut Monseigne</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7a3a1558, 0xf12c63c2)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7b814cca, 0x271df6dd)</Identifier>
|
||||
<Value>475</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x84009d7c, 0x3c4e763b)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x8c1fc55b, 0x7b433dc2)</Identifier>
|
||||
<Value>1.0</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x9f5c4075, 0x4a0d3666)</Identifier>
|
||||
<Value>Classification Riemann Classic Compute Reference Example</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf36a1567, 0xd13c53da)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf6b2e3fa, 0x7bd43926)</Identifier>
|
||||
<Value>bci-examples</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf8034a49, 0x8b3f37cc)</Identifier>
|
||||
<Value>Inria</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</OpenViBE-Scenario>
|
||||
+1460
File diff suppressed because it is too large
Load Diff
+1868
File diff suppressed because it is too large
Load Diff
+1214
File diff suppressed because it is too large
Load Diff
+1681
File diff suppressed because it is too large
Load Diff
+1340
File diff suppressed because it is too large
Load Diff
+1468
File diff suppressed because it is too large
Load Diff
+1190
File diff suppressed because it is too large
Load Diff
+23
@@ -0,0 +1,23 @@
|
||||
|
||||
function initialize(box)
|
||||
|
||||
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
|
||||
|
||||
delay = box:get_setting(2)
|
||||
iteration = box:get_setting(3)
|
||||
increment = box:get_setting(4) == "true"
|
||||
|
||||
|
||||
end
|
||||
|
||||
function process(box)
|
||||
local t = 0
|
||||
local stimulation = OVTK_StimulationId_Label_01
|
||||
|
||||
-- manages Timeout
|
||||
for i=1,iteration do
|
||||
box:send_stimulation(1, stimulation, t, 0)
|
||||
t = t + delay
|
||||
if increment then stimulation = stimulation + 0x00000001 end
|
||||
end
|
||||
end
|
||||
+1754
File diff suppressed because it is too large
Load Diff
+1136
File diff suppressed because it is too large
Load Diff
+1135
File diff suppressed because it is too large
Load Diff
+2090
File diff suppressed because it is too large
Load Diff
+1435
File diff suppressed because it is too large
Load Diff
+471
@@ -0,0 +1,471 @@
|
||||
<OpenViBE-Scenario>
|
||||
<FormatVersion>2</FormatVersion>
|
||||
<Creator>OpenViBE Designer</Creator>
|
||||
<CreatorVersion>2.2.0</CreatorVersion>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<Identifier>(0x0028f139, 0x9f535b8a)</Identifier>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Data</Name>
|
||||
<DefaultValue>${Path_Data}/scenarios/signals/bci-motor-imagery.ov</DefaultValue>
|
||||
<Value>${Path_Data}/scenarios/signals/bci-motor-imagery.ov</Value>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<Identifier>(0x00659961, 0xe97d5856)</Identifier>
|
||||
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
|
||||
<Name>Directory</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}/</DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}</Value>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<Identifier>(0x0030836f, 0x32c229e2)</Identifier>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Model Filename</Name>
|
||||
<DefaultValue>Classification-Riemann-Classic-Training-Model.xml</DefaultValue>
|
||||
<Value>Riemann-Training-Model.xml</Value>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<Identifier>(0x000045cd, 0xbf65ab3a)</Identifier>
|
||||
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
|
||||
<Name>Stimulation Class 1</Name>
|
||||
<DefaultValue>OVTK_GDF_Left</DefaultValue>
|
||||
<Value>OVTK_GDF_Left</Value>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<Identifier>(0x003d07e7, 0x47d37506)</Identifier>
|
||||
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
|
||||
<Name>Stimulation Class 2</Name>
|
||||
<DefaultValue>OVTK_GDF_Right</DefaultValue>
|
||||
<Value>OVTK_GDF_Right</Value>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<Identifier>(0x00417469, 0x63bdca5e)</Identifier>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Log Level</Name>
|
||||
<DefaultValue>Information</DefaultValue>
|
||||
<Value>Information</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Inputs></Inputs>
|
||||
<Outputs></Outputs>
|
||||
<Boxes>
|
||||
<Box>
|
||||
<Identifier>(0x000006d6, 0x000008e8)</Identifier>
|
||||
<Name>Covariance Matrix Calculator</Name>
|
||||
<AlgorithmClassIdentifier>(0x9a93af80, 0x6449c826)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Input Signal</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Output Covariance Matrix</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x5261636b, 0x45535449)</TypeIdentifier>
|
||||
<Name>Estimator</Name>
|
||||
<DefaultValue>Covariance</DefaultValue>
|
||||
<Value>Ledoit and Wolf</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Center Data</Name>
|
||||
<DefaultValue>true</DefaultValue>
|
||||
<Value>true</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xa88b3667, 0x0871638c)</TypeIdentifier>
|
||||
<Name>Log Level</Name>
|
||||
<DefaultValue>Information</DefaultValue>
|
||||
<Value>Information</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>416</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>1008</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xa227af77, 0xcd1af363)</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>(0x00001a09, 0x00003f43)</Identifier>
|
||||
<Name>After</Name>
|
||||
<AlgorithmClassIdentifier>(0x54f0796d, 0x3ede2cc0)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Matrix</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x3d3c7c7f, 0xef0e7129)</TypeIdentifier>
|
||||
<Name>Color gradient</Name>
|
||||
<DefaultValue>0:2,36,58; 50:100,100,100; 100:83,17,20</DefaultValue>
|
||||
<Value>0:2,36,58; 50:100,100,100; 100:83,17,20</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Steps</Name>
|
||||
<DefaultValue>100</DefaultValue>
|
||||
<Value>100</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Symetric min/max</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Real time min/max</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>560</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>1008</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x4ff49bdb, 0x9dcf6788)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>4</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00001a09, 0x00003f44)</Identifier>
|
||||
<Name>Before</Name>
|
||||
<AlgorithmClassIdentifier>(0x54f0796d, 0x3ede2cc0)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Matrix</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x3d3c7c7f, 0xef0e7129)</TypeIdentifier>
|
||||
<Name>Color gradient</Name>
|
||||
<DefaultValue>0:2,36,58; 50:100,100,100; 100:83,17,20</DefaultValue>
|
||||
<Value>0:2,36,58; 50:100,100,100; 100:83,17,20</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Steps</Name>
|
||||
<DefaultValue>100</DefaultValue>
|
||||
<Value>100</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Symetric min/max</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Real time min/max</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>560</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>848</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x4ff49bdb, 0x9dcf6788)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>4</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00003b14, 0x00000f6a)</Identifier>
|
||||
<Name>Matrix Affine Transformation</Name>
|
||||
<AlgorithmClassIdentifier>(0x1baa7180, 0x52cb19b8)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Square Matrix</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Transformed Square Matrix</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename to load transformation</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}/my-transformation-input.xml</DefaultValue>
|
||||
<Value></Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename to save transformation</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}/my-transformation-output.xml</DefaultValue>
|
||||
<Value></Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Continuous Update</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>true</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>512</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>1008</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x9a24ed4b, 0x44592bc6)</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>(0x000070af, 0x00000633)</Identifier>
|
||||
<Name>Sinus oscillator</Name>
|
||||
<AlgorithmClassIdentifier>(0x7e33bdb8, 0x68194a4a)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Generated signal</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Channel count</Name>
|
||||
<DefaultValue>4</DefaultValue>
|
||||
<Value>4</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Sampling frequency</Name>
|
||||
<DefaultValue>512</DefaultValue>
|
||||
<Value>64</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Generated epoch sample count</Name>
|
||||
<DefaultValue>32</DefaultValue>
|
||||
<Value>32</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>352</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>1008</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x0b214ed8, 0x1f9ad83a)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
</Boxes>
|
||||
<Links>
|
||||
<Link>
|
||||
<Identifier>(0x00001d34, 0x00001fa4)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000070af, 0x00000633)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000006d6, 0x000008e8)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000054f8, 0x000011f4)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000006d6, 0x000008e8)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00003b14, 0x00000f6a)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00005fab, 0x0000528e)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000006d6, 0x000008e8)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00001a09, 0x00003f44)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000070a1, 0x00000bf1)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00003b14, 0x00000f6a)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00001a09, 0x00003f43)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
</Links>
|
||||
<Comments></Comments>
|
||||
<Metadata>
|
||||
<Entry>
|
||||
<Identifier>(0x05377d7e, 0x41751bb3)</Identifier>
|
||||
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
|
||||
<Data>[{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":592,"identifier":"(0x00001f6c, 0x000012a7)","name":"Display","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":1343},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x00003bf6, 0x000002ba)","index":0,"name":"Default tab","parentIdentifier":"(0x00001f6c, 0x000012a7)","type":2},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":2,"dividerPosition":659,"identifier":"(0x000039d3, 0x00005c3e)","index":0,"maxDividerPosition":1323,"name":"Horizontal split","parentIdentifier":"(0x00003bf6, 0x000002ba)","type":5},{"boxIdentifier":"(0x00001a09, 0x00003f44)","childCount":0,"identifier":"(0x00007f28, 0x000070e0)","index":0,"parentIdentifier":"(0x000039d3, 0x00005c3e)","type":3},{"boxIdentifier":"(0x00001a09, 0x00003f43)","childCount":0,"identifier":"(0x0000191d, 0x00005966)","index":1,"parentIdentifier":"(0x000039d3, 0x00005c3e)","type":3}]</Data>
|
||||
</Entry>
|
||||
</Metadata>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x079d1f09, 0x667c7871)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4c90d4ad, 0x7a2554ec)</Identifier>
|
||||
<Value>320</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x60bc58ab, 0x7a1b4d83)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x790d75b8, 0x3bb90c33)</Identifier>
|
||||
<Value>Thibaut Monseigne</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7a3a1558, 0xf12c63c2)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7b814cca, 0x271df6dd)</Identifier>
|
||||
<Value>475</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x84009d7c, 0x3c4e763b)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x8c1fc55b, 0x7b433dc2)</Identifier>
|
||||
<Value>1.0</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x9f5c4075, 0x4a0d3666)</Identifier>
|
||||
<Value>Matrix Classification Training Example</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf36a1567, 0xd13c53da)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf6b2e3fa, 0x7bd43926)</Identifier>
|
||||
<Value>bci-examples</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf8034a49, 0x8b3f37cc)</Identifier>
|
||||
<Value>Inria</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</OpenViBE-Scenario>
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
/**
|
||||
* \page BoxAlgorithm_CovarianceMatrixCalculator Covariance Matrix Calculator
|
||||
__________________________________________________________________
|
||||
|
||||
Detailed description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixCalculator_Description|
|
||||
The covariance matrix calculator calculates the covariance matrix of each input chunk. The covariance matrix is a square matrix of size NxN with N the number of channels of the input signal.
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixCalculator_Description|
|
||||
__________________________________________________________________
|
||||
|
||||
Inputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixCalculator_Inputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixCalculator_Inputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixCalculator_Input1|
|
||||
The input signal on which the covariance matrix needs to be calculated.
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixCalculator_Input1|
|
||||
__________________________________________________________________
|
||||
|
||||
Outputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixCalculator_Outputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixCalculator_Outputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixCalculator_Output1|
|
||||
Covariance Matrix generated.
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixCalculator_Output1|
|
||||
__________________________________________________________________
|
||||
|
||||
Settings description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixCalculator_Settings|
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixCalculator_Settings|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixCalculator_Setting1|
|
||||
Method of calculating the covariance matrix: \n
|
||||
Classical Covariance Estimator \n
|
||||
Pearson Correlation Estimator \n
|
||||
Ledoit and Wolf Estimator \n
|
||||
Oracle Approximating Shrinkage (OAS) Estimator \n
|
||||
Sample Covariance Matrix (SCM) Estimator \n
|
||||
Identity Matrix
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixCalculator_Setting1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixCalculator_Setting2|
|
||||
Center or not the input data (each channel independently)
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixCalculator_Setting2|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixCalculator_Setting3|
|
||||
Log Level (None to see nothing)
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixCalculator_Setting3|
|
||||
__________________________________________________________________
|
||||
|
||||
Examples description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixCalculator_Examples|
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixCalculator_Examples|
|
||||
__________________________________________________________________
|
||||
|
||||
Miscellaneous description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixCalculator_Miscellaneous|
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixCalculator_Miscellaneous|
|
||||
*/
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
/**
|
||||
* \page BoxAlgorithm_CovarianceMatrixToFeatureVector Covariance Matrix To Feature Vector
|
||||
__________________________________________________________________
|
||||
|
||||
Detailed description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixToFeatureVector_Description|
|
||||
This box transforms the matrix into a vector for use in a classic classifier. <see cref="Featurization"/> for more details.
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixToFeatureVector_Description|
|
||||
__________________________________________________________________
|
||||
|
||||
Inputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixToFeatureVector_Inputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixToFeatureVector_Inputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixToFeatureVector_Input1|
|
||||
The covariance matrix on which the Feature Vector needs to be calculated.
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixToFeatureVector_Input1|
|
||||
__________________________________________________________________
|
||||
|
||||
Outputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixToFeatureVector_Outputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixToFeatureVector_Outputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixToFeatureVector_Output1|
|
||||
Feature Vector generated.
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixToFeatureVector_Output1|
|
||||
__________________________________________________________________
|
||||
|
||||
Settings description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixToFeatureVector_Settings|
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixToFeatureVector_Settings|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixToFeatureVector_Setting1|
|
||||
Method of calculating the Feature Vector : \n
|
||||
\c True : The matrix is transposed into the tangent space. \n
|
||||
\c False : The upper triangular matrix is used. \n
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixToFeatureVector_Setting1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixToFeatureVector_Setting2|
|
||||
Link to the Reference Matrix CSV. A square matrix of size NxN with N the number of Features. The reference matrix is the same size as the input covariance matrices. The reference matrix is useful for calculating the feature vector on the tangent space.\nRemarks : If no reference an identity matrix is used.
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixToFeatureVector_Setting2|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixToFeatureVector_Setting3|
|
||||
Log Level (None to see nothing)
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixToFeatureVector_Setting3|
|
||||
__________________________________________________________________
|
||||
|
||||
Examples description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixToFeatureVector_Examples|
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixToFeatureVector_Examples|
|
||||
__________________________________________________________________
|
||||
|
||||
Miscellaneous description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMatrixToFeatureVector_Miscellaneous|
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMatrixToFeatureVector_Miscellaneous|
|
||||
*/
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
/**
|
||||
* \page BoxAlgorithm_CovarianceMeanCalculator Covariance Mean Calculator
|
||||
__________________________________________________________________
|
||||
|
||||
Detailed description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMeanCalculator_Description|
|
||||
Calculation of the mean of covariance matrix.\n
|
||||
The Calculation is done when a stimulation is received.\n
|
||||
The Mean is saved in a CSV File.
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMeanCalculator_Description|
|
||||
__________________________________________________________________
|
||||
|
||||
Inputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMeanCalculator_Inputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMeanCalculator_Inputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMeanCalculator_Input1|
|
||||
Stimulation Input
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMeanCalculator_Input1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMeanCalculator_Input2|
|
||||
Covariance Matrix Input
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMeanCalculator_Input2|
|
||||
__________________________________________________________________
|
||||
|
||||
Outputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMeanCalculator_Outputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMeanCalculator_Outputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMeanCalculator_Output1|
|
||||
Mean Computed.
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMeanCalculator_Output1|
|
||||
__________________________________________________________________
|
||||
|
||||
Settings description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMeanCalculator_Settings|
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMeanCalculator_Settings|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMeanCalculator_Setting1|
|
||||
Metric to use for computing the mean : \n
|
||||
Riemann\n
|
||||
Euclidian\n
|
||||
Log-Euclidian\n
|
||||
Log-Det\n
|
||||
Kullback\n
|
||||
Harmonic\n
|
||||
Identity Matrix
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMeanCalculator_Setting1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMeanCalculator_Setting2|
|
||||
CSV Filename to save the computed mean.
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMeanCalculator_Setting2|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMeanCalculator_Setting3|
|
||||
Stimulation that starts the computation.
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMeanCalculator_Setting3|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMeanCalculator_Setting4|
|
||||
Log Level (None to see nothing)
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMeanCalculator_Setting4|
|
||||
__________________________________________________________________
|
||||
|
||||
Examples description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMeanCalculator_Examples|
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMeanCalculator_Examples|
|
||||
__________________________________________________________________
|
||||
|
||||
Miscellaneous description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CovarianceMeanCalculator_Miscellaneous|
|
||||
* |OVP_DocEnd_BoxAlgorithm_CovarianceMeanCalculator_Miscellaneous|
|
||||
*/
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
/**
|
||||
* \page BoxAlgorithm_FeatureVectorToCovarianceMatrix Covariance Matrix To Feature Vector
|
||||
__________________________________________________________________
|
||||
|
||||
Detailed description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Description|
|
||||
This box transforms the vector into matrix for use in a matrix classifier. <see cref="UnFeaturization"/> for more details.
|
||||
* |OVP_DocEnd_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Description|
|
||||
__________________________________________________________________
|
||||
|
||||
Inputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Inputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Inputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Input1|
|
||||
The Feature Vector on which the Covariance Matrix needs to be calculated.
|
||||
* |OVP_DocEnd_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Input1|
|
||||
__________________________________________________________________
|
||||
|
||||
Outputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Outputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Outputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Output1|
|
||||
Covariance Matrix generated.
|
||||
* |OVP_DocEnd_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Output1|
|
||||
__________________________________________________________________
|
||||
|
||||
Settings description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Settings|
|
||||
* |OVP_DocEnd_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Settings|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Setting1|
|
||||
Method of calculating the Covariance Matrix : \n
|
||||
\c True : The feature vector is transposed into the tangent space. \n
|
||||
\c False : The upper triangular matrix is used. \n
|
||||
* |OVP_DocEnd_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Setting1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Setting2|
|
||||
Link to the Reference Matrix CSV. A square matrix of size NxN with N the number of Features. The reference matrix is the same size as the input covariance matrices. The reference matrix is useful for calculating the feature vector on the tangent space.\nRemarks : If no reference an identity matrix is used.
|
||||
* |OVP_DocEnd_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Setting2|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Setting3|
|
||||
Log Level (None to see nothing)
|
||||
* |OVP_DocEnd_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Setting3|
|
||||
__________________________________________________________________
|
||||
|
||||
Examples description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Examples|
|
||||
* |OVP_DocEnd_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Examples|
|
||||
__________________________________________________________________
|
||||
|
||||
Miscellaneous description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Miscellaneous|
|
||||
* |OVP_DocEnd_BoxAlgorithm_FeatureVectorToCovarianceMatrix_Miscellaneous|
|
||||
*/
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
/**
|
||||
* \page BoxAlgorithm_MatrixAffineTransformation Matrix Affine Transformation
|
||||
__________________________________________________________________
|
||||
|
||||
Detailed description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixAffineTransformation_Description|
|
||||
Compute and Apply the Bias matrix for Affine Transformation on square matrix (isR * M * isR^(-1) = I). <see cref="CBias"/> for more details.
|
||||
You can load an existing bias matrix with the first setting.
|
||||
Continuous update is to update Bias at each chunk or at the end.
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixAffineTransformation_Description|
|
||||
__________________________________________________________________
|
||||
|
||||
Inputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixAffineTransformation_Inputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixAffineTransformation_Inputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixAffineTransformation_Input1|
|
||||
Square matrix to transform.
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixAffineTransformation_Input1|
|
||||
__________________________________________________________________
|
||||
|
||||
Outputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixAffineTransformation_Outputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixAffineTransformation_Outputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixAffineTransformation_Output1|
|
||||
Transformed Square Matrix
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixAffineTransformation_Output1|
|
||||
__________________________________________________________________
|
||||
|
||||
Settings description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixAffineTransformation_Settings|
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixAffineTransformation_Settings|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixAffineTransformation_Setting1|
|
||||
Filename with previous computed Bias
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixAffineTransformation_Setting1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixAffineTransformation_Setting2|
|
||||
Filename to save computed Bias
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixAffineTransformation_Setting2|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixAffineTransformation_Setting3|
|
||||
Update method, continuous to update at each chunk and not continuous to compute bias at the End.
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixAffineTransformation_Setting3|
|
||||
__________________________________________________________________
|
||||
|
||||
Examples description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixAffineTransformation_Examples|
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixAffineTransformation_Examples|
|
||||
__________________________________________________________________
|
||||
|
||||
Miscellaneous description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixAffineTransformation_Miscellaneous|
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixAffineTransformation_Miscellaneous|
|
||||
*/
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
/**
|
||||
* \page BoxAlgorithm_MatrixClassifierProcessor Matrix Classifier Processor
|
||||
__________________________________________________________________
|
||||
|
||||
Detailed description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierProcessor_Description|
|
||||
Matrix classifier Processor. This box classify input matrix with the loaded classifier model. Actual methods are Minimum Distance to Mean (MDM) and Minimum Distance to Mean with geodesic filtering (FgMDM)\n
|
||||
<seealso cref="CMatrixClassifierMDM::classify(const Eigen::MatrixXd&, size_t&, std::vector<double>&, std::vector<double>&)"/> <seealso cref="CMatrixClassifierFgMDM::classify(const Eigen::MatrixXd&, size_t&, std::vector<double>&, std::vector<double>&)"/>
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierProcessor_Description|
|
||||
__________________________________________________________________
|
||||
|
||||
Inputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierProcessor_Inputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierProcessor_Inputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierProcessor_Input1|
|
||||
Matrix to classify.
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierProcessor_Input1|
|
||||
__________________________________________________________________
|
||||
|
||||
Outputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierProcessor_Outputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierProcessor_Outputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierProcessor_Output1|
|
||||
Predicted Class Stimulation
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierProcessor_Output1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierProcessor_Output2|
|
||||
Distance between each class
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierProcessor_Output2|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierProcessor_Output3|
|
||||
Probability of each class
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierProcessor_Output3|
|
||||
__________________________________________________________________
|
||||
|
||||
Settings description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierProcessor_Settings|
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierProcessor_Settings|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierProcessor_Setting1|
|
||||
Classifier model Filename
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierProcessor_Setting1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierProcessor_Setting2|
|
||||
Log Level (None to see nothing)
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierProcessor_Setting2|
|
||||
__________________________________________________________________
|
||||
|
||||
Examples description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierProcessor_Examples|
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierProcessor_Examples|
|
||||
__________________________________________________________________
|
||||
|
||||
Miscellaneous description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierProcessor_Miscellaneous|
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierProcessor_Miscellaneous|
|
||||
*/
|
||||
+95
@@ -0,0 +1,95 @@
|
||||
/**
|
||||
* \page BoxAlgorithm_MatrixClassifierTrainer Matrix Classifier Trainer
|
||||
__________________________________________________________________
|
||||
|
||||
Detailed description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierTrainer_Description|
|
||||
Matrix classifier trainer. This box stack all matrix received in input and launch train function when a stimulation is received. Actual methods are Minimum Distance to Mean (MDM) and Minimum Distance to Mean with geodesic filtering (FgMDM) (With Real Time adaptation assumed) with or without Rebias\n
|
||||
<seealso cref="CMatrixClassifierMDM::train"/> <seealso cref="CMatrixClassifierMDMRebias::train"/> <seealso cref="CMatrixClassifierFgMDMRT::train"/> <seealso cref="CMatrixClassifierFgMDMRTRebias::train"/>
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierTrainer_Description|
|
||||
__________________________________________________________________
|
||||
|
||||
Inputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierTrainer_Inputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierTrainer_Inputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierTrainer_Input1|
|
||||
Stimulation to start the training.
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierTrainer_Input1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierTrainer_Input2|
|
||||
Input for Class 1
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierTrainer_Input2|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierTrainer_Input3|
|
||||
Input for Class 2
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierTrainer_Input3|
|
||||
__________________________________________________________________
|
||||
|
||||
Outputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierTrainer_Outputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierTrainer_Outputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierTrainer_Output1|
|
||||
Send \"OVTK_StimulationId_TrainCompleted\" when train is completed.
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierTrainer_Output1|
|
||||
__________________________________________________________________
|
||||
|
||||
Settings description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierTrainer_Settings|
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierTrainer_Settings|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierTrainer_Setting1|
|
||||
Stimulation that starts the computation.
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierTrainer_Setting1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierTrainer_Setting2|
|
||||
Classifier model Filename
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierTrainer_Setting2|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierTrainer_Setting3|
|
||||
Classifier Method :\n
|
||||
Minimum Distance to Mean (MDM)\n
|
||||
Minimum Distance to Mean Rebias (MDM Rebias)\n
|
||||
Minimum Distance to Mean with geodesic filtering (FgMDM)\n
|
||||
Minimum Distance to Mean with geodesic filtering Rebias (FgMDM Rebias)
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierTrainer_Setting3|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierTrainer_Setting4|
|
||||
Log Level (None to see nothing)
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierTrainer_Setting4|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierTrainer_Setting5|
|
||||
Metric to use : Riemman, Euclidian, Harmonic, Identity, Kullback, Log Determinant, Log Euclidian
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierTrainer_Setting5|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierTrainer_Setting6|
|
||||
Stimulation for Class 1.
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierTrainer_Setting6|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierTrainer_Setting7|
|
||||
Stimulation for Class 2.
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierTrainer_Setting7|
|
||||
__________________________________________________________________
|
||||
|
||||
Examples description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierTrainer_Examples|
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierTrainer_Examples|
|
||||
__________________________________________________________________
|
||||
|
||||
Miscellaneous description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_MatrixClassifierTrainer_Miscellaneous|
|
||||
* |OVP_DocEnd_BoxAlgorithm_MatrixClassifierTrainer_Miscellaneous|
|
||||
*/
|
||||
+88
@@ -0,0 +1,88 @@
|
||||
#include "CBoxAlgorithmCovarianceMatrixCalculator.hpp"
|
||||
#include "utils/misc.hpp"
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace Riemannian {
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmCovarianceMatrixCalculator::initialize()
|
||||
{
|
||||
m_i0SignalCodec.initialize(*this, 0);
|
||||
m_o0MatrixCodec.initialize(*this, 0);
|
||||
m_iMatrix = m_i0SignalCodec.getOutputMatrix();
|
||||
m_oMatrix = m_o0MatrixCodec.getInputMatrix();
|
||||
|
||||
//***** Settings *****
|
||||
m_est = Geometry::EEstimator(uint64_t(FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 0)));
|
||||
m_center = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 1);
|
||||
m_logLevel = Kernel::ELogLevel(uint64_t(FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 2)));
|
||||
|
||||
this->getLogManager() << m_logLevel << toString(m_est) << " Estimator" << (m_center ? ", Center Data " : "") << "\n";
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmCovarianceMatrixCalculator::uninitialize()
|
||||
{
|
||||
m_i0SignalCodec.uninitialize();
|
||||
m_o0MatrixCodec.uninitialize();
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmCovarianceMatrixCalculator::processInput(const size_t /*index*/)
|
||||
{
|
||||
getBoxAlgorithmContext()->markAlgorithmAsReadyToProcess();
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmCovarianceMatrixCalculator::process()
|
||||
{
|
||||
Kernel::IBoxIO& boxContext = this->getDynamicBoxContext();
|
||||
|
||||
for (size_t i = 0; i < boxContext.getInputChunkCount(0); ++i)
|
||||
{
|
||||
m_i0SignalCodec.decode(i); // Decode the chunk
|
||||
OV_ERROR_UNLESS_KRF(m_iMatrix->getDimensionCount() == 2, "Invalid Input Signal", Kernel::ErrorType::BadInput);
|
||||
|
||||
const uint64_t tStart = boxContext.getInputChunkStartTime(0, i), // Time Code Chunk Start
|
||||
tEnd = boxContext.getInputChunkEndTime(0, i); // Time Code Chunk End
|
||||
const auto nChannels = size_t(m_iMatrix->getDimensionSize(0));
|
||||
|
||||
if (m_i0SignalCodec.isHeaderReceived()) // Header received
|
||||
{
|
||||
m_oMatrix->resize(nChannels, nChannels); // Update Size and set to 0
|
||||
m_oMatrix->setNumLabels(); // Change label to have 1 to N label on each dim
|
||||
m_o0MatrixCodec.encodeHeader(); // Header encoded
|
||||
}
|
||||
else if (m_i0SignalCodec.isBufferReceived()) // Buffer received
|
||||
{
|
||||
OV_ERROR_UNLESS_KRF(covarianceMatrix(), "Covariance Matrix Processing Error", Kernel::ErrorType::BadProcessing); // Compute Covariance
|
||||
m_o0MatrixCodec.encodeBuffer(); // Buffer encoded
|
||||
}
|
||||
else if (m_i0SignalCodec.isEndReceived()) { m_o0MatrixCodec.encodeEnd(); } // End receivded and encoded
|
||||
|
||||
boxContext.markOutputAsReadyToSend(0, tStart, tEnd); // Makes the output available
|
||||
}
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmCovarianceMatrixCalculator::covarianceMatrix() const
|
||||
{
|
||||
Eigen::MatrixXd mS, mCov;
|
||||
if (!MatrixConvert(*m_iMatrix, mS)) { return false; }
|
||||
const Geometry::EStandardization s = m_center ? Geometry::EStandardization::Center : Geometry::EStandardization::None;
|
||||
if (!CovarianceMatrix(mS, mCov, m_est, s)) { return false; }
|
||||
if (!MatrixConvert(mCov, *m_oMatrix)) { return false; }
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
} // namespace Riemannian
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+93
@@ -0,0 +1,93 @@
|
||||
///-------------------------------------------------------------------------------------------------
|
||||
///
|
||||
/// \file CBoxAlgorithmCovarianceMatrixCalculator.hpp
|
||||
/// \brief Class of the box computing the covariance matrix
|
||||
/// \author Thibaut Monseigne (Inria).
|
||||
/// \version 1.0.
|
||||
/// \date 16/10/2018.
|
||||
/// \copyright <a href="https://choosealicense.com/licenses/agpl-3.0/">GNU Affero General Public License v3.0</a>.
|
||||
///
|
||||
///-------------------------------------------------------------------------------------------------
|
||||
# pragma once
|
||||
|
||||
#include "defines.hpp"
|
||||
#include <openvibe/ov_all.h>
|
||||
#include <toolkit/ovtk_all.h>
|
||||
|
||||
#include <geometry/Covariance.hpp>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace Riemannian {
|
||||
/// <summary> The class CBoxAlgorithmCovarianceMatrixCalculator describes the box Covariance Matrix Calculator. </summary>
|
||||
class CBoxAlgorithmCovarianceMatrixCalculator final : virtual public Toolkit::TBoxAlgorithm<IBoxAlgorithm>
|
||||
{
|
||||
public:
|
||||
void release() override { delete this; }
|
||||
|
||||
bool initialize() override;
|
||||
bool uninitialize() override;
|
||||
|
||||
bool processInput(const size_t index) override;
|
||||
bool process() override;
|
||||
|
||||
_IsDerivedFromClass_Final_(Toolkit::TBoxAlgorithm<IBoxAlgorithm>, ClassId_BoxAlgorithm_CovarianceMatrixCalculator)
|
||||
|
||||
protected:
|
||||
bool covarianceMatrix() const;
|
||||
|
||||
//***** Codecs *****
|
||||
Toolkit::TSignalDecoder<CBoxAlgorithmCovarianceMatrixCalculator> m_i0SignalCodec; // Input Signal Codec
|
||||
Toolkit::TStreamedMatrixEncoder<CBoxAlgorithmCovarianceMatrixCalculator> m_o0MatrixCodec; // Output Matrix Codec
|
||||
|
||||
//***** Matrices *****
|
||||
CMatrix* m_iMatrix = nullptr; // Input Matrix pointer
|
||||
CMatrix* m_oMatrix = nullptr; // Output Matrix pointer
|
||||
|
||||
//***** Settings *****
|
||||
Geometry::EEstimator m_est = Geometry::EEstimator::COV; // Covariance Estimator
|
||||
bool m_center = true; // Center data
|
||||
Kernel::ELogLevel m_logLevel = Kernel::LogLevel_Info; // Log Level
|
||||
};
|
||||
|
||||
/// <summary> Descriptor of the box Covariance Matrix Calculator. </summary>
|
||||
class CBoxAlgorithmCovarianceMatrixCalculatorDesc final : virtual public IBoxAlgorithmDesc
|
||||
{
|
||||
public:
|
||||
|
||||
void release() override { }
|
||||
|
||||
CString getName() const override { return "Covariance Matrix Calculator"; }
|
||||
CString getAuthorName() const override { return "Thibaut Monseigne"; }
|
||||
CString getAuthorCompanyName() const override { return "Inria"; }
|
||||
CString getShortDescription() const override { return "Calculation of the covariance matrix of the input signal."; }
|
||||
|
||||
CString getDetailedDescription() const override
|
||||
{
|
||||
return "Calculation of the covariance matrix of the input signal.\nReturns a covariance matrix of size NxN per each input chunk. Where N is the number of channels.";
|
||||
}
|
||||
|
||||
CString getCategory() const override { return "Riemannian Geometry"; }
|
||||
CString getVersion() const override { return "0.1"; }
|
||||
CString getStockItemName() const override { return "gtk-execute"; }
|
||||
|
||||
CIdentifier getCreatedClass() const override { return ClassId_BoxAlgorithm_CovarianceMatrixCalculator; }
|
||||
IPluginObject* create() override { return new CBoxAlgorithmCovarianceMatrixCalculator; }
|
||||
|
||||
bool getBoxPrototype(Kernel::IBoxProto& prototype) const override
|
||||
{
|
||||
prototype.addInput("Input Signal", OV_TypeId_Signal);
|
||||
prototype.addOutput("Output Covariance Matrix", OV_TypeId_StreamedMatrix);
|
||||
|
||||
prototype.addSetting("Estimator", TypeId_Estimator, toString(Geometry::EEstimator::COV).c_str());
|
||||
prototype.addSetting("Center Data", OV_TypeId_Boolean, "true");
|
||||
prototype.addSetting("Log Level", OV_TypeId_LogLevel, "Information");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
_IsDerivedFromClass_Final_(IBoxAlgorithmDesc, ClassId_BoxAlgorithm_CovarianceMatrixCalculatorDesc)
|
||||
};
|
||||
} // namespace Riemannian
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+134
@@ -0,0 +1,134 @@
|
||||
#include "CBoxAlgorithmCovarianceMatrixToFeatureVector.hpp"
|
||||
#include "utils/misc.hpp"
|
||||
#include <fstream>
|
||||
|
||||
#include "geometry/Basics.hpp"
|
||||
#include "geometry/Featurization.hpp"
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace Riemannian {
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmCovarianceMatrixToFeatureVector::initialize()
|
||||
{
|
||||
//***** Codec Initialization *****
|
||||
m_i0MatrixCodec.initialize(*this, 0);
|
||||
m_o0FeatureCodec.initialize(*this, 0);
|
||||
m_iMatrix = m_i0MatrixCodec.getOutputMatrix();
|
||||
m_oMatrix = m_o0FeatureCodec.getInputMatrix();
|
||||
|
||||
//***** Settings Initialization *****
|
||||
m_tangentSpace = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 0);
|
||||
m_logLevel = Kernel::ELogLevel(uint64_t(FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 2)));
|
||||
if (m_tangentSpace)
|
||||
{
|
||||
this->getLogManager() << m_logLevel << "Tangent Space\n";
|
||||
OV_ERROR_UNLESS_KRF(initRef(), "Error Reference Matrix Creation", Kernel::ErrorType::BadSetting);
|
||||
}
|
||||
else { this->getLogManager() << m_logLevel << "Squeeze Upper Matrix\n"; }
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmCovarianceMatrixToFeatureVector::uninitialize()
|
||||
{
|
||||
m_i0MatrixCodec.uninitialize();
|
||||
m_o0FeatureCodec.uninitialize();
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmCovarianceMatrixToFeatureVector::processInput(const size_t /*index*/)
|
||||
{
|
||||
getBoxAlgorithmContext()->markAlgorithmAsReadyToProcess();
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmCovarianceMatrixToFeatureVector::process()
|
||||
{
|
||||
Kernel::IBoxIO& boxContext = this->getDynamicBoxContext();
|
||||
|
||||
for (size_t i = 0; i < boxContext.getInputChunkCount(0); ++i)
|
||||
{
|
||||
m_i0MatrixCodec.decode(i); // Decode the chunk
|
||||
OV_ERROR_UNLESS_KRF(m_iMatrix->getDimensionCount() == 2 && m_iMatrix->getDimensionSize(0) == m_iMatrix->getDimensionSize(1),
|
||||
"Invalid Input Signal", Kernel::ErrorType::BadInput);
|
||||
|
||||
const size_t nChannels = size_t(m_iMatrix->getDimensionSize(0));
|
||||
const uint64_t tStart = boxContext.getInputChunkStartTime(0, i), // Time Code Chunk Start
|
||||
tEnd = boxContext.getInputChunkEndTime(0, i); // Time Code Chunk End
|
||||
|
||||
if (m_i0MatrixCodec.isHeaderReceived()) // Header received
|
||||
{
|
||||
m_oMatrix->resize(nChannels * (nChannels + 1) / 2); // Update Size and set to 0
|
||||
m_o0FeatureCodec.encodeHeader(); // Header encoded
|
||||
}
|
||||
else if (m_i0MatrixCodec.isBufferReceived()) // Buffer received
|
||||
{
|
||||
OV_ERROR_UNLESS_KRF(featurization(), "Featurization Processing Error", Kernel::ErrorType::BadProcessing); // Transformation
|
||||
m_o0FeatureCodec.encodeBuffer(); // Buffer encoded
|
||||
}
|
||||
else if (m_i0MatrixCodec.isEndReceived()) { m_o0FeatureCodec.encodeEnd(); } // End receivded and encoded
|
||||
|
||||
boxContext.markOutputAsReadyToSend(0, tStart, tEnd); // Makes the output available
|
||||
}
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmCovarianceMatrixToFeatureVector::featurization() const
|
||||
{
|
||||
Eigen::MatrixXd cov;
|
||||
Eigen::RowVectorXd v;
|
||||
if (!MatrixConvert(*m_iMatrix, cov)) { return false; }
|
||||
if (!Geometry::Featurization(cov, v, m_tangentSpace, m_ref)) { return false; }
|
||||
if (!MatrixConvert(v, *m_oMatrix)) { return false; }
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmCovarianceMatrixToFeatureVector::initRef()
|
||||
{
|
||||
//***** Open the CSV *****
|
||||
const CString name = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 1);
|
||||
if (name.length() == 0)
|
||||
{
|
||||
this->getLogManager() << m_logLevel << "Empty reference Matrix\n";
|
||||
return true;
|
||||
}
|
||||
std::ifstream file(name, std::ifstream::in);
|
||||
OV_ERROR_UNLESS_KRF(file.is_open(),
|
||||
"Error opening file [" << name << "] for reading", Kernel::ErrorType::BadFileRead);
|
||||
|
||||
//***** Parse the CSV *****
|
||||
std::string line;
|
||||
getline(file, line); // Header
|
||||
getline(file, line); // matrix line
|
||||
std::vector<std::string> data = Geometry::Split(line, ",");
|
||||
|
||||
//***** Transform to MatrixXd *****
|
||||
const auto first = data.begin() + 2, last = data.end() - 3;
|
||||
const std::vector<std::string> mat(first, last);
|
||||
const size_t n = size_t(sqrt(mat.size()));
|
||||
OV_ERROR_UNLESS_KRF(n*n == mat.size(), "Error Reference Matrix Format", Kernel::ErrorType::BadFileParsing);
|
||||
m_ref.resize(n, n);
|
||||
size_t idx = 0;
|
||||
for (size_t i = 0; i < n; ++i) { for (size_t j = 0; j < n; ++j) { m_ref(i, j) = stod(mat[idx++]); } }
|
||||
|
||||
//***** Log Information *****
|
||||
this->getLogManager() << m_logLevel << "REF Matrix : \n" << Geometry::MatrixPrint(m_ref) << "\n";
|
||||
|
||||
//***** Close the CSV *****
|
||||
file.close();
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
} // namespace Riemannian
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+93
@@ -0,0 +1,93 @@
|
||||
///-------------------------------------------------------------------------------------------------
|
||||
///
|
||||
/// \file CBoxAlgorithmCovarianceMatrixToFeatureVector.hpp
|
||||
/// \brief Class of the box computing the Feature vector with the covariance matrix.
|
||||
/// \author Thibaut Monseigne (Inria).
|
||||
/// \version 1.0.
|
||||
/// \date 17/10/2018.
|
||||
/// \copyright <a href="https://choosealicense.com/licenses/agpl-3.0/">GNU Affero General Public License v3.0</a>.
|
||||
///
|
||||
///-------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "defines.hpp"
|
||||
#include <openvibe/ov_all.h>
|
||||
#include <toolkit/ovtk_all.h>
|
||||
|
||||
#include <Eigen/Dense>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace Riemannian {
|
||||
/// <summary> The class CBoxAlgorithmCovarianceMatrixToFeatureVector describes the box Covariance Matrix To Feature Vector. </summary>
|
||||
class CBoxAlgorithmCovarianceMatrixToFeatureVector final : virtual public Toolkit::TBoxAlgorithm<IBoxAlgorithm>
|
||||
{
|
||||
public:
|
||||
void release() override { delete this; }
|
||||
|
||||
bool initialize() override;
|
||||
bool uninitialize() override;
|
||||
|
||||
bool processInput(const size_t index) override;
|
||||
bool process() override;
|
||||
|
||||
_IsDerivedFromClass_Final_(Toolkit::TBoxAlgorithm<IBoxAlgorithm>, ClassId_BoxAlgorithm_CovarianceMatrixToFeatureVector)
|
||||
|
||||
protected:
|
||||
bool featurization() const;
|
||||
bool initRef();
|
||||
|
||||
//***** Codecs *****
|
||||
Toolkit::TStreamedMatrixDecoder<CBoxAlgorithmCovarianceMatrixToFeatureVector> m_i0MatrixCodec; // Input Matrix Codec
|
||||
Toolkit::TFeatureVectorEncoder<CBoxAlgorithmCovarianceMatrixToFeatureVector> m_o0FeatureCodec; // Output Feature Codec
|
||||
//***** Matrices *****
|
||||
CMatrix* m_iMatrix = nullptr; // Input Matrix pointer
|
||||
CMatrix* m_oMatrix = nullptr; // Output Matrix pointer
|
||||
//***** Settings *****
|
||||
bool m_tangentSpace = true; // Method to use (only tangent or squeeze now)
|
||||
Eigen::MatrixXd m_ref; // Reference matrix for tangent space compute
|
||||
Kernel::ELogLevel m_logLevel = Kernel::LogLevel_Info; // Log Level
|
||||
};
|
||||
|
||||
/// <summary> Descriptor of the box Covariance Matrix To Feature Vector. </summary>
|
||||
class CBoxAlgorithmCovarianceMatrixToFeatureVectorDesc final : virtual public IBoxAlgorithmDesc
|
||||
{
|
||||
public:
|
||||
|
||||
void release() override { }
|
||||
|
||||
CString getName() const override { return "Covariance Matrix To Feature Vector"; }
|
||||
CString getAuthorName() const override { return "Thibaut Monseigne"; }
|
||||
CString getAuthorCompanyName() const override { return "Inria"; }
|
||||
CString getShortDescription() const override { return "Transforms a covariance matrix into a feature std::vector"; }
|
||||
|
||||
CString getDetailedDescription() const override
|
||||
{
|
||||
return "Transforms a covariance matrix (size : NxN) into a feature std::vector (size : N(N+1)/2).\nThe Setting Tangent Space define if the transformation into std::vector is done in the tanget space or if it is a squeeze of the upper triangular matrix";
|
||||
}
|
||||
|
||||
CString getCategory() const override { return "Riemannian Geometry"; }
|
||||
CString getVersion() const override { return "0.1"; }
|
||||
CString getStockItemName() const override { return "gtk-jump-to"; }
|
||||
|
||||
CIdentifier getCreatedClass() const override { return ClassId_BoxAlgorithm_CovarianceMatrixToFeatureVector; }
|
||||
IPluginObject* create() override { return new CBoxAlgorithmCovarianceMatrixToFeatureVector; }
|
||||
|
||||
bool getBoxPrototype(Kernel::IBoxProto& prototype) const override
|
||||
{
|
||||
prototype.addInput("Input Covariance Matrix",OV_TypeId_StreamedMatrix);
|
||||
prototype.addOutput("Output Feature Vector",OV_TypeId_FeatureVector);
|
||||
|
||||
prototype.addSetting("Tangent Space", OV_TypeId_Boolean, "true");
|
||||
prototype.addSetting("Filename to Reference Matrix (CSV, empty for Identity)", OV_TypeId_Filename, "${Player_ScenarioDirectory}/Mean.csv");
|
||||
prototype.addSetting("Log Level", OV_TypeId_LogLevel, "Information");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
_IsDerivedFromClass_Final_(IBoxAlgorithmDesc, ClassId_BoxAlgorithm_CovarianceMatrixToFeatureVectorDesc)
|
||||
};
|
||||
} // namespace Riemannian
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+171
@@ -0,0 +1,171 @@
|
||||
#include "CBoxAlgorithmCovarianceMeanCalculator.hpp"
|
||||
#include <geometry/Mean.hpp>
|
||||
#include "utils/misc.hpp"
|
||||
#include <fstream>
|
||||
|
||||
#include "geometry/Basics.hpp"
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace Riemannian {
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmCovarianceMeanCalculator::initialize()
|
||||
{
|
||||
// Stimulations
|
||||
m_i0StimulationCodec.initialize(*this, 0);
|
||||
m_iStimulation = m_i0StimulationCodec.getOutputStimulationSet();
|
||||
|
||||
// Classes
|
||||
const Kernel::IBox& boxContext = this->getStaticBoxContext();
|
||||
m_nbClass = size_t(boxContext.getInputCount() - 1);
|
||||
m_i1MatrixCodec.resize(m_nbClass);
|
||||
m_iMatrix.resize(m_nbClass);
|
||||
for (size_t k = 0; k < m_nbClass; ++k)
|
||||
{
|
||||
m_i1MatrixCodec[k].initialize(*this, k + 1);
|
||||
m_iMatrix[k] = m_i1MatrixCodec[k].getOutputMatrix();
|
||||
}
|
||||
|
||||
m_o0MatrixCodec.initialize(*this, 0);
|
||||
m_oMatrix = m_o0MatrixCodec.getInputMatrix();
|
||||
|
||||
// Settings
|
||||
m_metric = Geometry::EMetric(uint64_t(FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 0)));
|
||||
m_filename = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 1);
|
||||
m_stimulationName = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 2);
|
||||
m_logLevel = Kernel::ELogLevel(uint64_t(FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 3)));
|
||||
|
||||
this->getLogManager() << m_logLevel << toString(m_metric) << " Metric\n";
|
||||
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmCovarianceMeanCalculator::uninitialize()
|
||||
{
|
||||
this->getLogManager() << m_logLevel << m_covs.size() << " Matrices Registered, Mean Matrix : \n" << Geometry::MatrixPrint(m_mean) << "\n";
|
||||
|
||||
m_i0StimulationCodec.uninitialize();
|
||||
for (auto& codec : m_i1MatrixCodec) { codec.uninitialize(); }
|
||||
m_i1MatrixCodec.clear();
|
||||
m_iMatrix.clear();
|
||||
m_covs.clear();
|
||||
|
||||
m_o0MatrixCodec.uninitialize();
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmCovarianceMeanCalculator::processInput(const size_t /*index*/)
|
||||
{
|
||||
getBoxAlgorithmContext()->markAlgorithmAsReadyToProcess();
|
||||
return true;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmCovarianceMeanCalculator::process()
|
||||
{
|
||||
Kernel::IBoxIO& boxContext = this->getDynamicBoxContext();
|
||||
|
||||
//***** Stimulations *****
|
||||
for (size_t i = 0; i < boxContext.getInputChunkCount(0); ++i)
|
||||
{
|
||||
m_i0StimulationCodec.decode(i); // Decode the chunk
|
||||
if (m_i0StimulationCodec.isBufferReceived()) // Buffer received
|
||||
{
|
||||
for (size_t j = 0; j < m_iStimulation->getStimulationCount(); ++j)
|
||||
{
|
||||
if (m_iStimulation->getStimulationIdentifier(j) == m_stimulationName)
|
||||
{
|
||||
OV_ERROR_UNLESS_KRF(Mean(m_covs, m_mean, m_metric), "Mean Compute Error", Kernel::ErrorType::BadProcessing); // Compute the mean
|
||||
MatrixConvert(m_mean, *m_oMatrix);
|
||||
const uint64_t tStart = boxContext.getInputChunkStartTime(0, i),// Time Code Chunk Start
|
||||
tEnd = boxContext.getInputChunkEndTime(0, i); // Time Code Chunk End
|
||||
m_o0MatrixCodec.encodeBuffer(); // Buffer encoded
|
||||
boxContext.markOutputAsReadyToSend(0, tStart, tEnd); // Makes the output available
|
||||
OV_ERROR_UNLESS_KRF(saveCSV(), "CSV Writing Error", Kernel::ErrorType::BadFileWrite);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//***** Matrix *****
|
||||
for (size_t k = 0; k < m_nbClass; ++k)
|
||||
{
|
||||
for (size_t i = 0; i < boxContext.getInputChunkCount(k + 1); ++i)
|
||||
{
|
||||
m_i1MatrixCodec[k].decode(i); // Decode the chunk
|
||||
OV_ERROR_UNLESS_KRF(m_iMatrix[k]->getDimensionCount() == 2, "Invalid Input Signal", Kernel::ErrorType::BadInput);
|
||||
|
||||
if (m_i1MatrixCodec[k].isHeaderReceived() && k == 0) // First Header received
|
||||
{
|
||||
const uint64_t tStart = boxContext.getInputChunkStartTime(1, i), // Time Code Chunk Start
|
||||
tEnd = boxContext.getInputChunkEndTime(1, i); // Time Code Chunk End
|
||||
const size_t n = m_iMatrix[0]->getDimensionSize(0);
|
||||
m_oMatrix->resize(n, n); // Update Size and set to 0
|
||||
m_oMatrix->setNumLabels();
|
||||
m_o0MatrixCodec.encodeHeader(); // Header encoded
|
||||
boxContext.markOutputAsReadyToSend(0, tStart, tEnd); // Makes the output available
|
||||
}
|
||||
else if (m_i1MatrixCodec[k].isBufferReceived()) // Buffer received
|
||||
{
|
||||
Eigen::MatrixXd cov;
|
||||
MatrixConvert(*m_iMatrix[k], cov);
|
||||
m_covs.push_back(cov);
|
||||
}
|
||||
else if (m_i1MatrixCodec[k].isEndReceived() && k == 0) // First End received
|
||||
{
|
||||
const uint64_t tStart = boxContext.getInputChunkStartTime(1, i), // Time Code Chunk Start
|
||||
tEnd = boxContext.getInputChunkEndTime(1, i); // Time Code Chunk End
|
||||
m_o0MatrixCodec.encodeEnd();
|
||||
boxContext.markOutputAsReadyToSend(0, tStart, tEnd); // Makes the output available
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmCovarianceMeanCalculator::saveCSV()
|
||||
{
|
||||
if (m_filename.length() == 0) { return true; }
|
||||
|
||||
std::ofstream file;
|
||||
file.open(m_filename.toASCIIString(), std::ios::trunc);
|
||||
OV_ERROR_UNLESS_KRF(file.is_open(),
|
||||
"Error opening file [" << m_filename << "] for writing", Kernel::ErrorType::BadFileWrite);
|
||||
|
||||
// Header
|
||||
const size_t s = m_mean.rows();
|
||||
file << "Time:" << s << "x" << s << ",End Time,";
|
||||
for (size_t i = 1; i <= s; ++i) { for (size_t j = 0; j < s; ++j) { file << i << ":,"; } }
|
||||
file << "Event Id,Event Date,Event Duration\n";
|
||||
|
||||
// Matrix
|
||||
file << "0.0000000000,0.0000000000,"; // Time
|
||||
const Eigen::IOFormat fmt(Eigen::FullPrecision, 0, ", ", ", ", "", "", "", ",,,\n");
|
||||
file << m_mean.format(fmt);
|
||||
file.close();
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmCovarianceMeanCalculatorListener::onInputAdded(Kernel::IBox& box, const size_t index)
|
||||
{
|
||||
box.setInputType(index, OV_TypeId_StreamedMatrix);
|
||||
std::stringstream name;
|
||||
name << "Input Covariance Matrix " << index;
|
||||
box.setInputName(index, name.str().c_str());
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
} // namespace Riemannian
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+119
@@ -0,0 +1,119 @@
|
||||
///-------------------------------------------------------------------------------------------------
|
||||
///
|
||||
/// \file CBoxAlgorithmCovarianceMeanCalculator.hpp
|
||||
/// \brief Class of the box computing the mean of the covariance matrix.
|
||||
/// \author Thibaut Monseigne (Inria).
|
||||
/// \version 1.0.
|
||||
/// \date 12/11/2018.
|
||||
/// \copyright <a href="https://choosealicense.com/licenses/agpl-3.0/">GNU Affero General Public License v3.0</a>.
|
||||
///
|
||||
///-------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "defines.hpp"
|
||||
#include <openvibe/ov_all.h>
|
||||
#include <toolkit/ovtk_all.h>
|
||||
|
||||
#include <Eigen/Dense>
|
||||
#include <geometry/Metrics.hpp>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace Riemannian {
|
||||
/// <summary> The class CBoxAlgorithmCovarianceMeanCalculator describes the box Covariance Mean Calculator. </summary>
|
||||
class CBoxAlgorithmCovarianceMeanCalculator final : virtual public Toolkit::TBoxAlgorithm<IBoxAlgorithm>
|
||||
{
|
||||
public:
|
||||
void release() override { delete this; }
|
||||
|
||||
bool initialize() override;
|
||||
bool uninitialize() override;
|
||||
|
||||
bool processInput(const size_t index) override;
|
||||
bool process() override;
|
||||
|
||||
_IsDerivedFromClass_Final_(Toolkit::TBoxAlgorithm<IBoxAlgorithm>, ClassId_BoxAlgorithm_CovarianceMeanCalculator)
|
||||
|
||||
protected:
|
||||
//***** Codecs *****
|
||||
Toolkit::TStimulationDecoder<CBoxAlgorithmCovarianceMeanCalculator> m_i0StimulationCodec; // Input Stimulation Codec
|
||||
std::vector<Toolkit::TStreamedMatrixDecoder<CBoxAlgorithmCovarianceMeanCalculator>> m_i1MatrixCodec; // Input Signal Codec
|
||||
Toolkit::TStreamedMatrixEncoder<CBoxAlgorithmCovarianceMeanCalculator> m_o0MatrixCodec; // Output Codec
|
||||
//***** Matrices *****
|
||||
size_t m_nbClass = 1; // Number of input classes
|
||||
std::vector<CMatrix*> m_iMatrix; // Input Matrix pointer
|
||||
CMatrix* m_oMatrix = nullptr; // Output Matrix pointer
|
||||
std::vector<Eigen::MatrixXd> m_covs; // List of Covariance Matrix
|
||||
Eigen::MatrixXd m_mean; // Mean
|
||||
Geometry::EMetric m_metric = Geometry::EMetric::Euclidian; // Metric Used
|
||||
|
||||
//***** Settings *****
|
||||
IStimulationSet* m_iStimulation = nullptr; // Stimulation receiver
|
||||
uint64_t m_stimulationName = OVTK_StimulationId_TrainCompleted; // Name of stimulation to check
|
||||
Kernel::ELogLevel m_logLevel = Kernel::LogLevel_Info; // Log Level
|
||||
|
||||
// File
|
||||
CString m_filename;
|
||||
bool saveCSV();
|
||||
};
|
||||
|
||||
|
||||
/// <summary> Listener of the box Covariance Mean Calculator. </summary>
|
||||
class CBoxAlgorithmCovarianceMeanCalculatorListener final : public Toolkit::TBoxListener<IBoxListener>
|
||||
{
|
||||
public:
|
||||
|
||||
bool onInputAdded(Kernel::IBox& box, const size_t index) override;
|
||||
bool onInputRemoved(Kernel::IBox& box, const size_t index) override { return true; }
|
||||
|
||||
_IsDerivedFromClass_Final_(Toolkit::TBoxListener<IBoxListener>, CIdentifier::undefined())
|
||||
};
|
||||
|
||||
/// <summary> Descriptor of the box Covariance Mean Calculator. </summary>
|
||||
class CBoxAlgorithmCovarianceMeanCalculatorDesc final : virtual public IBoxAlgorithmDesc
|
||||
{
|
||||
public:
|
||||
|
||||
void release() override { }
|
||||
|
||||
CString getName() const override { return "Covariance Mean Calculator"; }
|
||||
CString getAuthorName() const override { return "Thibaut Monseigne"; }
|
||||
CString getAuthorCompanyName() const override { return "Inria"; }
|
||||
CString getShortDescription() const override { return "Calculation of the mean of covariance matrix."; }
|
||||
|
||||
CString getDetailedDescription() const override
|
||||
{
|
||||
return "Calculation of the mean of covariance matrix.\nThe Calculation is done when \"OVTK_StimulationId_TrainCompleted\" is received.\nThe Mean is saved in a CSV File.";
|
||||
}
|
||||
|
||||
CString getCategory() const override { return "Riemannian Geometry"; }
|
||||
CString getVersion() const override { return "0.1"; }
|
||||
CString getStockItemName() const override { return "gtk-execute"; }
|
||||
|
||||
CIdentifier getCreatedClass() const override { return ClassId_BoxAlgorithm_CovarianceMeanCalculator; }
|
||||
IPluginObject* create() override { return new CBoxAlgorithmCovarianceMeanCalculator; }
|
||||
|
||||
IBoxListener* createBoxListener() const override { return new CBoxAlgorithmCovarianceMeanCalculatorListener; }
|
||||
void releaseBoxListener(IBoxListener* listener) const override { delete listener; }
|
||||
|
||||
bool getBoxPrototype(Kernel::IBoxProto& prototype) const override
|
||||
{
|
||||
prototype.addInput("Input Stimulation", OV_TypeId_Stimulations);
|
||||
prototype.addInput("Input Covariance Matrix 1", OV_TypeId_StreamedMatrix);
|
||||
prototype.addFlag(Kernel::BoxFlag_CanAddInput);
|
||||
prototype.addOutput("Output Mean Matrix", OV_TypeId_StreamedMatrix);
|
||||
|
||||
prototype.addSetting("Metric", TypeId_Metric, toString(Geometry::EMetric::Riemann).c_str());
|
||||
prototype.addSetting("Filename to save Matrix (CSV, empty to not save)",OV_TypeId_Filename, "${Player_ScenarioDirectory}/Mean.csv");
|
||||
prototype.addSetting("Stimulation name that triggers the compute",OV_TypeId_Stimulation, "OVTK_StimulationId_TrainCompleted");
|
||||
prototype.addSetting("Log Level", OV_TypeId_LogLevel, "Information");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
_IsDerivedFromClass_Final_(IBoxAlgorithmDesc, ClassId_BoxAlgorithm_CovarianceMeanCalculatorDesc)
|
||||
};
|
||||
} // namespace Riemannian
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+134
@@ -0,0 +1,134 @@
|
||||
#include "CBoxAlgorithmFeatureVectorToCovarianceMatrix.hpp"
|
||||
#include "utils/misc.hpp"
|
||||
#include <fstream>
|
||||
|
||||
#include "geometry/Basics.hpp"
|
||||
#include "geometry/Featurization.hpp"
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace Riemannian {
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmFeatureVectorToCovarianceMatrix::initialize()
|
||||
{
|
||||
//***** Codec Initialization *****
|
||||
m_featureDecoder.initialize(*this, 0);
|
||||
m_matrixEncoder.initialize(*this, 0);
|
||||
m_iMatrix = m_featureDecoder.getOutputMatrix();
|
||||
m_oMatrix = m_matrixEncoder.getInputMatrix();
|
||||
|
||||
//***** Settings Initialization *****
|
||||
m_tangentSpace = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 0);
|
||||
m_logLevel = Kernel::ELogLevel(uint64_t(FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 2)));
|
||||
if (m_tangentSpace)
|
||||
{
|
||||
this->getLogManager() << m_logLevel << "Tangent Space\n";
|
||||
OV_ERROR_UNLESS_KRF(initRef(), "Error Reference Matrix Creation", Kernel::ErrorType::BadSetting);
|
||||
}
|
||||
else { this->getLogManager() << m_logLevel << "Squeeze Upper Matrix\n"; }
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmFeatureVectorToCovarianceMatrix::uninitialize()
|
||||
{
|
||||
m_matrixEncoder.uninitialize();
|
||||
m_featureDecoder.uninitialize();
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmFeatureVectorToCovarianceMatrix::processInput(const size_t /*index*/)
|
||||
{
|
||||
getBoxAlgorithmContext()->markAlgorithmAsReadyToProcess();
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmFeatureVectorToCovarianceMatrix::process()
|
||||
{
|
||||
Kernel::IBoxIO& boxContext = this->getDynamicBoxContext();
|
||||
|
||||
for (size_t i = 0; i < boxContext.getInputChunkCount(0); ++i)
|
||||
{
|
||||
m_featureDecoder.decode(i); // Decode the chunk
|
||||
OV_ERROR_UNLESS_KRF(m_iMatrix->getDimensionCount() == 1, "Invalid Input Signal", Kernel::ErrorType::BadInput);
|
||||
|
||||
const uint64_t start = boxContext.getInputChunkStartTime(0, i), // Time Code Chunk Start
|
||||
end = boxContext.getInputChunkEndTime(0, i); // Time Code Chunk End
|
||||
const size_t nChannels = size_t(m_iMatrix->getDimensionSize(0));
|
||||
const size_t nDim = int((sqrt(1 + 8 * nChannels) - 1) / 2);
|
||||
|
||||
if (m_featureDecoder.isHeaderReceived()) // Header received
|
||||
{
|
||||
m_oMatrix->resize(nDim, nDim); // Update Size and set to 0
|
||||
m_oMatrix->setNumLabels();
|
||||
m_matrixEncoder.encodeHeader(); // Header encoded
|
||||
}
|
||||
else if (m_featureDecoder.isBufferReceived()) // Buffer received
|
||||
{
|
||||
OV_ERROR_UNLESS_KRF(unFeaturization(), "Featurization Processing Error", Kernel::ErrorType::BadProcessing); // Transformation
|
||||
m_matrixEncoder.encodeBuffer(); // Buffer encoded
|
||||
}
|
||||
else if (m_featureDecoder.isEndReceived()) { m_matrixEncoder.encodeEnd(); } // End receivded and encoded
|
||||
|
||||
boxContext.markOutputAsReadyToSend(0, start, end); // Makes the output available
|
||||
}
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmFeatureVectorToCovarianceMatrix::unFeaturization() const
|
||||
{
|
||||
Eigen::MatrixXd cov;
|
||||
Eigen::RowVectorXd v;
|
||||
if (!MatrixConvert(*m_iMatrix, v)) { return false; }
|
||||
if (!Geometry::UnFeaturization(v, cov, m_tangentSpace, m_ref)) { return false; }
|
||||
if (!MatrixConvert(cov, *m_oMatrix)) { return false; }
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmFeatureVectorToCovarianceMatrix::initRef()
|
||||
{
|
||||
//***** Open the CSV *****
|
||||
const CString name = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 1);
|
||||
if (name.length() == 0)
|
||||
{
|
||||
this->getLogManager() << m_logLevel << "Empty reference Matrix\n";
|
||||
return true;
|
||||
}
|
||||
std::ifstream file(name, std::ifstream::in);
|
||||
OV_ERROR_UNLESS_KRF(file.is_open(), "Error opening file [" << name << "] for reading", Kernel::ErrorType::BadFileRead);
|
||||
|
||||
//***** Parse the CSV *****
|
||||
std::string line;
|
||||
getline(file, line); // Header
|
||||
getline(file, line); // matrix line
|
||||
std::vector<std::string> data = Geometry::Split(line, ",");
|
||||
|
||||
//***** Transform to MatrixXd *****
|
||||
const auto first = data.begin() + 2, last = data.end() - 3;
|
||||
const std::vector<std::string> mat(first, last);
|
||||
const size_t n = size_t(sqrt(mat.size()));
|
||||
OV_ERROR_UNLESS_KRF(n*n == mat.size(), "Error Reference Matrix Format", Kernel::ErrorType::BadFileParsing);
|
||||
m_ref.resize(n, n);
|
||||
size_t idx = 0;
|
||||
for (size_t i = 0; i < n; ++i) { for (size_t j = 0; j < n; ++j) { m_ref(i, j) = std::stod(mat[idx++]); } }
|
||||
|
||||
//***** Log Information *****
|
||||
this->getLogManager() << m_logLevel << "REF Matrix : \n" << Geometry::MatrixPrint(m_ref) << "\n";
|
||||
|
||||
//***** Close the CSV *****
|
||||
file.close();
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
} // namespace Riemannian
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+93
@@ -0,0 +1,93 @@
|
||||
///-------------------------------------------------------------------------------------------------
|
||||
///
|
||||
/// \file CBoxAlgorithmFeatureVectorToCovarianceMatrix.hpp
|
||||
/// \brief Class of the box computing the Feature vector with the covariance matrix.
|
||||
/// \author Thibaut Monseigne (Inria).
|
||||
/// \version 1.0.
|
||||
/// \date 17/10/2018.
|
||||
/// \copyright <a href="https://choosealicense.com/licenses/agpl-3.0/">GNU Affero General Public License v3.0</a>.
|
||||
///
|
||||
///-------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "defines.hpp"
|
||||
#include <openvibe/ov_all.h>
|
||||
#include <toolkit/ovtk_all.h>
|
||||
|
||||
#include <Eigen/Dense>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace Riemannian {
|
||||
/// <summary> The class CBoxAlgorithmFeatureVectorToCovarianceMatrix describes the box Covariance Matrix To Feature Vector. </summary>
|
||||
class CBoxAlgorithmFeatureVectorToCovarianceMatrix final : virtual public Toolkit::TBoxAlgorithm<IBoxAlgorithm>
|
||||
{
|
||||
public:
|
||||
void release() override { delete this; }
|
||||
|
||||
bool initialize() override;
|
||||
bool uninitialize() override;
|
||||
|
||||
bool processInput(const size_t index) override;
|
||||
bool process() override;
|
||||
|
||||
_IsDerivedFromClass_Final_(Toolkit::TBoxAlgorithm<IBoxAlgorithm>, ClassId_BoxAlgorithm_FeatureVectorToCovarianceMatrix)
|
||||
|
||||
protected:
|
||||
bool unFeaturization() const;
|
||||
bool initRef();
|
||||
|
||||
//***** Codecs *****
|
||||
Toolkit::TFeatureVectorDecoder<CBoxAlgorithmFeatureVectorToCovarianceMatrix> m_featureDecoder; // Input Feature Codec
|
||||
Toolkit::TStreamedMatrixEncoder<CBoxAlgorithmFeatureVectorToCovarianceMatrix> m_matrixEncoder; // Output Matrix Codec
|
||||
//***** Matrices *****
|
||||
CMatrix* m_iMatrix = nullptr; // Input Matrix pointer
|
||||
CMatrix* m_oMatrix = nullptr; // Output Matrix pointer
|
||||
//***** Settings *****
|
||||
bool m_tangentSpace = true; // Method to use (only tangent or squeeze now)
|
||||
Eigen::MatrixXd m_ref; // Reference matrix for tangent space compute
|
||||
Kernel::ELogLevel m_logLevel = Kernel::LogLevel_Info; // Log Level
|
||||
};
|
||||
|
||||
/// <summary> Descriptor of the box Covariance Matrix To Feature Vector. </summary>
|
||||
class CBoxAlgorithmFeatureVectorToCovarianceMatrixDesc final : virtual public IBoxAlgorithmDesc
|
||||
{
|
||||
public:
|
||||
|
||||
void release() override { }
|
||||
|
||||
CString getName() const override { return "Feature Vector To Covariance Matrix"; }
|
||||
CString getAuthorName() const override { return "Thibaut Monseigne"; }
|
||||
CString getAuthorCompanyName() const override { return "Inria"; }
|
||||
CString getShortDescription() const override { return "Transforms a feature std::vector into a covariance matrix"; }
|
||||
|
||||
CString getDetailedDescription() const override
|
||||
{
|
||||
return "Transforms a feature std::vector (size : N(N+1)/2) into a covariance matrix (size : NxN).\nThe Setting Tangent Space define if the transformation into std::vector is done in the tanget space or if it is a squeeze of the upper triangular matrix";
|
||||
}
|
||||
|
||||
CString getCategory() const override { return "Riemannian Geometry"; }
|
||||
CString getVersion() const override { return "0.1"; }
|
||||
CString getStockItemName() const override { return "gtk-jump-to"; }
|
||||
|
||||
CIdentifier getCreatedClass() const override { return ClassId_BoxAlgorithm_FeatureVectorToCovarianceMatrix; }
|
||||
IPluginObject* create() override { return new CBoxAlgorithmFeatureVectorToCovarianceMatrix; }
|
||||
|
||||
bool getBoxPrototype(Kernel::IBoxProto& prototype) const override
|
||||
{
|
||||
prototype.addInput("Input Feature Vector", OV_TypeId_FeatureVector);
|
||||
prototype.addOutput("Output Covariance Matrix", OV_TypeId_StreamedMatrix);
|
||||
|
||||
prototype.addSetting("Tangent Space", OV_TypeId_Boolean, "true");
|
||||
prototype.addSetting("Filename to Reference Matrix (CSV, empty for Identity)", OV_TypeId_Filename, "${Player_ScenarioDirectory}/Mean.csv");
|
||||
prototype.addSetting("Log Level", OV_TypeId_LogLevel, "Information");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
_IsDerivedFromClass_Final_(IBoxAlgorithmDesc, ClassId_BoxAlgorithm_FeatureVectorToCovarianceMatrixDesc)
|
||||
};
|
||||
} // namespace Riemannian
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+101
@@ -0,0 +1,101 @@
|
||||
#include "CBoxAlgorithmMatrixAffineTransformation.hpp"
|
||||
#include "utils/misc.hpp"
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace Riemannian {
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmMatrixAffineTransformation::initialize()
|
||||
{
|
||||
// Matrix
|
||||
m_iMatrixCodec.initialize(*this, 0);
|
||||
m_iMatrix = m_iMatrixCodec.getOutputMatrix();
|
||||
m_oMatrixCodec.initialize(*this, 0);
|
||||
m_oMatrix = m_oMatrixCodec.getInputMatrix();
|
||||
|
||||
m_ifilename = CString(FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 0)).toASCIIString();
|
||||
m_ofilename = CString(FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 1)).toASCIIString();
|
||||
m_continuous = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 2);
|
||||
|
||||
OV_ERROR_UNLESS_KRF(loadXML(), "Loading XML Error", Kernel::ErrorType::BadFileRead);
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmMatrixAffineTransformation::uninitialize()
|
||||
{
|
||||
if (!m_continuous && !m_samples.empty() && m_ofilename.length() != 0)
|
||||
{
|
||||
OV_ERROR_UNLESS_KRF(m_bias.computeBias(m_samples), "Bias Compute Error", Kernel::ErrorType::BadProcessing);
|
||||
}
|
||||
OV_ERROR_UNLESS_KRF(saveXML(), "Saving XML Error", Kernel::ErrorType::BadFileWrite);
|
||||
m_iMatrixCodec.uninitialize();
|
||||
m_oMatrixCodec.uninitialize();
|
||||
m_samples.clear();
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmMatrixAffineTransformation::processInput(const size_t /*index*/)
|
||||
{
|
||||
getBoxAlgorithmContext()->markAlgorithmAsReadyToProcess();
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmMatrixAffineTransformation::process()
|
||||
{
|
||||
Kernel::IBoxIO& boxContext = this->getDynamicBoxContext();
|
||||
//***** Matrix *****
|
||||
for (size_t i = 0; i < boxContext.getInputChunkCount(0); ++i)
|
||||
{
|
||||
m_iMatrixCodec.decode(i); // Decode the chunk
|
||||
OV_ERROR_UNLESS_KRF(m_iMatrix->getDimensionCount() == 2, "Invalid Input Signal", Kernel::ErrorType::BadInput);
|
||||
if (m_iMatrixCodec.isHeaderReceived()) // Header received
|
||||
{
|
||||
m_oMatrix->copyDescription(*m_iMatrix); // Update Size and set to 0
|
||||
m_oMatrixCodec.encodeHeader();
|
||||
}
|
||||
if (m_iMatrixCodec.isBufferReceived()) // Buffer received
|
||||
{
|
||||
Eigen::MatrixXd in, out;
|
||||
MatrixConvert(*m_iMatrix, in);
|
||||
m_samples.push_back(in);
|
||||
if (m_continuous) { m_bias.updateBias(in); } // We update each time
|
||||
if (m_bias.getBias().size() == 0
|
||||
) { m_bias.setBias(Eigen::MatrixXd::Identity(in.rows(), in.cols())); } // We wan't to apply a bias without bias Identity matrix is used
|
||||
m_bias.applyBias(in, out);
|
||||
MatrixConvert(out, *m_oMatrix);
|
||||
m_oMatrixCodec.encodeBuffer();
|
||||
}
|
||||
else if (m_iMatrixCodec.isEndReceived()) { m_oMatrixCodec.encodeEnd(); } // End received
|
||||
|
||||
const uint64_t tStart = boxContext.getInputChunkStartTime(0, i); // Time Code Chunk Start
|
||||
const uint64_t tEnd = boxContext.getInputChunkEndTime(0, i); // Time Code Chunk End
|
||||
boxContext.markOutputAsReadyToSend(0, tStart, tEnd);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmMatrixAffineTransformation::loadXML()
|
||||
{
|
||||
if (m_ifilename.length() == 0) { return true; } // The bias haven't initialization
|
||||
return m_bias.loadXML(m_ifilename); // The bias have initialization
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmMatrixAffineTransformation::saveXML() const
|
||||
{
|
||||
if (m_ofilename.length() == 0) { return true; } // The bias isn't saved
|
||||
return m_bias.saveXML(m_ofilename); // The bias is saved
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
} // namespace Riemannian
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+97
@@ -0,0 +1,97 @@
|
||||
///-------------------------------------------------------------------------------------------------
|
||||
///
|
||||
/// \file CBoxAlgorithmMatrixAffineTransformation.hpp
|
||||
/// \brief Class of the box Affine Transformation.
|
||||
/// \author Thibaut Monseigne (Inria).
|
||||
/// \version 1.0.
|
||||
/// \date 28/08/2019.
|
||||
/// \copyright <a href="https://choosealicense.com/licenses/agpl-3.0/">GNU Affero General Public License v3.0</a>.
|
||||
///
|
||||
///-------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "defines.hpp"
|
||||
#include <openvibe/ov_all.h>
|
||||
#include <toolkit/ovtk_all.h>
|
||||
|
||||
#include <geometry/classifier/CBias.hpp>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace Riemannian {
|
||||
/// <summary> The class CBoxAlgorithmMatrixAffineTransformation describes the box Matrix Affine Transformation. </summary>
|
||||
class CBoxAlgorithmMatrixAffineTransformation final : virtual public Toolkit::TBoxAlgorithm<IBoxAlgorithm>
|
||||
{
|
||||
public:
|
||||
void release() override { delete this; }
|
||||
|
||||
bool initialize() override;
|
||||
bool uninitialize() override;
|
||||
|
||||
bool processInput(const size_t index) override;
|
||||
bool process() override;
|
||||
|
||||
_IsDerivedFromClass_Final_(Toolkit::TBoxAlgorithm<IBoxAlgorithm>, ClassId_BoxAlgorithm_MatrixAffineTransformation)
|
||||
|
||||
protected:
|
||||
|
||||
bool loadXML();
|
||||
bool saveXML() const;
|
||||
|
||||
//***** Codecs *****
|
||||
Toolkit::TStreamedMatrixDecoder<CBoxAlgorithmMatrixAffineTransformation> m_iMatrixCodec; // Input Signal Codec
|
||||
Toolkit::TStreamedMatrixEncoder<CBoxAlgorithmMatrixAffineTransformation> m_oMatrixCodec; // Output Signal Codec
|
||||
|
||||
CMatrix *m_iMatrix = nullptr, *m_oMatrix = nullptr; // Input/Output Matrix pointer
|
||||
|
||||
//***** Settings *****
|
||||
std::string m_ifilename, m_ofilename; // Input/Output Filename
|
||||
bool m_continuous = false;
|
||||
|
||||
//***** Variable *****
|
||||
Geometry::CBias m_bias;
|
||||
std::vector<Eigen::MatrixXd> m_samples;
|
||||
};
|
||||
|
||||
/// <summary> Descriptor of the box Matrix Classifier Trainer. </summary>
|
||||
class CBoxAlgorithmMatrixAffineTransformationDesc final : virtual public IBoxAlgorithmDesc
|
||||
{
|
||||
public:
|
||||
|
||||
void release() override { }
|
||||
|
||||
CString getName() const override { return "Matrix Affine Transformation"; }
|
||||
CString getAuthorName() const override { return "Thibaut Monseigne"; }
|
||||
CString getAuthorCompanyName() const override { return "Inria"; }
|
||||
CString getShortDescription() const override { return "Compute and Apply the Bias matrix for Affine Transformation on square matrix."; }
|
||||
|
||||
CString getDetailedDescription() const override
|
||||
{
|
||||
return "Compute and Apply the Reference matrix for Affine Transformation on square matrix (isR * M * isR^(-1) = I).\nYou can load an existing matrix.\nContinuous update is to update Bias at each chunk or at the end.";
|
||||
}
|
||||
|
||||
CString getCategory() const override { return "Riemannian Geometry"; }
|
||||
CString getVersion() const override { return "0.1"; }
|
||||
CString getStockItemName() const override { return "gtk-execute"; }
|
||||
|
||||
CIdentifier getCreatedClass() const override { return ClassId_BoxAlgorithm_MatrixAffineTransformation; }
|
||||
IPluginObject* create() override { return new CBoxAlgorithmMatrixAffineTransformation; }
|
||||
|
||||
bool getBoxPrototype(Kernel::IBoxProto& prototype) const override
|
||||
{
|
||||
prototype.addInput("Square Matrix",OV_TypeId_StreamedMatrix);
|
||||
prototype.addOutput("Transformed Square Matrix", OV_TypeId_StreamedMatrix);
|
||||
|
||||
prototype.addSetting("Filename to load transformation", OV_TypeId_Filename, "${Player_ScenarioDirectory}/my-transformation-input.xml");
|
||||
prototype.addSetting("Filename to save transformation",OV_TypeId_Filename, "${Player_ScenarioDirectory}/my-transformation-output.xml");
|
||||
prototype.addSetting("Continuous Update", OV_TypeId_Boolean, "false");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
_IsDerivedFromClass_Final_(IBoxAlgorithmDesc, ClassId_BoxAlgorithm_MatrixAffineTransformationDesc)
|
||||
};
|
||||
} // namespace Riemannian
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+251
@@ -0,0 +1,251 @@
|
||||
#include "CBoxAlgorithmMatrixClassifierProcessor.hpp"
|
||||
#include <geometry/classifier/CMatrixClassifierMDMRebias.hpp>
|
||||
#include <geometry/classifier/CMatrixClassifierFgMDMRTRebias.hpp>
|
||||
#include "utils/misc.hpp"
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace Riemannian {
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmMatrixClassifierProcessor::initialize()
|
||||
{
|
||||
//***** Codecs *****
|
||||
m_i0StimulationCodec.initialize(*this, 0);
|
||||
m_i1MatrixCodec.initialize(*this, 1);
|
||||
m_o0StimulationCodec.initialize(*this, 0);
|
||||
m_o1MatrixCodec.initialize(*this, 1);
|
||||
m_o2MatrixCodec.initialize(*this, 2);
|
||||
|
||||
//***** Pointers *****
|
||||
m_i0Stimulation = m_i0StimulationCodec.getOutputStimulationSet();
|
||||
m_i1Matrix = m_i1MatrixCodec.getOutputMatrix();
|
||||
m_o0Stimulation = m_o0StimulationCodec.getInputStimulationSet();
|
||||
m_o1Matrix = m_o1MatrixCodec.getInputMatrix();
|
||||
m_o2Matrix = m_o2MatrixCodec.getInputMatrix();
|
||||
|
||||
// Settings
|
||||
m_ifilename = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 0);
|
||||
m_ofilename = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 1);
|
||||
m_adaptation = Geometry::EAdaptations(uint64_t(FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 2)));
|
||||
|
||||
m_logLevel = Kernel::ELogLevel(uint64_t(FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 3)));
|
||||
|
||||
OV_ERROR_UNLESS_KRF(m_ifilename.length() != 0, "Invalid empty model filename", Kernel::ErrorType::BadSetting);
|
||||
|
||||
OV_ERROR_UNLESS_KRF(loadXML(), "Loading XML Error", Kernel::ErrorType::BadFileRead);
|
||||
// Change matrix size
|
||||
m_o1Matrix->resize(m_classifier->getClassCount());
|
||||
m_o2Matrix->resize(m_classifier->getClassCount());
|
||||
|
||||
// Printing info
|
||||
std::stringstream msg;
|
||||
msg << std::endl << "Input Filename : " << m_ifilename << std::endl << "Output Filename : " << m_ofilename << std::endl
|
||||
<< "Method : " << m_classifier->getType() << " with " << toString(m_adaptation) << " adaptation" << std::endl
|
||||
<< "Number of classes : " << m_classifier->getClassCount() << std::endl;
|
||||
for (size_t k = 0; k < m_classifier->getClassCount(); ++k)
|
||||
{
|
||||
msg << "Stimulation for class " << k << " : " << m_stimulationClassName[k] << " => ["
|
||||
<< this->getTypeManager().getEnumerationEntryNameFromValue(OV_TypeId_Stimulation, m_stimulationClassName[k]) << "]\n";
|
||||
}
|
||||
this->getLogManager() << m_logLevel << msg.str();
|
||||
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmMatrixClassifierProcessor::uninitialize()
|
||||
{
|
||||
if (m_ofilename.length() != 0) { saveXML(); }
|
||||
m_i0StimulationCodec.uninitialize();
|
||||
m_i1MatrixCodec.uninitialize();
|
||||
m_o0StimulationCodec.uninitialize();
|
||||
m_o1MatrixCodec.uninitialize();
|
||||
m_o2MatrixCodec.uninitialize();
|
||||
|
||||
delete m_classifier; // check if pointeur is null is useless now.
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmMatrixClassifierProcessor::processInput(const size_t /*index*/)
|
||||
{
|
||||
getBoxAlgorithmContext()->markAlgorithmAsReadyToProcess();
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmMatrixClassifierProcessor::process()
|
||||
{
|
||||
Kernel::IBoxIO& boxContext = this->getDynamicBoxContext();
|
||||
//**** Stimulation *****
|
||||
if (m_adaptation != Geometry::EAdaptations::None)
|
||||
{
|
||||
for (size_t i = 0; i < boxContext.getInputChunkCount(0); ++i)
|
||||
{
|
||||
m_i0StimulationCodec.decode(i);
|
||||
if (m_i0StimulationCodec.isBufferReceived()) // Buffer received
|
||||
{
|
||||
bool finish = false;
|
||||
for (size_t j = 0; j < m_i0Stimulation->getStimulationCount() && !finish; ++j)
|
||||
{
|
||||
const uint64_t stim = m_i0Stimulation->getStimulationIdentifier(j);
|
||||
for (size_t k = 0; k < m_stimulationClassName.size() && !finish; ++k)
|
||||
{
|
||||
if (stim == this->getTypeManager().getEnumerationEntryValueFromName(OV_TypeId_Stimulation, "OVTK_GDF_End_Of_Trial"))
|
||||
{
|
||||
m_lastLabelReceived = std::numeric_limits<size_t>::max();
|
||||
finish = true;
|
||||
}
|
||||
else if (stim == m_stimulationClassName[k])
|
||||
{
|
||||
m_lastLabelReceived = k;
|
||||
finish = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//***** Matrix *****
|
||||
if (m_adaptation == Geometry::EAdaptations::None || m_lastLabelReceived < m_stimulationClassName.size())
|
||||
{
|
||||
for (size_t i = 0; i < boxContext.getInputChunkCount(1); ++i)
|
||||
{
|
||||
m_i1MatrixCodec.decode(i); // Decode the chunk
|
||||
OV_ERROR_UNLESS_KRF(m_i1Matrix->getDimensionCount() == 2, "Invalid Input Signal", Kernel::ErrorType::BadInput);
|
||||
const uint64_t tStart = boxContext.getInputChunkStartTime(1, i), // Time Code Chunk Start
|
||||
tEnd = boxContext.getInputChunkEndTime(1, i); // Time Code Chunk End
|
||||
|
||||
if (m_i1MatrixCodec.isHeaderReceived()) // Header received
|
||||
{
|
||||
m_o0StimulationCodec.encodeHeader();
|
||||
m_o1MatrixCodec.encodeHeader();
|
||||
m_o2MatrixCodec.encodeHeader();
|
||||
}
|
||||
else if (m_i1MatrixCodec.isBufferReceived()) // Buffer received
|
||||
{
|
||||
OV_ERROR_UNLESS_KRF(classify(tEnd), "Classify Error", Kernel::ErrorType::BadProcessing);
|
||||
m_o0StimulationCodec.encodeBuffer();
|
||||
m_o1MatrixCodec.encodeBuffer();
|
||||
m_o2MatrixCodec.encodeBuffer();
|
||||
}
|
||||
else if (m_i1MatrixCodec.isEndReceived()) // End received
|
||||
{
|
||||
m_o0StimulationCodec.encodeEnd();
|
||||
m_o1MatrixCodec.encodeEnd();
|
||||
m_o2MatrixCodec.encodeEnd();
|
||||
}
|
||||
for (size_t j = 0; j < 3; ++j) { boxContext.markOutputAsReadyToSend(j, tStart, tEnd); }
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmMatrixClassifierProcessor::classify(const uint64_t tEnd)
|
||||
{
|
||||
std::vector<double> distance, probability;
|
||||
Eigen::MatrixXd cov;
|
||||
size_t classId;
|
||||
MatrixConvert(*m_i1Matrix, cov);
|
||||
OV_ERROR_UNLESS_KRF(m_classifier->classify(cov, classId, distance, probability, m_adaptation, m_lastLabelReceived), "Classify Error",
|
||||
Kernel::ErrorType::BadProcessing);
|
||||
|
||||
//Fill Output
|
||||
m_o0Stimulation->setStimulationCount(1); //No append stimulation only one is used
|
||||
m_o0Stimulation->setStimulationIdentifier(0, m_stimulationClassName[classId]);
|
||||
m_o0Stimulation->setStimulationDate(0, tEnd);
|
||||
m_o0Stimulation->setStimulationDuration(0, 0);
|
||||
MatrixConvert(distance, *m_o1Matrix);
|
||||
MatrixConvert(probability, *m_o2Matrix);
|
||||
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmMatrixClassifierProcessor::loadXML()
|
||||
{
|
||||
delete m_classifier; // if (m_classifer != nullptr) useless now
|
||||
|
||||
tinyxml2::XMLDocument xmlDoc;
|
||||
// Load File
|
||||
OV_ERROR_UNLESS_KRF(xmlDoc.LoadFile(m_ifilename.toASCIIString()) == 0, "Unable to load xml file : " << m_ifilename.toASCIIString(),
|
||||
Kernel::ErrorType::BadFileRead);
|
||||
|
||||
// Load Root
|
||||
tinyxml2::XMLNode* root = xmlDoc.FirstChild();
|
||||
OV_ERROR_UNLESS_KRF(root != nullptr, "Unable to get xml root node", Kernel::ErrorType::BadFileParsing);
|
||||
|
||||
// Load Data
|
||||
tinyxml2::XMLElement* data = root->FirstChildElement("Classifier-data");
|
||||
OV_ERROR_UNLESS_KRF(data != nullptr, "Unable to get xml classifier node", Kernel::ErrorType::BadFileParsing);
|
||||
|
||||
const std::string classifierType = data->Attribute("type");
|
||||
|
||||
// Check Type
|
||||
if (classifierType == toString(Geometry::EMatrixClassifiers::MDM)) { m_classifier = new Geometry::CMatrixClassifierMDM; }
|
||||
else if (classifierType == toString(Geometry::EMatrixClassifiers::MDM_Rebias)) { m_classifier = new Geometry::CMatrixClassifierMDMRebias; }
|
||||
else if (classifierType == toString(Geometry::EMatrixClassifiers::FgMDM_RT)) { m_classifier = new Geometry::CMatrixClassifierFgMDMRT; }
|
||||
else if (classifierType == toString(Geometry::EMatrixClassifiers::FgMDM_RT_Rebias)) { m_classifier = new Geometry::CMatrixClassifierFgMDMRTRebias; }
|
||||
else { OV_ERROR_UNLESS_KRF(false, "Incorrect Classifier", Kernel::ErrorType::BadFileParsing); }
|
||||
|
||||
// Object Load
|
||||
m_classifier->loadXML(m_ifilename.toASCIIString());
|
||||
|
||||
// Load Stimulation
|
||||
m_stimulationClassName.resize(m_classifier->getClassCount());
|
||||
tinyxml2::XMLElement* element = data->FirstChildElement("Class"); // Get Fist Class Node
|
||||
for (size_t k = 0; k < m_classifier->getClassCount(); ++k) // for each class
|
||||
{
|
||||
OV_ERROR_UNLESS_KRF(element != nullptr, "Invalid class node", Kernel::ErrorType::BadFileParsing);
|
||||
const size_t idx = element->IntAttribute("class-id"); // Get Id (normally idx = k)
|
||||
OV_ERROR_UNLESS_KRF(idx == k, "Invalid Class id", Kernel::ErrorType::BadFileParsing);
|
||||
m_stimulationClassName[k] = this->getTypeManager().getEnumerationEntryValueFromName(OV_TypeId_Stimulation, element->Attribute("stimulation"));
|
||||
element = element->NextSiblingElement("Class"); // Next Class
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmMatrixClassifierProcessor::saveXML()
|
||||
{
|
||||
OV_ERROR_UNLESS_KRF(m_classifier->saveXML(m_ofilename.toASCIIString()), "Save failed", Kernel::ErrorType::BadFileWrite);
|
||||
|
||||
//***** Add Stimulation to XML *****
|
||||
tinyxml2::XMLDocument xmlDoc;
|
||||
// Load File
|
||||
OV_ERROR_UNLESS_KRF(xmlDoc.LoadFile(m_ofilename.toASCIIString()) == 0, "Unable to load xml file : " << m_ofilename.toASCIIString(),
|
||||
Kernel::ErrorType::BadFileRead);
|
||||
|
||||
// Load Root
|
||||
tinyxml2::XMLNode* root = xmlDoc.FirstChild();
|
||||
OV_ERROR_UNLESS_KRF(root != nullptr, "Unable to get xml root node", Kernel::ErrorType::BadFileParsing);
|
||||
|
||||
// Load Data
|
||||
tinyxml2::XMLElement* data = root->FirstChildElement("Classifier-data");
|
||||
OV_ERROR_UNLESS_KRF(data != nullptr, "Unable to get xml classifier node", Kernel::ErrorType::BadFileParsing);
|
||||
|
||||
tinyxml2::XMLElement* element = data->FirstChildElement("Class"); // Get Fist Class Node
|
||||
for (size_t k = 0; k < m_classifier->getClassCount(); ++k) // for each class
|
||||
{
|
||||
OV_ERROR_UNLESS_KRF(element != nullptr, "Invalid class node", Kernel::ErrorType::BadFileParsing);
|
||||
const size_t idx = element->IntAttribute("class-id"); // Get Id (normally idx = k)
|
||||
OV_ERROR_UNLESS_KRF(idx == k, "Invalid Class id", Kernel::ErrorType::BadFileParsing);
|
||||
const CString stimulationName = this->getTypeManager().getEnumerationEntryNameFromValue(OV_TypeId_Stimulation, m_stimulationClassName[k]);
|
||||
element->SetAttribute("stimulation", stimulationName.toASCIIString());
|
||||
element = element->NextSiblingElement("Class"); // Next Class
|
||||
}
|
||||
return xmlDoc.SaveFile(m_ofilename.toASCIIString()) == 0; // save XML (if != 0 it means error)
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
} // namespace Riemannian
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+105
@@ -0,0 +1,105 @@
|
||||
///-------------------------------------------------------------------------------------------------
|
||||
///
|
||||
/// \file CBoxAlgorithmMatrixClassifierProcessor.hpp
|
||||
/// \brief Class of the box Process a Matrix Classifier.
|
||||
/// \author Thibaut Monseigne (Inria).
|
||||
/// \version 1.0.
|
||||
/// \date 17/01/2018.
|
||||
/// \copyright <a href="https://choosealicense.com/licenses/agpl-3.0/">GNU Affero General Public License v3.0</a>.
|
||||
///
|
||||
///-------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "defines.hpp"
|
||||
#include <openvibe/ov_all.h>
|
||||
#include <toolkit/ovtk_all.h>
|
||||
|
||||
#include <geometry/classifier/IMatrixClassifier.hpp>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace Riemannian {
|
||||
/// <summary> The class CBoxAlgorithmMatrixClassifierProcessor describes the box Matrix Classifier Processor. </summary>
|
||||
class CBoxAlgorithmMatrixClassifierProcessor final : virtual public Toolkit::TBoxAlgorithm<IBoxAlgorithm>
|
||||
{
|
||||
public:
|
||||
void release() override { delete this; }
|
||||
|
||||
bool initialize() override;
|
||||
bool uninitialize() override;
|
||||
bool processInput(const size_t index) override;
|
||||
bool process() override;
|
||||
|
||||
_IsDerivedFromClass_Final_(Toolkit::TBoxAlgorithm<IBoxAlgorithm>, ClassId_BoxAlgorithm_MatrixClassifierProcessor)
|
||||
|
||||
protected:
|
||||
//***** Codecs *****
|
||||
Toolkit::TStimulationDecoder<CBoxAlgorithmMatrixClassifierProcessor> m_i0StimulationCodec;
|
||||
Toolkit::TStreamedMatrixDecoder<CBoxAlgorithmMatrixClassifierProcessor> m_i1MatrixCodec;
|
||||
Toolkit::TStimulationEncoder<CBoxAlgorithmMatrixClassifierProcessor> m_o0StimulationCodec;
|
||||
Toolkit::TStreamedMatrixEncoder<CBoxAlgorithmMatrixClassifierProcessor> m_o1MatrixCodec, m_o2MatrixCodec;
|
||||
|
||||
//***** Matrices *****
|
||||
CMatrix *m_i1Matrix = nullptr, *m_o1Matrix = nullptr, *m_o2Matrix = nullptr; // Matrix Pointer
|
||||
Eigen::MatrixXd m_distance, m_probability; // Eigen Matrix
|
||||
|
||||
//***** Stimulations *****
|
||||
IStimulationSet *m_i0Stimulation = nullptr, // Stimulation receiver
|
||||
*m_o0Stimulation = nullptr; // Stimulation sender
|
||||
std::vector<uint64_t> m_stimulationClassName; // Name of stimulation to check for each class
|
||||
|
||||
Geometry::IMatrixClassifier* m_classifier = nullptr; // Classifier
|
||||
size_t m_lastLabelReceived = std::numeric_limits<size_t>::max(); // Last label received for Supervised Adaptation
|
||||
Geometry::EAdaptations m_adaptation = Geometry::EAdaptations::None; // Adaptation Method
|
||||
|
||||
//***** Setting *****
|
||||
CString m_ifilename, m_ofilename;
|
||||
Kernel::ELogLevel m_logLevel = Kernel::LogLevel_Info; // Log Level
|
||||
|
||||
bool classify(uint64_t tEnd);
|
||||
bool loadXML();
|
||||
bool saveXML();
|
||||
};
|
||||
|
||||
/// <summary> Descriptor of the box Matrix Classifier Processor. </summary>
|
||||
class CBoxAlgorithmMatrixClassifierProcessorDesc final : virtual public IBoxAlgorithmDesc
|
||||
{
|
||||
public:
|
||||
|
||||
void release() override { }
|
||||
|
||||
CString getName() const override { return "Matrix Classifier Processor"; }
|
||||
CString getAuthorName() const override { return "Thibaut Monseigne"; }
|
||||
CString getAuthorCompanyName() const override { return "Inria"; }
|
||||
CString getShortDescription() const override { return "Matrix classifier Processor."; }
|
||||
CString getDetailedDescription() const override { return "Matrix classifier Processor."; }
|
||||
CString getCategory() const override { return "Riemannian Geometry"; }
|
||||
CString getVersion() const override { return "0.1"; }
|
||||
CString getStockItemName() const override { return "gtk-execute"; }
|
||||
|
||||
CIdentifier getCreatedClass() const override { return ClassId_BoxAlgorithm_MatrixClassifierProcessor; }
|
||||
IPluginObject* create() override { return new CBoxAlgorithmMatrixClassifierProcessor; }
|
||||
|
||||
bool getBoxPrototype(Kernel::IBoxProto& prototype) const override
|
||||
{
|
||||
prototype.addInput("Expected Label", OV_TypeId_Stimulations);
|
||||
prototype.addInput("Input Matrix",OV_TypeId_StreamedMatrix);
|
||||
|
||||
prototype.addOutput("Label",OV_TypeId_Stimulations);
|
||||
prototype.addOutput("Distance",OV_TypeId_StreamedMatrix);
|
||||
prototype.addOutput("Probability",OV_TypeId_StreamedMatrix);
|
||||
|
||||
prototype.addSetting("Filename to load classifier model", OV_TypeId_Filename, "${Player_ScenarioDirectory}/input-classifier.xml");
|
||||
prototype.addSetting("Filename to save classifier model",OV_TypeId_Filename, "${Player_ScenarioDirectory}/output-classifier.xml");
|
||||
prototype.addSetting("Adaptation", TypeId_Classifier_Adaptation, toString(Geometry::EAdaptations::None).c_str());
|
||||
prototype.addSetting("Log Level", OV_TypeId_LogLevel, "Information");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
_IsDerivedFromClass_Final_(IBoxAlgorithmDesc, ClassId_BoxAlgorithm_MatrixClassifierProcessorDesc)
|
||||
};
|
||||
} // namespace Riemannian
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+231
@@ -0,0 +1,231 @@
|
||||
#include "CBoxAlgorithmMatrixClassifierTrainer.hpp"
|
||||
#include <geometry/3rd-party/tinyxml2.h>
|
||||
#include <geometry/classifier/CMatrixClassifierMDMRebias.hpp>
|
||||
#include <geometry/classifier/CMatrixClassifierFgMDMRTRebias.hpp>
|
||||
#include "utils/misc.hpp"
|
||||
#include "boost/format.hpp"
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace Riemannian {
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmMatrixClassifierTrainer::initialize()
|
||||
{
|
||||
// Stimulations
|
||||
m_i0StimulationCodec.initialize(*this, 0);
|
||||
m_iStimulation = m_i0StimulationCodec.getOutputStimulationSet();
|
||||
|
||||
m_o0StimulationCodec.initialize(*this, 0);
|
||||
m_oStimulation = m_o0StimulationCodec.getInputStimulationSet();
|
||||
|
||||
// Classes
|
||||
const Kernel::IBox& boxContext = this->getStaticBoxContext();
|
||||
m_nbClass = boxContext.getInputCount() - 1;
|
||||
m_i1MatrixCodec.resize(m_nbClass);
|
||||
m_iMatrix.resize(m_nbClass);
|
||||
m_covs.resize(m_nbClass);
|
||||
m_stimulationClassName.resize(m_nbClass);
|
||||
for (size_t k = 0; k < m_nbClass; ++k)
|
||||
{
|
||||
m_i1MatrixCodec[k].initialize(*this, k + 1);
|
||||
m_iMatrix[k] = m_i1MatrixCodec[k].getOutputMatrix();
|
||||
m_stimulationClassName[k] = uint64_t(FSettingValueAutoCast(*this->getBoxAlgorithmContext(), k + NON_CLASS_SETTINGS_COUNT));
|
||||
}
|
||||
|
||||
// Settings
|
||||
m_stimulationName = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 0);
|
||||
m_filename = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 1);
|
||||
m_method = Geometry::EMatrixClassifiers(uint64_t(FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 2)));
|
||||
m_metric = Geometry::EMetric(uint64_t(FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 3)));
|
||||
m_logLevel = Kernel::ELogLevel(uint64_t(FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 4)));
|
||||
|
||||
OV_ERROR_UNLESS_KRF(m_filename.length() != 0, "Invalid empty model filename", Kernel::ErrorType::BadSetting);
|
||||
|
||||
// Printing info
|
||||
this->getLogManager() << m_logLevel << "\nNumber of classes : " << m_nbClass << "\nFilename : " << m_filename << "\nMethod : "
|
||||
<< toString(m_method) << "\n";
|
||||
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmMatrixClassifierTrainer::uninitialize()
|
||||
{
|
||||
m_i0StimulationCodec.uninitialize();
|
||||
for (auto& codec : m_i1MatrixCodec) { codec.uninitialize(); }
|
||||
m_i1MatrixCodec.clear();
|
||||
m_iMatrix.clear();
|
||||
for (auto& cov : m_covs) { cov.clear(); }
|
||||
m_covs.clear();
|
||||
m_stimulationClassName.clear();
|
||||
|
||||
m_o0StimulationCodec.uninitialize();
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmMatrixClassifierTrainer::processInput(const size_t /*index*/)
|
||||
{
|
||||
getBoxAlgorithmContext()->markAlgorithmAsReadyToProcess();
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmMatrixClassifierTrainer::process()
|
||||
{
|
||||
if (!m_isTrain)
|
||||
{
|
||||
Kernel::IBoxIO& boxContext = this->getDynamicBoxContext();
|
||||
|
||||
//***** Stimulations *****
|
||||
for (size_t i = 0; i < boxContext.getInputChunkCount(0); ++i)
|
||||
{
|
||||
m_i0StimulationCodec.decode(i); // Decode the chunk
|
||||
const uint64_t start = boxContext.getInputChunkStartTime(0, i), // Time Code Chunk Start
|
||||
end = boxContext.getInputChunkEndTime(0, i); // Time Code Chunk End
|
||||
|
||||
if (m_i0StimulationCodec.isHeaderReceived())
|
||||
{
|
||||
m_o0StimulationCodec.encodeHeader();
|
||||
boxContext.markOutputAsReadyToSend(0, 0, 0);
|
||||
}
|
||||
if (m_i0StimulationCodec.isBufferReceived()) // Buffer received
|
||||
{
|
||||
for (size_t j = 0; j < m_iStimulation->getStimulationCount(); ++j)
|
||||
{
|
||||
if (m_iStimulation->getStimulationIdentifier(j) == m_stimulationName)
|
||||
{
|
||||
OV_ERROR_UNLESS_KRF(train(), "Train failed", Kernel::ErrorType::BadProcessing);
|
||||
const uint64_t stim = this->getTypeManager().getEnumerationEntryValueFromName(
|
||||
OV_TypeId_Stimulation, "OVTK_StimulationId_TrainCompleted");
|
||||
m_oStimulation->appendStimulation(stim, m_iStimulation->getStimulationDate(j), 0);
|
||||
m_isTrain = true;
|
||||
}
|
||||
}
|
||||
m_o0StimulationCodec.encodeBuffer();
|
||||
boxContext.markOutputAsReadyToSend(0, start, end);
|
||||
}
|
||||
if (m_i0StimulationCodec.isEndReceived())
|
||||
{
|
||||
m_o0StimulationCodec.encodeEnd();
|
||||
boxContext.markOutputAsReadyToSend(0, start, end);
|
||||
}
|
||||
}
|
||||
|
||||
//***** Matrix *****
|
||||
for (size_t k = 0; k < m_nbClass; ++k)
|
||||
{
|
||||
for (size_t i = 0; i < boxContext.getInputChunkCount(k + 1); ++i)
|
||||
{
|
||||
m_i1MatrixCodec[k].decode(i); // Decode the chunk
|
||||
OV_ERROR_UNLESS_KRF(m_iMatrix[k]->getDimensionCount() == 2, "Invalid Input Signal", Kernel::ErrorType::BadInput);
|
||||
|
||||
if (m_i1MatrixCodec[k].isBufferReceived()) // Buffer received
|
||||
{
|
||||
Eigen::MatrixXd cov;
|
||||
MatrixConvert(*m_iMatrix[k], cov);
|
||||
m_covs[k].push_back(cov);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmMatrixClassifierTrainer::train()
|
||||
{
|
||||
Geometry::IMatrixClassifier* matrixClassifier;
|
||||
if (m_method == Geometry::EMatrixClassifiers::MDM) { matrixClassifier = new Geometry::CMatrixClassifierMDM; }
|
||||
else if (m_method == Geometry::EMatrixClassifiers::MDM_Rebias) { matrixClassifier = new Geometry::CMatrixClassifierMDMRebias; }
|
||||
else if (m_method == Geometry::EMatrixClassifiers::FgMDM_RT) { matrixClassifier = new Geometry::CMatrixClassifierFgMDMRT; }
|
||||
else if (m_method == Geometry::EMatrixClassifiers::FgMDM_RT_Rebias) { matrixClassifier = new Geometry::CMatrixClassifierFgMDMRTRebias; }
|
||||
else { OV_ERROR_UNLESS_KRF(false, "Incorrect Selected Method", Kernel::ErrorType::BadSetting); }
|
||||
|
||||
this->getLogManager() << m_logLevel << "Train Beginning...\n";
|
||||
OV_ERROR_UNLESS_KRF(matrixClassifier->train(m_covs), "Train failed", Kernel::ErrorType::BadProcessing);
|
||||
this->getLogManager() << m_logLevel << "Train Finished. Save Beginning...\n";
|
||||
OV_ERROR_UNLESS_KRF(saveXML(matrixClassifier), "Save failed", Kernel::ErrorType::BadProcessing);
|
||||
this->getLogManager() << m_logLevel << "Save Finished.\n";
|
||||
|
||||
delete matrixClassifier;
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmMatrixClassifierTrainer::saveXML(Geometry::IMatrixClassifier* classifier)
|
||||
{
|
||||
OV_ERROR_UNLESS_KRF(classifier->saveXML(m_filename.toASCIIString()), "Save failed", Kernel::ErrorType::BadFileWrite);
|
||||
|
||||
//***** Add Stimulation to XML *****
|
||||
tinyxml2::XMLDocument xmlDoc;
|
||||
// Load File
|
||||
OV_ERROR_UNLESS_KRF(xmlDoc.LoadFile(m_filename.toASCIIString()) == 0, "Unable to load xml file : " << m_filename.toASCIIString(),
|
||||
Kernel::ErrorType::BadFileRead);
|
||||
|
||||
// Load Root
|
||||
tinyxml2::XMLNode* root = xmlDoc.FirstChild();
|
||||
OV_ERROR_UNLESS_KRF(root != nullptr, "Unable to get xml root node", Kernel::ErrorType::BadFileParsing);
|
||||
|
||||
// Load Data
|
||||
tinyxml2::XMLElement* data = root->FirstChildElement("Classifier-data");
|
||||
OV_ERROR_UNLESS_KRF(data != nullptr, "Unable to get xml classifier node", Kernel::ErrorType::BadFileParsing);
|
||||
|
||||
tinyxml2::XMLElement* element = data->FirstChildElement("Class"); // Get Fist Class Node
|
||||
for (size_t k = 0; k < classifier->getClassCount(); ++k) // for each class
|
||||
{
|
||||
OV_ERROR_UNLESS_KRF(element != nullptr, "Invalid class node", Kernel::ErrorType::BadFileParsing);
|
||||
const size_t idx = element->IntAttribute("class-id"); // Get Id (normally idx = k)
|
||||
OV_ERROR_UNLESS_KRF(idx == k, "Invalid Class id", Kernel::ErrorType::BadFileParsing);
|
||||
const CString stimulationName = this->getTypeManager().getEnumerationEntryNameFromValue(OV_TypeId_Stimulation, m_stimulationClassName[k]);
|
||||
element->SetAttribute("stimulation", stimulationName.toASCIIString());
|
||||
element = element->NextSiblingElement("Class"); // Next Class
|
||||
}
|
||||
return xmlDoc.SaveFile(m_filename.toASCIIString()) == 0; // save XML (if != 0 it means error)
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmMatrixClassifierTrainerListener::onInputAdded(Kernel::IBox& box, const size_t index)
|
||||
{
|
||||
box.setInputType(index, OV_TypeId_StreamedMatrix);
|
||||
box.setInputName(index, ("Matrix for class " + std::to_string(index)).c_str());
|
||||
|
||||
const boost::format stimulation = boost::format("OVTK_StimulationId_Label_%02u") % index;
|
||||
box.addSetting(("Class " + std::to_string(index) + " label").c_str(), OV_TypeId_Stimulation, stimulation.str().c_str());
|
||||
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool CBoxAlgorithmMatrixClassifierTrainerListener::onInputRemoved(Kernel::IBox& box, const size_t index)
|
||||
{
|
||||
const size_t offset = CBoxAlgorithmMatrixClassifierTrainer::NON_CLASS_SETTINGS_COUNT - 1;
|
||||
// (avoid the 5 first setting but class begin at input 1 so + 4)
|
||||
box.removeSetting(index + offset);
|
||||
//check if the removed class is not the last
|
||||
if (index != box.getInputCount())
|
||||
{
|
||||
for (size_t k = index; k < box.getInputCount(); ++k)
|
||||
{
|
||||
box.setInputName(k, ("Matrix for class " + std::to_string(k)).c_str());
|
||||
|
||||
std::string stimulation = (boost::format("OVTK_StimulationId_Label_%02u") % k).str();
|
||||
box.setSettingName(k + offset - 1, ("Class " + std::to_string(k) + " label").c_str()); // -1 because one is removed
|
||||
box.setSettingDefaultValue(k + offset - 1, stimulation.c_str());
|
||||
box.setSettingValue(k + offset - 1, stimulation.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
} // namespace Riemannian
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+128
@@ -0,0 +1,128 @@
|
||||
///-------------------------------------------------------------------------------------------------
|
||||
///
|
||||
/// \file CBoxAlgorithmMatrixClassifierProcessor.hpp
|
||||
/// \brief Class of the box Train a Matrix Classifier.
|
||||
/// \author Thibaut Monseigne (Inria).
|
||||
/// \version 1.0.
|
||||
/// \date 17/01/2018.
|
||||
/// \copyright <a href="https://choosealicense.com/licenses/agpl-3.0/">GNU Affero General Public License v3.0</a>.
|
||||
///
|
||||
///-------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "defines.hpp"
|
||||
#include <openvibe/ov_all.h>
|
||||
#include <toolkit/ovtk_all.h>
|
||||
|
||||
#include <geometry/classifier/IMatrixClassifier.hpp>
|
||||
#include <geometry/Metrics.hpp>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace Riemannian {
|
||||
/// <summary> The class CBoxAlgorithmMatrixClassifierTrainer describes the box Matrix Classifier Trainer. </summary>
|
||||
class CBoxAlgorithmMatrixClassifierTrainer final : virtual public Toolkit::TBoxAlgorithm<IBoxAlgorithm>
|
||||
{
|
||||
public:
|
||||
void release() override { delete this; }
|
||||
|
||||
bool initialize() override;
|
||||
bool uninitialize() override;
|
||||
|
||||
bool processInput(const size_t index) override;
|
||||
bool process() override;
|
||||
|
||||
_IsDerivedFromClass_Final_(Toolkit::TBoxAlgorithm<IBoxAlgorithm>, ClassId_BoxAlgorithm_MatrixClassifierTrainer)
|
||||
|
||||
static const size_t NON_CLASS_SETTINGS_COUNT = 5; // Train trigger + Filename + Method + Metric + Log Level
|
||||
|
||||
protected:
|
||||
//***** Codecs *****
|
||||
Toolkit::TStimulationDecoder<CBoxAlgorithmMatrixClassifierTrainer> m_i0StimulationCodec;
|
||||
std::vector<Toolkit::TStreamedMatrixDecoder<CBoxAlgorithmMatrixClassifierTrainer>> m_i1MatrixCodec; // Input Signal Codec
|
||||
Toolkit::TStimulationEncoder<CBoxAlgorithmMatrixClassifierTrainer> m_o0StimulationCodec;
|
||||
|
||||
//***** Matrices *****
|
||||
size_t m_nbClass = 2; // Number of input classes
|
||||
std::vector<CMatrix*> m_iMatrix; // Input Matrix pointer
|
||||
std::vector<std::vector<Eigen::MatrixXd>> m_covs; // List of Covariance Matrix one class by row
|
||||
|
||||
//***** Stimulations *****
|
||||
IStimulationSet *m_iStimulation = nullptr, // Stimulation receiver
|
||||
*m_oStimulation = nullptr; // Stimulation sender
|
||||
uint64_t m_stimulationName = OVTK_StimulationId_Train; // Name of stimulation to check for train launch
|
||||
std::vector<uint64_t> m_stimulationClassName; // Name of stimulation to check for each class
|
||||
bool m_isTrain = false;
|
||||
|
||||
//***** Settings *****
|
||||
Kernel::ELogLevel m_logLevel = Kernel::LogLevel_Info; // Log Level
|
||||
Geometry::EMatrixClassifiers m_method = Geometry::EMatrixClassifiers::MDM;
|
||||
Geometry::EMetric m_metric = Geometry::EMetric::Riemann;
|
||||
|
||||
//***** File *****
|
||||
CString m_filename;
|
||||
|
||||
bool train();
|
||||
bool saveXML(Geometry::IMatrixClassifier* classifier);
|
||||
};
|
||||
|
||||
/// <summary> Listener of the box Matrix Classifier Trainer. </summary>
|
||||
class CBoxAlgorithmMatrixClassifierTrainerListener final : public Toolkit::TBoxListener<IBoxListener>
|
||||
{
|
||||
public:
|
||||
|
||||
bool onInputAdded(Kernel::IBox& box, const size_t index) override;
|
||||
bool onInputRemoved(Kernel::IBox& box, const size_t index) override;
|
||||
|
||||
_IsDerivedFromClass_Final_(Toolkit::TBoxListener<IBoxListener>, CIdentifier::undefined())
|
||||
};
|
||||
|
||||
/// <summary> Descriptor of the box Matrix Classifier Trainer. </summary>
|
||||
class CBoxAlgorithmMatrixClassifierTrainerDesc final : virtual public IBoxAlgorithmDesc
|
||||
{
|
||||
public:
|
||||
|
||||
void release() override { }
|
||||
|
||||
CString getName() const override { return "Matrix Classifier Trainer"; }
|
||||
CString getAuthorName() const override { return "Thibaut Monseigne"; }
|
||||
CString getAuthorCompanyName() const override { return "Inria"; }
|
||||
CString getShortDescription() const override { return "Matrix classifier trainer."; }
|
||||
CString getDetailedDescription() const override { return "Matrix classifier trainer."; }
|
||||
CString getCategory() const override { return "Riemannian Geometry"; }
|
||||
CString getVersion() const override { return "0.1"; }
|
||||
CString getStockItemName() const override { return "gtk-execute"; }
|
||||
|
||||
CIdentifier getCreatedClass() const override { return ClassId_BoxAlgorithm_MatrixClassifierTrainer; }
|
||||
IPluginObject* create() override { return new CBoxAlgorithmMatrixClassifierTrainer; }
|
||||
|
||||
IBoxListener* createBoxListener() const override { return new CBoxAlgorithmMatrixClassifierTrainerListener; }
|
||||
void releaseBoxListener(IBoxListener* listener) const override { delete listener; }
|
||||
|
||||
bool getBoxPrototype(Kernel::IBoxProto& prototype) const override
|
||||
{
|
||||
prototype.addInput("Stimulations",OV_TypeId_Stimulations);
|
||||
prototype.addInput("Matrix for class 1",OV_TypeId_StreamedMatrix);
|
||||
prototype.addInput("Matrix for class 2",OV_TypeId_StreamedMatrix);
|
||||
|
||||
prototype.addFlag(Kernel::BoxFlag_CanAddInput);
|
||||
|
||||
prototype.addOutput("Tran-completed Flag",OV_TypeId_Stimulations);
|
||||
|
||||
prototype.addSetting("Train trigger", OV_TypeId_Stimulation, "OVTK_StimulationId_Train");
|
||||
prototype.addSetting("Filename to save classifier model",OV_TypeId_Filename, "${Player_ScenarioDirectory}/my-classifier.xml");
|
||||
prototype.addSetting("Method", TypeId_Matrix_Classifier, toString(Geometry::EMatrixClassifiers::MDM).c_str());
|
||||
prototype.addSetting("Metric", TypeId_Metric, toString(Geometry::EMetric::Riemann).c_str());
|
||||
prototype.addSetting("Log Level", OV_TypeId_LogLevel, "Information");
|
||||
prototype.addSetting("Class 1 label", OV_TypeId_Stimulation, "OVTK_StimulationId_Label_01");
|
||||
prototype.addSetting("Class 2 label", OV_TypeId_Stimulation, "OVTK_StimulationId_Label_02");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
_IsDerivedFromClass_Final_(IBoxAlgorithmDesc, ClassId_BoxAlgorithm_MatrixClassifierTrainerDesc)
|
||||
};
|
||||
} // namespace Riemannian
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
@@ -0,0 +1,41 @@
|
||||
///-------------------------------------------------------------------------------------------------
|
||||
///
|
||||
/// \file defines.hpp
|
||||
/// \brief Defines list for Setting, Shortcut Macro and const.
|
||||
/// \author Thibaut Monseigne (Inria).
|
||||
/// \version 1.0.
|
||||
/// \date 26/10/2018.
|
||||
/// \copyright <a href="https://choosealicense.com/licenses/agpl-3.0/">GNU Affero General Public License v3.0</a>.
|
||||
/// \remarks
|
||||
/// - List of Estimator inspired by the work of Alexandre Barachant : <a href="https://github.com/alexandrebarachant/pyRiemann">pyRiemann</a> (<a href="https://github.com/alexandrebarachant/pyRiemann/blob/master/LICENSE">License</a>).
|
||||
/// - List of Metrics inspired by the work of Alexandre Barachant : <a href="https://github.com/alexandrebarachant/pyRiemann">pyRiemann</a> (<a href="https://github.com/alexandrebarachant/pyRiemann/blob/master/LICENSE">License</a>).
|
||||
///
|
||||
///-------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
namespace OpenViBE {
|
||||
// Boxes
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
#define ClassId_BoxAlgorithm_CovarianceMeanCalculator CIdentifier(0x67955ea4, 0x7c643c0f)
|
||||
#define ClassId_BoxAlgorithm_CovarianceMeanCalculatorDesc CIdentifier(0x62e8f759, 0xd59d82a9)
|
||||
#define ClassId_BoxAlgorithm_MatrixClassifierTrainer CIdentifier(0xc0b79b42, 0x4150c837)
|
||||
#define ClassId_BoxAlgorithm_MatrixClassifierTrainerDesc CIdentifier(0x26f4fa93, 0x704d39dd)
|
||||
#define ClassId_BoxAlgorithm_MatrixClassifierProcessor CIdentifier(0x918f6952, 0xb22ddf0d)
|
||||
#define ClassId_BoxAlgorithm_MatrixClassifierProcessorDesc CIdentifier(0x8cf29eec, 0x223fbfc5)
|
||||
#define ClassId_BoxAlgorithm_CovarianceMatrixToFeatureVector CIdentifier(0x7c265dba, 0x202c1f70)
|
||||
#define ClassId_BoxAlgorithm_CovarianceMatrixToFeatureVectorDesc CIdentifier(0xc0fb0445, 0x0d1cd546)
|
||||
#define ClassId_BoxAlgorithm_FeatureVectorToCovarianceMatrix CIdentifier(0x7c265dba, 0x202c1f71)
|
||||
#define ClassId_BoxAlgorithm_FeatureVectorToCovarianceMatrixDesc CIdentifier(0xc0fb0445, 0x0d1cd541)
|
||||
#define ClassId_BoxAlgorithm_CovarianceMatrixCalculator CIdentifier(0x9a93af80, 0x6449c826)
|
||||
#define ClassId_BoxAlgorithm_CovarianceMatrixCalculatorDesc CIdentifier(0x12fcd91f, 0xd1d8f678)
|
||||
#define ClassId_BoxAlgorithm_MatrixAffineTransformation CIdentifier(0x1BAA7180, 0x52CB19B8)
|
||||
#define ClassId_BoxAlgorithm_MatrixAffineTransformationDesc CIdentifier(0x0AF511E5, 0x27137BBA)
|
||||
|
||||
// Méthodes/Types Lists
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
#define TypeId_Estimator CIdentifier(0x5261636B, 0x45535449)
|
||||
#define TypeId_Metric CIdentifier(0x5261636B, 0x4D455452)
|
||||
#define TypeId_Matrix_Classifier CIdentifier(0x5261636B, 0x436C6173)
|
||||
#define TypeId_Classifier_Adaptation CIdentifier(0x5261636B, 0x41646170)
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
} // namespace OpenViBE
|
||||
@@ -0,0 +1,64 @@
|
||||
#include <openvibe/ov_all.h>
|
||||
#include "defines.hpp"
|
||||
|
||||
// Boxes Includes
|
||||
#include "boxes/CBoxAlgorithmCovarianceMatrixCalculator.hpp"
|
||||
#include "boxes/CBoxAlgorithmCovarianceMatrixToFeatureVector.hpp"
|
||||
#include "boxes/CBoxAlgorithmFeatureVectorToCovarianceMatrix.hpp"
|
||||
#include "boxes/CBoxAlgorithmCovarianceMeanCalculator.hpp"
|
||||
#include "boxes/CBoxAlgorithmMatrixClassifierTrainer.hpp"
|
||||
#include "boxes/CBoxAlgorithmMatrixClassifierProcessor.hpp"
|
||||
#include "boxes/CBoxAlgorithmMatrixAffineTransformation.hpp"
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
|
||||
template <typename T>
|
||||
static void setEnumeration(const Kernel::IPluginModuleContext& context, const CIdentifier& typeID, const std::string& name, const std::vector<T>& enumeration)
|
||||
{
|
||||
context.getTypeManager().registerEnumerationType(typeID, name.c_str());
|
||||
for (const auto& e : enumeration) { context.getTypeManager().registerEnumerationEntry(typeID, toString(e).c_str(), size_t(e)); }
|
||||
}
|
||||
|
||||
|
||||
OVP_Declare_Begin()
|
||||
// Register boxes
|
||||
OVP_Declare_New(Riemannian::CBoxAlgorithmCovarianceMatrixCalculatorDesc);
|
||||
OVP_Declare_New(Riemannian::CBoxAlgorithmCovarianceMatrixToFeatureVectorDesc);
|
||||
OVP_Declare_New(Riemannian::CBoxAlgorithmFeatureVectorToCovarianceMatrixDesc);
|
||||
OVP_Declare_New(Riemannian::CBoxAlgorithmCovarianceMeanCalculatorDesc);
|
||||
OVP_Declare_New(Riemannian::CBoxAlgorithmMatrixClassifierTrainerDesc);
|
||||
OVP_Declare_New(Riemannian::CBoxAlgorithmMatrixClassifierProcessorDesc);
|
||||
OVP_Declare_New(Riemannian::CBoxAlgorithmMatrixAffineTransformationDesc);
|
||||
|
||||
// Enumeration Estimator
|
||||
const std::vector<Geometry::EEstimator> estimators = {
|
||||
Geometry::EEstimator::COV, Geometry::EEstimator::COR, Geometry::EEstimator::LWF,
|
||||
Geometry::EEstimator::SCM, Geometry::EEstimator::OAS, Geometry::EEstimator::IDE
|
||||
};
|
||||
setEnumeration(context, TypeId_Estimator, "Estimator", estimators);
|
||||
|
||||
// Enumeration Metric
|
||||
const std::vector<Geometry::EMetric> metrics = {
|
||||
Geometry::EMetric::Riemann, Geometry::EMetric::Euclidian, Geometry::EMetric::LogEuclidian, Geometry::EMetric::LogDet,
|
||||
Geometry::EMetric::Kullback, Geometry::EMetric::Harmonic, Geometry::EMetric::Identity
|
||||
};
|
||||
setEnumeration(context, TypeId_Metric, "Metric", metrics);
|
||||
|
||||
// Enumeration Classifier
|
||||
const std::vector<Geometry::EMatrixClassifiers> classifiers = {
|
||||
Geometry::EMatrixClassifiers::MDM, Geometry::EMatrixClassifiers::MDM_Rebias,
|
||||
Geometry::EMatrixClassifiers::FgMDM_RT, Geometry::EMatrixClassifiers::FgMDM_RT_Rebias
|
||||
};
|
||||
setEnumeration(context, TypeId_Matrix_Classifier, "Matrix Classifier", classifiers);
|
||||
|
||||
// Enumeration Classifier Adaptater
|
||||
const std::vector<Geometry::EAdaptations> adaptations = {
|
||||
Geometry::EAdaptations::None, Geometry::EAdaptations::Supervised, Geometry::EAdaptations::Unsupervised
|
||||
};
|
||||
setEnumeration(context, TypeId_Classifier_Adaptation, "Classifier Adaptation", adaptations);
|
||||
|
||||
OVP_Declare_End()
|
||||
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
@@ -0,0 +1,67 @@
|
||||
#include "utils/misc.hpp"
|
||||
|
||||
//*****************************************************
|
||||
//******************** CONVERSIONS ********************
|
||||
//*****************************************************
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool MatrixConvert(const OpenViBE::CMatrix& in, Eigen::MatrixXd& out)
|
||||
{
|
||||
if (in.getDimensionCount() != 2) { return false; }
|
||||
out.resize(in.getDimensionSize(0), in.getDimensionSize(1));
|
||||
|
||||
// double loop to avoid the problem of row major and column major storage
|
||||
size_t idx = 0;
|
||||
const double* buffer = in.getBuffer();
|
||||
for (size_t i = 0, nR = out.rows(); i < nR; ++i) { for (size_t j = 0, nC = out.cols(); j < nC; ++j) { out(i, j) = buffer[idx++]; } }
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool MatrixConvert(const Eigen::MatrixXd& in, OpenViBE::CMatrix& out)
|
||||
{
|
||||
if (in.rows() == 0 || in.cols() == 0) { return false; }
|
||||
const size_t nR = in.rows(), nC = in.cols();
|
||||
out.resize(nR, nC);
|
||||
out.setNumLabels();
|
||||
|
||||
// double loop to avoid the problem of row major and column major storage
|
||||
size_t idx = 0;
|
||||
double* buffer = out.getBuffer();
|
||||
for (size_t i = 0; i < nR; ++i) { for (size_t j = 0; j < nC; ++j) { buffer[idx++] = in(i, j); } }
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool MatrixConvert(const Eigen::RowVectorXd& in, OpenViBE::CMatrix& out)
|
||||
{
|
||||
if (in.size() == 0) { return false; }
|
||||
out.resize(in.size());
|
||||
//one row system copy doesn't cause problem
|
||||
std::copy_n(in.data(), out.getSize(), out.getBuffer());
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool MatrixConvert(const OpenViBE::CMatrix& in, Eigen::RowVectorXd& out)
|
||||
{
|
||||
if (in.getDimensionCount() != 1) { return false; }
|
||||
out.resize(in.getDimensionSize(0));
|
||||
//one row system copy doesn't cause problem
|
||||
std::copy_n(in.getBuffer(), in.getSize(), out.data());
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
bool MatrixConvert(const std::vector<double>& in, OpenViBE::CMatrix& out)
|
||||
{
|
||||
if (in.empty()) { return false; }
|
||||
out.resize(in.size());
|
||||
//one row system copy doesn't cause problem
|
||||
std::copy_n(in.data(), out.getSize(), out.getBuffer());
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
@@ -0,0 +1,43 @@
|
||||
///-------------------------------------------------------------------------------------------------
|
||||
///
|
||||
/// \file misc.hpp
|
||||
/// \brief All functions to Convert OpenViBE::CMatrix and Eigen::MatrixXd, links to Eigen function, manipulate OpenVibe::CMatrix and more.
|
||||
/// \author Thibaut Monseigne (Inria).
|
||||
/// \version 1.0.
|
||||
/// \date 26/10/2018.
|
||||
/// \copyright <a href="https://choosealicense.com/licenses/agpl-3.0/">GNU Affero General Public License v3.0</a>.
|
||||
///
|
||||
///-------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <openvibe/ov_all.h>
|
||||
#include <Eigen/Dense>
|
||||
|
||||
//*****************************************************
|
||||
//******************** Conversions ********************
|
||||
//*****************************************************
|
||||
/// <summary> Convert OpenViBE Matrix to Eigen Matrix. </summary>
|
||||
/// <param name="in"> The Eigen Matrix. </param>
|
||||
/// <param name="out"> The OpenVibe Matrix. </param>
|
||||
bool MatrixConvert(const OpenViBE::CMatrix& in, Eigen::MatrixXd& out);
|
||||
|
||||
/// <summary> Convert Eigen Matrix to OpenViBE Matrix (It doesn't use Memory::copy because of Eigne store in column major by default). </summary>
|
||||
/// <param name="in"> The Eigen Matrix. </param>
|
||||
/// <param name="out"> The OpenVibe Matrix. </param>
|
||||
bool MatrixConvert(const Eigen::MatrixXd& in, OpenViBE::CMatrix& out);
|
||||
|
||||
/// <summary> Convert Eigen Row Vector to OpenViBE Matrix with one dimension. </summary>
|
||||
/// <param name="in"> The Eigen Row Vector. </param>
|
||||
/// <param name="out"> The OpenVibe Matrix. </param>
|
||||
bool MatrixConvert(const Eigen::RowVectorXd& in, OpenViBE::CMatrix& out);
|
||||
|
||||
/// <summary> Convert OpenViBE Matrix with one dimension to Eigen Row Vector. </summary>
|
||||
/// <param name="in"> The OpenVibe Matrix. </param>
|
||||
/// <param name="out"> The Eigen Row Vector. </param>
|
||||
bool MatrixConvert(const OpenViBE::CMatrix& in, Eigen::RowVectorXd& out);
|
||||
|
||||
/// <summary> Convertvector double to OpenViBE Matrix with one dimension. </summary>
|
||||
/// <param name="in"> The Vector of double. </param>
|
||||
/// <param name="out"> The OpenVibe Matrix. </param>
|
||||
bool MatrixConvert(const std::vector<double>& in, OpenViBE::CMatrix& out);
|
||||
+110
@@ -0,0 +1,110 @@
|
||||
|
||||
IF(WIN32)
|
||||
SET(EXT cmd)
|
||||
SET(OS_FLAGS "--no-pause")
|
||||
ELSE()
|
||||
SET(EXT sh)
|
||||
SET(OS_FLAGS "")
|
||||
ENDIF()
|
||||
|
||||
SET(PATH_TEST scenarios-tests)
|
||||
|
||||
############
|
||||
SET(TEST_NAME Covariance-Matrix-Calculator)
|
||||
|
||||
ADD_TEST(clean_${TEST_NAME} "${CMAKE_COMMAND}" "-E" "remove" "-f" "${PATH_TEST}/${TEST_NAME}-output.csv")
|
||||
ADD_TEST(run_${TEST_NAME} "$ENV{OV_BINARY_PATH}/openvibe-designer.${EXT}" ${OS_FLAGS} "--no-session-management" "--invisible" "--play-fast" "${PATH_TEST}/${TEST_NAME}-test.xml")
|
||||
ADD_TEST(compare_${TEST_NAME} "$ENV{OV_BINARY_PATH}/test_thresholdDataComparison.${EXT}" ${OS_FLAGS} "${PATH_TEST}/${TEST_NAME}-output.csv" "${PATH_TEST}/${TEST_NAME}-ref.csv" 0.0001)
|
||||
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME} PROPERTIES ATTACHED_FILES_ON_FAIL ${OV_CONFIG_SUBDIR})
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME} PROPERTIES ATTACHED_FILES_ON_FAIL "${PATH_TEST}/${TEST_NAME}-output.csv")
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME} PROPERTIES DEPENDS run_${TEST_NAME})
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME} PROPERTIES DEPENDS clean_${TEST_NAME})
|
||||
|
||||
##############
|
||||
|
||||
#SET(TEST_NAME Covariance-Mean-Calculator)
|
||||
|
||||
#ADD_TEST(clean_${TEST_NAME} "${CMAKE_COMMAND}" "-E" "remove" "-f" "${PATH_TEST}/${TEST_NAME}-output.csv")
|
||||
#ADD_TEST(run_${TEST_NAME} "$ENV{OV_BINARY_PATH}/openvibe-designer.${EXT}" ${OS_FLAGS} "--no-session-management" "--invisible" "--play-fast" "${PATH_TEST}/${TEST_NAME}-test.xml")
|
||||
#ADD_TEST(compare_${TEST_NAME} "$ENV{OV_BINARY_PATH}/test_thresholdDataComparison.${EXT}" ${OS_FLAGS} "${PATH_TEST}/${TEST_NAME}-output.csv" "${PATH_TEST}/${TEST_NAME}-ref.csv" 0.0001)
|
||||
|
||||
#SET_TESTS_PROPERTIES(run_${TEST_NAME} PROPERTIES ATTACHED_FILES_ON_FAIL ${OV_CONFIG_SUBDIR})
|
||||
#SET_TESTS_PROPERTIES(compare_${TEST_NAME} PROPERTIES ATTACHED_FILES_ON_FAIL "${PATH_TEST}/${TEST_NAME}-output.csv")
|
||||
#SET_TESTS_PROPERTIES(compare_${TEST_NAME} PROPERTIES DEPENDS run_${TEST_NAME})
|
||||
#SET_TESTS_PROPERTIES(run_${TEST_NAME} PROPERTIES DEPENDS clean_${TEST_NAME})
|
||||
|
||||
#############
|
||||
|
||||
SET(TEST_NAME Covariance-To-Feature)
|
||||
|
||||
ADD_TEST(clean_${TEST_NAME} "${CMAKE_COMMAND}" "-E" "remove" "-f" "${PATH_TEST}/${TEST_NAME}-output.csv")
|
||||
ADD_TEST(run_${TEST_NAME} "$ENV{OV_BINARY_PATH}/openvibe-designer.${EXT}" ${OS_FLAGS} "--no-session-management" "--invisible" "--play-fast" "${PATH_TEST}/${TEST_NAME}-test.xml")
|
||||
ADD_TEST(compare_${TEST_NAME} "$ENV{OV_BINARY_PATH}/test_thresholdDataComparison.${EXT}" ${OS_FLAGS} "${PATH_TEST}/${TEST_NAME}-output.csv" "${PATH_TEST}/${TEST_NAME}-ref.csv" 0.0001)
|
||||
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME} PROPERTIES ATTACHED_FILES_ON_FAIL ${OV_CONFIG_SUBDIR})
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME} PROPERTIES ATTACHED_FILES_ON_FAIL "${PATH_TEST}/${TEST_NAME}-output.csv")
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME} PROPERTIES DEPENDS run_${TEST_NAME})
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME} PROPERTIES DEPENDS clean_${TEST_NAME})
|
||||
|
||||
#############
|
||||
|
||||
SET(TEST_NAME Feature-To-Covariance)
|
||||
|
||||
ADD_TEST(clean_${TEST_NAME} "${CMAKE_COMMAND}" "-E" "remove" "-f" "${PATH_TEST}/${TEST_NAME}-output.csv")
|
||||
ADD_TEST(run_${TEST_NAME} "$ENV{OV_BINARY_PATH}/openvibe-designer.${EXT}" ${OS_FLAGS} "--no-session-management" "--invisible" "--play-fast" "${PATH_TEST}/${TEST_NAME}-test.xml")
|
||||
ADD_TEST(compare_${TEST_NAME} "$ENV{OV_BINARY_PATH}/test_thresholdDataComparison.${EXT}" ${OS_FLAGS} "${PATH_TEST}/${TEST_NAME}-output.csv" "${PATH_TEST}/${TEST_NAME}-ref.csv" 0.0001)
|
||||
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME} PROPERTIES ATTACHED_FILES_ON_FAIL ${OV_CONFIG_SUBDIR})
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME} PROPERTIES ATTACHED_FILES_ON_FAIL "${PATH_TEST}/${TEST_NAME}-output.csv")
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME} PROPERTIES DEPENDS run_${TEST_NAME})
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME} PROPERTIES DEPENDS clean_${TEST_NAME})
|
||||
|
||||
#############
|
||||
|
||||
#SET(TEST_NAME Matrix-Classifier-Training)
|
||||
|
||||
#ADD_TEST(clean_${TEST_NAME} "${CMAKE_COMMAND}" "-E" "remove" "-f" "${PATH_TEST}/${TEST_NAME}-Model-FgMDM-ref-output.csv")
|
||||
#ADD_TEST(run_${TEST_NAME} "$ENV{OV_BINARY_PATH}/openvibe-designer.${EXT}" ${OS_FLAGS} "--no-session-management" "--invisible" "--play-fast" "${PATH_TEST}/${TEST_NAME}-test.xml")
|
||||
|
||||
|
||||
#############
|
||||
|
||||
SET(TEST_NAME Matrix-Classifier-Testing)
|
||||
|
||||
ADD_TEST(clean_${TEST_NAME} "${CMAKE_COMMAND}" "-E" "remove" "-f" "${PATH_TEST}/${TEST_NAME}-output.csv")
|
||||
ADD_TEST(run_${TEST_NAME} "$ENV{OV_BINARY_PATH}/openvibe-designer.${EXT}" ${OS_FLAGS} "--no-session-management" "--invisible" "--play-fast" "${PATH_TEST}/${TEST_NAME}-test.xml")
|
||||
ADD_TEST(compare_${TEST_NAME} "$ENV{OV_BINARY_PATH}/test_thresholdDataComparison.${EXT}" ${OS_FLAGS} "${PATH_TEST}/${TEST_NAME}-output.csv" "${PATH_TEST}/${TEST_NAME}-ref.csv" 0.0001)
|
||||
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME} PROPERTIES ATTACHED_FILES_ON_FAIL ${OV_CONFIG_SUBDIR})
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME} PROPERTIES ATTACHED_FILES_ON_FAIL "${PATH_TEST}/${TEST_NAME}-output.csv")
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME} PROPERTIES DEPENDS run_${TEST_NAME})
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME} PROPERTIES DEPENDS clean_${TEST_NAME})
|
||||
|
||||
|
||||
#############
|
||||
|
||||
SET(TEST_NAME Matrix-Classifier-Testing-Supervised)
|
||||
|
||||
ADD_TEST(clean_${TEST_NAME} "${CMAKE_COMMAND}" "-E" "remove" "-f" "${PATH_TEST}/${TEST_NAME}-output.csv")
|
||||
ADD_TEST(run_${TEST_NAME} "$ENV{OV_BINARY_PATH}/openvibe-designer.${EXT}" ${OS_FLAGS} "--no-session-management" "--invisible" "--play-fast" "${PATH_TEST}/${TEST_NAME}-test.xml")
|
||||
ADD_TEST(compare_${TEST_NAME} "$ENV{OV_BINARY_PATH}/test_thresholdDataComparison.${EXT}" ${OS_FLAGS} "${PATH_TEST}/${TEST_NAME}-output.csv" "${PATH_TEST}/${TEST_NAME}-ref.csv" 0.0001)
|
||||
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME} PROPERTIES ATTACHED_FILES_ON_FAIL ${OV_CONFIG_SUBDIR})
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME} PROPERTIES ATTACHED_FILES_ON_FAIL "${PATH_TEST}/${TEST_NAME}-output.csv")
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME} PROPERTIES DEPENDS run_${TEST_NAME})
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME} PROPERTIES DEPENDS clean_${TEST_NAME})
|
||||
|
||||
|
||||
#############
|
||||
|
||||
SET(TEST_NAME Matrix-Classifier-Testing-Unsupervised)
|
||||
|
||||
ADD_TEST(clean_${TEST_NAME} "${CMAKE_COMMAND}" "-E" "remove" "-f" "${PATH_TEST}/${TEST_NAME}-output.csv")
|
||||
ADD_TEST(run_${TEST_NAME} "$ENV{OV_BINARY_PATH}/openvibe-designer.${EXT}" ${OS_FLAGS} "--no-session-management" "--invisible" "--play-fast" "${PATH_TEST}/${TEST_NAME}-test.xml")
|
||||
ADD_TEST(compare_${TEST_NAME} "$ENV{OV_BINARY_PATH}/test_thresholdDataComparison.${EXT}" ${OS_FLAGS} "${PATH_TEST}/${TEST_NAME}-output.csv" "${PATH_TEST}/${TEST_NAME}-ref.csv" 0.0001)
|
||||
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME} PROPERTIES ATTACHED_FILES_ON_FAIL ${OV_CONFIG_SUBDIR})
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME} PROPERTIES ATTACHED_FILES_ON_FAIL "${PATH_TEST}/${TEST_NAME}-output.csv")
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME} PROPERTIES DEPENDS run_${TEST_NAME})
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME} PROPERTIES DEPENDS clean_${TEST_NAME})
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
Time:3x10,End Time,1:,1:,1:,1:,1:,1:,1:,1:,1:,1:,2:,2:,2:,2:,2:,2:,2:,2:,2:,2:,2:,2:,2:,2:,2:,2:,2:,2:,2:,2:,Event Id,Event Date,Event Duration
|
||||
0.0000000,0.500000, -3, -4, -5, -4, -6, -1, -4, -1, -3, -1, 0, -3, -3, 1, -2, 1, -2, 1, -1, -1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1,,,
|
||||
0.5000000,1.000000, -1, -4, -5, -4, -6, -6, -3, -3, -6, -4, -3, -1, 0, -3, 0, 0, -2, -2, -3, -3, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0,,,
|
||||
1.0000000,1.500000, -4, -2, -4, -5, -3, -1, -6, -3, -3, -4, 0, -3, -2, -2, -3, 0, -1, -2, -1, -2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,,,
|
||||
1.5000000,2.000000, -5, -3, -1, -1, -2, -4, -1, -6, -4, -4, 0, 0, -2, -2, -2, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,,,
|
||||
2.0000000,2.500000, -2, -1, -5, -2, -6, -5, -6, -4, -6, -6, -1, -3, -2, -3, -1, -1, 1, 0, 0, -3, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1,,,
|
||||
2.5000000,3.000000, -5, -3, -4, -1, -3, -6, -5, -3, -2, -5, -2, -3, 1, -3, -1, -2, 0, -1, 1, -2, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0,,,
|
||||
3.0000000,3.500000, -3, -3, -1, -4, -1, -6, -2, -5, -3, -3, -1, -3, -2, 1, 0, 0, -3, -3, -3, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0,,,
|
||||
3.5000000,4.000000, 0, 3, 1, 1, 2, 3, 1, 3, 3, 2, 0, 1, 1, -1, -2, 0, -2, 1, 2, 0, 4, 3, 3, 3, 4, 4, 4, 5, 4, 3,,,
|
||||
4.0000000,4.500000, 3, 2, 1, 2, 1, 2, 3, 3, 1, 4, -2, -2, -1, 0, 0, -1, 3, 0, -1, 3, 4, 4, 3, 4, 3, 5, 5, 4, 5, 4,,,
|
||||
4.5000000,5.000000, 3, 2, 3, 3, 0, 0, 0, 1, 2, 3, 3, 2, 0, 3, 3, -2, 3, 3, -2, 2, 5, 3, 4, 4, 5, 4, 3, 3, 5, 4,,,
|
||||
5.0000000,5.500000, 0, 3, 1, 4, 3, 1, 2, 3, 0, 0, -2, 1, 1, 0, 2, -1, 3, -1, 2, -2, 3, 3, 5, 4, 4, 4, 5, 4, 5, 5,,,
|
||||
5.5000000,6.000000, 1, 2, 1, 2, 2, 0, 0, 0, 0, 4, 1, 3, 0, -2, 1, 0, 0, 2, -2, 2, 5, 3, 5, 5, 5, 3, 4, 4, 3, 3,,,
|
||||
|
+73
@@ -0,0 +1,73 @@
|
||||
Time:3x3,End Time,1:,1:,1:,2:,2:,2:,3:,3:,3:,Event Id,Event Date,Event Duration
|
||||
0.0000000000,0.5000000000, 2.76, 1.62, 0.62, 1.62, 2.29, 0.64, 0.62, 0.64, 0.24,,,
|
||||
0.0000000000,0.5000000000, 1.00, 0.644381009, 0.76178344, 0.644381009, 1.00, 0.863289805, 0.76178344, 0.863289805, 1.00,,,
|
||||
0.0000000000,0.5000000000, 2.5849288, 1.33543611, 0.511092833, 1.33543611, 2.19748746, 0.527579698, 0.511092833, 0.527579698, 0.507583739,,,
|
||||
0.0000000000,0.5000000000, 2.34520102, 0.945778241, 0.361964512, 0.945778241, 2.07080856, 0.373640786, 0.361964512, 0.373640786, 0.87399042,,,
|
||||
0.0000000000,0.5000000000, 0.77844311, 0.26946108, -0.07784431, 0.26946108, 0.18562874, 0.00598802, -0.07784431, 0.00598802, 0.03592814,,,
|
||||
0.0000000000,0.5000000000, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00,,,
|
||||
0.5000000000,1.0000000000, 2.36, -1.04, -0.24, -1.04, 1.61, 0.11, -0.24, 0.11, 0.21,,,
|
||||
0.5000000000,1.0000000000, 1.00, -0.533536825, -0.340914594, -0.533536825, 1.00, 0.189177769, -0.340914594, 0.189177769, 1.00,,,
|
||||
0.5000000000,1.0000000000, 1.99839975, -0.650968006, -0.150223386, -0.650968006, 1.52895167, 0.0688523853, -0.150223386, 0.0688523853, 0.652648582,,,
|
||||
0.5000000000,1.0000000000, 1.83506857, -0.475246188, -0.109672197, -0.475246188, 1.49234296, 0.0502664238, -0.109672197, 0.0502664238, 0.852588472,,,
|
||||
0.5000000000,1.0000000000, 0.80645161, 0.24596774, -0.06048387, 0.24596774, 0.18145161, -0.01612903, -0.06048387, -0.01612903, 0.01209677,,,
|
||||
0.5000000000,1.0000000000, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00,,,
|
||||
1.0000000000,1.5000000000, 1.85, -0.00, 0.05, -0.00, 1.04, 0.04, 0.05, 0.04, 0.09,,,
|
||||
1.0000000000,1.5000000000, 1.00, -0.00, 0.12253577, -0.00, 1.00, 0.13074409, 0.12253577, 0.13074409, 1.00,,,
|
||||
1.0000000000,1.5000000000, 1.21758058, -0.00, 0.013088361, -0.00, 1.00554914, 0.0104706888, 0.013088361, 0.0104706888, 0.756870279,,,
|
||||
1.0000000000,1.5000000000, 1.18111558, -0.00, 0.0109600534, -0.00, 1.00356272, 0.00876804276, 0.0109600534, 0.00876804276, 0.795321701,,,
|
||||
1.0000000000,1.5000000000, 0.75806452, 0.30107527, -0.16666667, 0.30107527, 0.19354839, -0.07526882, -0.16666667, -0.07526882, 0.0483871,,,
|
||||
1.0000000000,1.5000000000, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00,,,
|
||||
1.5000000000,2.0000000000, 2.89, -0.77, -0.19, -0.77, 0.81, 0.07, -0.19, 0.07, 0.09,,,
|
||||
1.5000000000,2.0000000000, 1.00, -0.503267974, -0.37254902, -0.503267974, 1.00, 0.259259259, -0.37254902, 0.259259259, 1.00,,,
|
||||
1.5000000000,2.0000000000, 2.57527815, -0.621023059, -0.153239456, -0.621023059, 0.897709368, 0.0564566417, -0.153239456, 0.0564566417, 0.317012482,,,
|
||||
1.5000000000,2.0000000000, 2.22680827, -0.45607113, -0.112537032, -0.45607113, 0.994823924, 0.0414610118, -0.112537032, 0.0414610118, 0.568367802,,,
|
||||
1.5000000000,2.0000000000, 0.89928058, 0.10071942, -0.03597122, 0.10071942, 0.09352518, 0.00, -0.03597122, 0.00, 0.00719424,,,
|
||||
1.5000000000,2.0000000000, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00,,,
|
||||
2.0000000000,2.5000000000, 3.41, -1.19, -0.15, -1.19, 1.81, -0.15, -0.15, -0.15, 0.25,,,
|
||||
2.0000000000,2.5000000000, 1.00, -0.478994453, -0.162459108, -0.478994453, 1.00, -0.222988244, -0.162459108, -0.222988244, 1.00,,,
|
||||
2.0000000000,2.5000000000, 2.87232755, -0.786745664, -0.0991696216, -0.786745664, 1.81451826, -0.0991696216, -0.0991696216, -0.0991696216, 0.783154191,,,
|
||||
2.0000000000,2.5000000000, 2.53874679, -0.536560096, -0.0676336255, -0.536560096, 1.81732146, -0.0676336255, -0.0676336255, -0.0676336255, 1.11393175,,,
|
||||
2.0000000000,2.5000000000, 0.84555985, 0.16988417, -0.08880309, 0.16988417, 0.13513514, -0.03088803, -0.08880309, -0.03088803, 0.01930502,,,
|
||||
2.0000000000,2.5000000000, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00,,,
|
||||
2.5000000000,3.0000000000, 2.21, -0.04, 0.12, -0.04, 1.96, 0.32, 0.12, 0.32, 0.24,,,
|
||||
2.5000000000,3.0000000000, 1.00, -0.0192192227, 0.164770511, -0.0192192227, 1.00, 0.466569475, 0.164770511, 0.466569475, 1.00,,,
|
||||
2.5000000000,3.0000000000, 1.64826027, -0.00963569008, 0.0289070702, -0.00963569008, 1.5880372, 0.0770855206, 0.0289070702, 0.0770855206, 1.17370253,,,
|
||||
2.5000000000,3.0000000000, 1.47, -0.00, 0.00, -0.00, 1.47, 0.00, 0.00, 0.00, 1.47,,,
|
||||
2.5000000000,3.0000000000, 0.79899497, 0.22110553, -0.10552764, 0.22110553, 0.17085427, -0.0201005, -0.10552764, -0.0201005, 0.03015075,,,
|
||||
2.5000000000,3.0000000000, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00,,,
|
||||
3.0000000000,3.5000000000, 2.29, -0.33, 0.24, -0.33, 2.61, -0.18, 0.24, -0.18, 0.24,,,
|
||||
3.0000000000,3.5000000000, 1.00, -0.134982027, 0.323733677, -0.134982027, 1.00, -0.227429413, 0.323733677, -0.227429413, 1.00,,,
|
||||
3.0000000000,3.5000000000, 1.9742694, -0.149321794, 0.108597668, -0.149321794, 2.11906629, -0.081448251, 0.108597668, -0.081448251, 1.04666432,,,
|
||||
3.0000000000,3.5000000000, 1.73914927, -0.0147732834, 0.0107442061, -0.0147732834, 1.75347488, -0.0080581546, 0.0107442061, -0.0080581546, 1.64737585,,,
|
||||
3.0000000000,3.5000000000, 0.71686747, 0.22289157, -0.06024096, 0.22289157, 0.25903614, -0.04216867, -0.06024096, -0.04216867, 0.02409639,,,
|
||||
3.0000000000,3.5000000000, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00,,,
|
||||
3.5000000000,4.0000000000, 1.09, 0.60, 0.17, 0.60, 1.60, 0.00, 0.17, 0.00, 0.41,,,
|
||||
3.5000000000,4.0000000000, 1.00, 0.4543369, 0.25429847, 0.4543369, 1.00, 0.00, 0.25429847, 0.00, 1.00,,,
|
||||
3.5000000000,4.0000000000, 1.06313148, 0.315509839, 0.0893944544, 0.315509839, 1.33131485, 0.00, 0.0893944544, 0.00, 0.705553667,,,
|
||||
3.5000000000,4.0000000000, 1.04056757, 0.07659782, 0.02170272, 0.07659782, 1.10567572, 0.00, 0.02170272, 0.00, 0.95375671,,,
|
||||
3.5000000000,4.0000000000, 0.23039216, 0.02941176, 0.35294118, 0.02941176, 0.07843137, 0.00, 0.35294118, 0.00, 0.69117647,,,
|
||||
3.5000000000,4.0000000000, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00,,,
|
||||
4.0000000000,4.5000000000, 0.96, 0.92, 0.18, 0.92, 2.89, 0.21, 0.18, 0.21, 0.49,,,
|
||||
4.0000000000,4.5000000000, 1.00, 0.55233592, 0.26244533, 0.55233592, 1.00, 0.17647059, 0.26244533, 0.17647059, 1.00,,,
|
||||
4.0000000000,4.5000000000, 1.18724478, 0.490413981, 0.0959505616, 0.490413981, 2.21604802, 0.111942322, 0.0959505616, 0.111942322, 0.936707201,,,
|
||||
4.0000000000,4.5000000000, 1.22291898, 0.42297509, 0.08275599, 0.42297509, 2.11024714, 0.09654866, 0.08275599, 0.09654866, 1.00683388,,,
|
||||
4.0000000000,4.5000000000, 0.22307692, 0.02692308, 0.35384615, 0.02692308, 0.11153846, -0.00769231, 0.35384615, -0.00769231, 0.66538462,,,
|
||||
4.0000000000,4.5000000000, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00,,,
|
||||
4.5000000000,5.0000000000, 1.61, 0.15, 0.20, 0.15, 3.85, -0.40, 0.20, -0.40, 0.60,,,
|
||||
4.5000000000,5.0000000000, 1.00, 0.06024874, 0.20348923, 0.06024874, 1.00, -0.26318068, 0.20348923, -0.26318068, 1.00,,,
|
||||
4.5000000000,5.0000000000, 1.86743369, 0.055816941, 0.074422588, 0.055816941, 2.70096668, -0.148845176, 0.074422588, -0.148845176, 1.49159963,,,
|
||||
4.5000000000,5.0000000000, 1.95254699, 0.02467793, 0.03290391, 0.02467793, 2.32107076, -0.06580782, 0.03290391, -0.06580782, 1.78638225,,,
|
||||
4.5000000000,5.0000000000, 0.16544118, 0.09926471, 0.25735294, 0.09926471, 0.22426471, 0.20588235, 0.25735294, 0.20588235, 0.61029412,,,
|
||||
4.5000000000,5.0000000000, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00,,,
|
||||
5.0000000000,5.5000000000, 2.01, 0.69, -0.34, 0.69, 2.81, 0.44, -0.34, 0.44, 0.56,,,
|
||||
5.0000000000,5.5000000000, 1.00, 0.290334, -0.32046963, 0.290334, 1.00, 0.35075632, -0.32046963, 0.35075632, 1.00,,,
|
||||
5.0000000000,5.5000000000, 1.89536719, 0.324938579, -0.160114662, 0.324938579, 2.27210757, 0.20720721, -0.160114662, 0.20720721, 1.21252525,,,
|
||||
5.0000000000,5.5000000000, 1.80811047, 0.04705949, -0.02318873, 0.04705949, 1.86267219, 0.03000895, -0.02318873, 0.03000895, 1.70921734,,,
|
||||
5.0000000000,5.5000000000, 0.18846154, 0.04615385, 0.26153846, 0.04615385, 0.11153846, 0.06538462, 0.26153846, 0.06538462, 0.70,,,
|
||||
5.0000000000,5.5000000000, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00,,,
|
||||
5.5000000000,6.0000000000, 1.56, 0.70, 0.00, 0.70, 2.45, -0.30, 0.00, -0.30, 0.80,,,
|
||||
5.5000000000,6.0000000000, 1.00, 0.35805744, 0.00, 0.35805744, 1.00, -0.21428571, 0.00, -0.21428571, 1.00,,,
|
||||
5.5000000000,6.0000000000, 1.60313579, 0.00319114656, 0.00, 0.00319114656, 1.6071931, -0.00136763424, 0.00, -0.00136763424, 1.59967111,,,
|
||||
5.5000000000,6.0000000000, 1.60333333, 0.00, 0.00, 0.00, 1.60333333, -0.00, 0.00, -0.00, 1.60333333,,,
|
||||
5.5000000000,6.0000000000, 0.13333333, 0.05777778, 0.21333333, 0.05777778, 0.12, 0.07555556, 0.21333333, 0.07555556, 0.74666667,,,
|
||||
5.5000000000,6.0000000000, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00,,,
|
||||
|
+1029
File diff suppressed because it is too large
Load Diff
+13
@@ -0,0 +1,13 @@
|
||||
Time:3x3,End Time,1:,1:,1:,2:,2:,2:,3:,3:,3:,Event Id,Event Date,Event Duration
|
||||
0.0000000,0.500000, 2.5849288, 1.33543611, 0.511092833, 1.33543611, 2.19748746, 0.527579698, 0.511092833, 0.527579698, 0.507583739,,,
|
||||
0.5000000,1.000000, 1.99839975, -0.650968006, -0.150223386, -0.650968006, 1.52895167, 0.0688523853, -0.150223386, 0.0688523853, 0.652648582,,,
|
||||
1.0000000,1.500000, 1.21758058, -0.00, 0.013088361, -0.00, 1.00554914, 0.0104706888, 0.013088361, 0.0104706888, 0.756870279,,,
|
||||
1.5000000,2.000000, 2.57527815, -0.621023059, -0.153239456, -0.621023059, 0.897709368, 0.0564566417, -0.153239456, 0.0564566417, 0.317012482,,,
|
||||
2.0000000,2.500000, 2.87232755, -0.786745664, -0.0991696216, -0.786745664, 1.81451826, -0.0991696216, -0.0991696216, -0.0991696216, 0.783154191,,,
|
||||
2.5000000,3.000000, 1.64826027, -0.00963569008, 0.0289070702, -0.00963569008, 1.5880372, 0.0770855206, 0.0289070702, 0.0770855206, 1.17370253,,,
|
||||
3.0000000,3.500000, 1.9742694, -0.149321794, 0.108597668, -0.149321794, 2.11906629, -0.081448251, 0.108597668, -0.081448251, 1.04666432,,,
|
||||
3.5000000,4.000000, 1.06313148, 0.315509839, 0.0893944544, 0.315509839, 1.33131485, 0.00, 0.0893944544, 0.00, 0.705553667,,,
|
||||
4.0000000,4.500000, 1.18724478, 0.490413981, 0.0959505616, 0.490413981, 2.21604802, 0.111942322, 0.0959505616, 0.111942322, 0.936707201,,,
|
||||
4.5000000,5.000000, 1.86743369, 0.055816941, 0.074422588, 0.055816941, 2.70096668, -0.148845176, 0.074422588, -0.148845176, 1.49159963,,,
|
||||
5.0000000,5.500000, 1.89536719, 0.324938579, -0.160114662, 0.324938579, 2.27210757, 0.20720721, -0.160114662, 0.20720721, 1.21252525,,,
|
||||
5.5000000,6.000000, 1.60313579, 0.00319114656, 0.00, 0.00319114656, 1.6071931, -0.00136763424, 0.00, -0.00136763424, 1.59967111,,,
|
||||
|
+8
@@ -0,0 +1,8 @@
|
||||
Time:3x3,End Time,1:,1:,1:,2:,2:,2:,3:,3:,3:,Event Id,Event Date,Event Duration
|
||||
6.5000000000,6.5625000000, 1.70952664, 0.01674082, 0.02077766, 0.01674082, 1.60344581, 0.05423902, 0.02077766, 0.05423902, 0.8303257,,,
|
||||
6.5000000000,6.5625000000, 1.87394645, 0.02563437, 0.0298922, 0.02563437, 1.7732458, 0.06073032, 0.0298922, 0.06073032, 0.93197441,,,
|
||||
6.5000000000,6.5625000000, 1.7137077, 0.01869396, 0.02040996, 0.01869396, 1.60430933, 0.0512624, 0.02040996, 0.0512624, 0.82767414,,,
|
||||
6.5000000000,6.5625000000, 1.70798275, 0.01610538, 0.02003787, 0.01610538, 1.60581809, 0.05385499, 0.02003787, 0.05385499, 0.83577899,,,
|
||||
6.5000000000,6.5625000000, 1.56594664, 0.01175612, 0.01576697, 0.01175612, 1.44152542, 0.04955601, 0.01576697, 0.04955601, 0.72075273,,,
|
||||
6.5000000000,6.5625000000, 1.71301511, 0.01811099, 0.02219169, 0.01811099, 1.59879804, 0.0548546, 0.02219169, 0.0548546, 0.81958134,,,
|
||||
6.5000000000,6.5625000000, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00,,,
|
||||
|
+1537
File diff suppressed because it is too large
Load Diff
+13
@@ -0,0 +1,13 @@
|
||||
Time:3x3,End Time,1:,1:,1:,2:,2:,2:,3:,3:,3:,Event Id,Event Date,Event Duration
|
||||
0.0000000,0.500000, 2.5849288, 1.33543611, 0.511092833, 1.33543611, 2.19748746, 0.527579698, 0.511092833, 0.527579698, 0.507583739,,,
|
||||
0.5000000,1.000000, 1.99839975, -0.650968006, -0.150223386, -0.650968006, 1.52895167, 0.0688523853, -0.150223386, 0.0688523853, 0.652648582,,,
|
||||
1.0000000,1.500000, 1.21758058, -0.00, 0.013088361, -0.00, 1.00554914, 0.0104706888, 0.013088361, 0.0104706888, 0.756870279,,,
|
||||
1.5000000,2.000000, 2.57527815, -0.621023059, -0.153239456, -0.621023059, 0.897709368, 0.0564566417, -0.153239456, 0.0564566417, 0.317012482,,,
|
||||
2.0000000,2.500000, 2.87232755, -0.786745664, -0.0991696216, -0.786745664, 1.81451826, -0.0991696216, -0.0991696216, -0.0991696216, 0.783154191,,,
|
||||
2.5000000,3.000000, 1.64826027, -0.00963569008, 0.0289070702, -0.00963569008, 1.5880372, 0.0770855206, 0.0289070702, 0.0770855206, 1.17370253,,,
|
||||
3.0000000,3.500000, 1.9742694, -0.149321794, 0.108597668, -0.149321794, 2.11906629, -0.081448251, 0.108597668, -0.081448251, 1.04666432,,,
|
||||
3.5000000,4.000000, 1.06313148, 0.315509839, 0.0893944544, 0.315509839, 1.33131485, 0.00, 0.0893944544, 0.00, 0.705553667,,,
|
||||
4.0000000,4.500000, 1.18724478, 0.490413981, 0.0959505616, 0.490413981, 2.21604802, 0.111942322, 0.0959505616, 0.111942322, 0.936707201,,,
|
||||
4.5000000,5.000000, 1.86743369, 0.055816941, 0.074422588, 0.055816941, 2.70096668, -0.148845176, 0.074422588, -0.148845176, 1.49159963,,,
|
||||
5.0000000,5.500000, 1.89536719, 0.324938579, -0.160114662, 0.324938579, 2.27210757, 0.20720721, -0.160114662, 0.20720721, 1.21252525,,,
|
||||
5.5000000,6.000000, 1.60313579, 0.00319114656, 0.00, 0.00319114656, 1.6071931, -0.00136763424, 0.00, -0.00136763424, 1.59967111,,,
|
||||
|
+25
@@ -0,0 +1,25 @@
|
||||
Time:6,End Time,,,,,,,Event Id,Event Date,Event Duration
|
||||
0.0000000000,0.5000000000, 0.19923529, 0.81954961, 0.45583261, 0.06265258, 0.53984445, -0.74189243,,,
|
||||
0.0000000000,0.5000000000, 2.58492880, 1.33543611, 0.511092833, 2.19748746, 0.527579698, 0.507583739,,,
|
||||
0.5000000000,1.0000000000, 0.08020799, -0.56380364, -0.19863986, -0.12711376, -0.00487228, -0.24993702,,,
|
||||
0.5000000000,1.0000000000, 1.99839975, -0.650968006, -0.150223386, 1.52895167, 0.0688523853, 0.652648582,,,
|
||||
1.0000000000,1.5000000000, -0.33927073, -0.0139971, -0.00466568, -0.46577928, -0.04826772, -0.09127522,,,
|
||||
1.0000000000,1.5000000000, 1.21758058, -0.000000000, 0.0130883610, 1.00554914, 0.0104706888, 0.756870279,,,
|
||||
1.5000000000,2.0000000000, 0.34039208, -0.59873603, -0.23557737, -0.70072935, 0.02089894, -0.98360691,,,
|
||||
1.5000000000,2.0000000000, 2.57527815, -0.621023059, -0.153239456, 0.897709368, 0.0564566417, 0.317012482,,,
|
||||
2.0000000000,2.5000000000, 0.4605308, -0.52546299, -0.14067914, 0.04677775, -0.21048792, -0.06431401,,,
|
||||
2.0000000000,2.5000000000, 2.87232755, -0.786745664, -0.0991696216, 1.81451826, -0.0991696216, 0.783154191,,,
|
||||
2.5000000000,3.0000000000, -0.0365709, -0.02310847, 0.00568693, -0.0103298, 0.01443795, 0.34577556,,,
|
||||
2.5000000000,3.0000000000, 1.64826027, -0.00963569008, 0.0289070702, 1.58803720, 0.0770855206, 1.17370253,,,
|
||||
3.0000000000,3.5000000000, 0.13870707, -0.11420977, 0.08057211, 0.27541021, -0.14045981, 0.22931806,,,
|
||||
3.0000000000,3.5000000000, 1.97426940, -0.149321794, 0.108597668, 2.11906629, -0.0814482510, 1.04666432,,,
|
||||
3.5000000000,4.0000000000, -0.52065199, 0.37104578, 0.12469995, -0.21855289, -0.08508472, -0.16646769,,,
|
||||
3.5000000000,4.0000000000, 1.06313148, 0.315509839, 0.0893944544, 1.33131485, 0.00000000, 0.705553667,,,
|
||||
4.0000000000,4.5000000000, -0.42665126, 0.41541091, 0.08741089, 0.28616558, 0.02832375, 0.11565408,,,
|
||||
4.0000000000,4.5000000000, 1.18724478, 0.490413981, 0.0959505616, 2.21604802, 0.111942322, 0.936707201,,,
|
||||
4.5000000000,5.0000000000, 0.08700644, 0.0237524, 0.04023502, 0.51858937, -0.17189999, 0.58429274,,,
|
||||
4.5000000000,5.0000000000, 1.86743369, 0.0558169410, 0.0744225880, 2.70096668, -0.148845176, 1.49159963,,,
|
||||
5.0000000000,5.5000000000, 0.08116035, 0.22060811, -0.19108877, 0.32966629, 0.12395396, 0.36518821,,,
|
||||
5.0000000000,5.5000000000, 1.89536719, 0.324938579, -0.160114662, 2.27210757, 0.207207210, 1.21252525,,,
|
||||
5.5000000000,6.0000000000, -0.06409514, -0.01104878, -0.02378668, 0.00324331, -0.06638659, 0.65726463,,,
|
||||
5.5000000000,6.0000000000, 1.60313579, 0.00319114656, 0.00000000, 1.60719310, -0.00136763424, 1.59967111,,,
|
||||
|
+545
@@ -0,0 +1,545 @@
|
||||
<OpenViBE-Scenario>
|
||||
<FormatVersion>2</FormatVersion>
|
||||
<Creator>OpenViBE Designer</Creator>
|
||||
<CreatorVersion>2.2.0</CreatorVersion>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<Identifier>(0x002d042d, 0x0a17b655)</Identifier>
|
||||
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
|
||||
<Name>Test Name</Name>
|
||||
<DefaultValue>Covariance-To-Feature</DefaultValue>
|
||||
<Value>Covariance-To-Feature</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Inputs></Inputs>
|
||||
<Outputs></Outputs>
|
||||
<Boxes>
|
||||
<Box>
|
||||
<Identifier>(0x000015a8, 0x000079ea)</Identifier>
|
||||
<Name>Player Controller</Name>
|
||||
<AlgorithmClassIdentifier>(0x5f426dce, 0x08456e13)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
|
||||
<Name>Stimulation name</Name>
|
||||
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
|
||||
<Value>OVTK_StimulationId_Label_00</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xcc14d8d6, 0xf27ecb73)</TypeIdentifier>
|
||||
<Name>Action to perform</Name>
|
||||
<DefaultValue>Pause</DefaultValue>
|
||||
<Value>Stop</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>432</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>720</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x568d148e, 0x650792b3)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x01165f9f)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>false</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>2</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x000033bb, 0x00004e53)</Identifier>
|
||||
<Name>Streamed matrix multiplexer</Name>
|
||||
<AlgorithmClassIdentifier>(0x7a12298b, 0x785f4d42)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x17341935, 0x152ff448)</TypeIdentifier>
|
||||
<Name>Input stream 1</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x17341935, 0x152ff448)</TypeIdentifier>
|
||||
<Name>Input stream 2</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x17341935, 0x152ff448)</TypeIdentifier>
|
||||
<Name>Multiplexed streamed matrix</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>288</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>640</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x30a4e5c9, 0x83502953)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x4badfdff, 0xc35004a3)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>2</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xfba64161, 0x65304e21)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x000044b9, 0x00003dab)</Identifier>
|
||||
<Name>Tangent Space</Name>
|
||||
<AlgorithmClassIdentifier>(0x7c265dba, 0x202c1f70)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Input Covariance Matrix</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x17341935, 0x152ff448)</TypeIdentifier>
|
||||
<Name>Output Feature Vector</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Tangent Space</Name>
|
||||
<DefaultValue>true</DefaultValue>
|
||||
<Value>true</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename to Reference Matrix (CSV, empty for Identity)</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}/Mean.csv</DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/Mean-ref.csv</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xa88b3667, 0x0871638c)</TypeIdentifier>
|
||||
<Name>Log Level</Name>
|
||||
<DefaultValue>Information</DefaultValue>
|
||||
<Value>None</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>224</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>544</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xbfd23954, 0x40c20e2d)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x666fffff, 0x666fffff)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x000044b9, 0x00003dac)</Identifier>
|
||||
<Name>Squeeze</Name>
|
||||
<AlgorithmClassIdentifier>(0x7c265dba, 0x202c1f70)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Input Covariance Matrix</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x17341935, 0x152ff448)</TypeIdentifier>
|
||||
<Name>Output Feature Vector</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Tangent Space</Name>
|
||||
<DefaultValue>true</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename to Reference Matrix (CSV, empty for Identity)</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}/Mean.csv</DefaultValue>
|
||||
<Value></Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xa88b3667, 0x0871638c)</TypeIdentifier>
|
||||
<Name>Log Level</Name>
|
||||
<DefaultValue>Information</DefaultValue>
|
||||
<Value>None</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>224</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>720</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xbfd23954, 0x40c20e2d)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x666fffff, 0x666fffff)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x0000484f, 0x00003eff)</Identifier>
|
||||
<Name>CSV File Reader</Name>
|
||||
<AlgorithmClassIdentifier>(0x336a3d9a, 0x753f1ba4)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Output stream</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Output stimulation</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/$var{Test Name}-input.csv</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>144</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>640</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x30a4e5c9, 0x83502953)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xa9cdc629, 0xb153eb33)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>2</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00004c39, 0x0000096b)</Identifier>
|
||||
<Name>CSV File Writer</Name>
|
||||
<AlgorithmClassIdentifier>(0x428375e8, 0x325f2db9)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x17341935, 0x152ff448)</TypeIdentifier>
|
||||
<Name>Input stream</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations stream</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename</Name>
|
||||
<DefaultValue>record-[$core{date}-$core{time}].csv</DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/$var{Test Name}-output.csv</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Precision</Name>
|
||||
<DefaultValue>10</DefaultValue>
|
||||
<Value>10</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Append data</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Only last matrix</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>368</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>640</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xee4b6d30, 0x788aed29)</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>2</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00005b5f, 0x000050b1)</Identifier>
|
||||
<Name>Timeout</Name>
|
||||
<AlgorithmClassIdentifier>(0x24fcd292, 0x5c8f6aa8)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Input Stream</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Output Stimulations</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Timeout delay</Name>
|
||||
<DefaultValue>5</DefaultValue>
|
||||
<Value>3</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
|
||||
<Name>Output Stimulation</Name>
|
||||
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
|
||||
<Value>OVTK_StimulationId_Label_00</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>368</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>720</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x1eaee00e, 0xdb05d34e)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x017178bd)</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>2</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
</Boxes>
|
||||
<Links>
|
||||
<Link>
|
||||
<Identifier>(0x0000165e, 0x00002aea)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000044b9, 0x00003dab)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000033bb, 0x00004e53)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00001a66, 0x00001ca3)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00005b5f, 0x000050b1)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000015a8, 0x000079ea)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00002f63, 0x00004371)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000033bb, 0x00004e53)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00005b5f, 0x000050b1)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00004af4, 0x0000001f)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000033bb, 0x00004e53)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00004c39, 0x0000096b)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00004c3a, 0x000035ef)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x0000484f, 0x00003eff)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000044b9, 0x00003dac)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00006b7d, 0x00002a0b)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x0000484f, 0x00003eff)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000044b9, 0x00003dab)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00007598, 0x00003e01)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000044b9, 0x00003dac)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000033bb, 0x00004e53)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
</Links>
|
||||
<Comments></Comments>
|
||||
<Metadata>
|
||||
<Entry>
|
||||
<Identifier>(0x000062ac, 0x00003721)</Identifier>
|
||||
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
|
||||
<Data>[{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":320,"identifier":"(0x0000041e, 0x000069b5)","name":"Default window","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":480},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x00004c5d, 0x000021d4)","index":0,"name":"Default tab","parentIdentifier":"(0x0000041e, 0x000069b5)","type":2},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":0,"identifier":"(0x0000420e, 0x000074bb)","index":0,"name":"Empty","parentIdentifier":"(0x00004c5d, 0x000021d4)","type":0}]</Data>
|
||||
</Entry>
|
||||
</Metadata>
|
||||
</OpenViBE-Scenario>
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
Time:6,End Time,A,B,C,D,E,F,Event Id,Event Date,Event Duration
|
||||
0.0000000000,0.5000000000,0.1992352855,0.8195496110,0.4558326038,0.0626525810,0.5398444507,-0.7418924315,,,
|
||||
0.5000000000,1.0000000000,0.0802079905,-0.5638036394,-0.1986398629,-0.1271137599,-0.0048722803,-0.2499370264,,,
|
||||
1.0000000000,1.5000000000,-0.3392707289,-0.0139971004,-0.0046656834,-0.4657792818,-0.0482677110,-0.0912752215,,,
|
||||
1.5000000000,2.0000000000,0.3403920796,-0.5987360282,-0.2355773730,-0.7007293522,0.0208989408,-0.9836069163,,,
|
||||
2.0000000000,2.5000000000,0.4605307984,-0.5254629883,-0.1406791473,0.0467777487,-0.2104879168,-0.0643140147,,,
|
||||
2.5000000000,3.0000000000,-0.0365708962,-0.0231084678,0.0056869283,-0.0103298061,0.0144379583,0.3457755534,,,
|
||||
3.0000000000,3.5000000000,0.1387070746,-0.1142097638,0.0805721020,0.2754102081,-0.1404598090,0.2293180575,,,
|
||||
3.5000000000,4.0000000000,-0.5206519983,0.3710457814,0.1246999460,-0.2185528906,-0.0850847159,-0.1664676937,,,
|
||||
4.0000000000,4.5000000000,-0.4266512586,0.4154109093,0.0874108853,0.2861655803,0.0283237504,0.1156540704,,,
|
||||
4.5000000000,5.0000000000,0.0870064331,0.0237524010,0.0402350114,0.5185893700,-0.1718999872,0.5842927372,,,
|
||||
5.0000000000,5.5000000000,0.0811603490,0.2206081191,-0.1910887744,0.3296662887,0.1239539595,0.3651882077,,,
|
||||
5.5000000000,6.0000000000,-0.0640951351,-0.0110487786,-0.0237866849,0.0032433083,-0.0663865876,0.6572646278,,,
|
||||
|
+13
@@ -0,0 +1,13 @@
|
||||
Time:6,End Time,A,B,C,D,E,F,Event Id,Event Date,Event Duration
|
||||
0.0000000000,0.5000000000,2.5849288000,1.3354361100,0.5110928330,2.1974874600,0.5275796980,0.5075837390,,,
|
||||
0.5000000000,1.0000000000,1.9983997500,-0.6509680060,-0.1502233860,1.5289516700,0.0688523853,0.6526485820,,,
|
||||
1.0000000000,1.5000000000,1.2175805800,-0.0000000000,0.0130883610,1.0055491400,0.0104706888,0.7568702790,,,
|
||||
1.5000000000,2.0000000000,2.5752781500,-0.6210230590,-0.1532394560,0.8977093680,0.0564566417,0.3170124820,,,
|
||||
2.0000000000,2.5000000000,2.8723275500,-0.7867456640,-0.0991696216,1.8145182600,-0.0991696216,0.7831541910,,,
|
||||
2.5000000000,3.0000000000,1.6482602700,-0.0096356901,0.0289070702,1.5880372000,0.0770855206,1.1737025300,,,
|
||||
3.0000000000,3.5000000000,1.9742694000,-0.1493217940,0.1085976680,2.1190662900,-0.0814482510,1.0466643200,,,
|
||||
3.5000000000,4.0000000000,1.0631314800,0.3155098390,0.0893944544,1.3313148500,0.0000000000,0.7055536670,,,
|
||||
4.0000000000,4.5000000000,1.1872447800,0.4904139810,0.0959505616,2.2160480200,0.1119423220,0.9367072010,,,
|
||||
4.5000000000,5.0000000000,1.8674336900,0.0558169410,0.0744225880,2.7009666800,-0.1488451760,1.4915996300,,,
|
||||
5.0000000000,5.5000000000,1.8953671900,0.3249385790,-0.1601146620,2.2721075700,0.2072072100,1.2125252500,,,
|
||||
5.5000000000,6.0000000000,1.6031357900,0.0031911466,0.0000000000,1.6071931000,-0.0013676342,1.5996711100,,,
|
||||
|
+25
@@ -0,0 +1,25 @@
|
||||
Time:3x3,End Time,1:,1:,1:,2:,2:,2:,3:,3:,3:,Event Id,Event Date,Event Duration
|
||||
0.00,0.50,2.5849287999,1.3354361099,0.511092833,1.3354361099,2.19748746,0.527579698,0.511092833,0.527579698,0.507583739,,,
|
||||
0.00,0.50,2.5849288,1.33543611,0.511092833,1.33543611,2.19748746,0.527579698,0.511092833,0.527579698,0.507583739,,,
|
||||
0.50,1.00,1.9983997499,-0.650968006,-0.150223386,-0.650968006,1.52895167,0.0688523853,-0.150223386,0.0688523853,0.652648582,,,
|
||||
0.50,1.00,1.99839975,-0.650968006,-0.150223386,-0.650968006,1.52895167,0.0688523853,-0.150223386,0.0688523853,0.652648582,,,
|
||||
1.00,1.50,1.21758058,0.00,0.013088361,0.00,1.00554914,0.0104706888,0.013088361,0.0104706888,0.756870279,,,
|
||||
1.00,1.50,1.21758058,-0.00,0.013088361,-0.00,1.00554914,0.0104706888,0.013088361,0.0104706888,0.756870279,,,
|
||||
1.50,2.00,2.5752781499,-0.621023059,-0.153239456,-0.621023059,0.897709368,0.0564566417,-0.153239456,0.0564566417,0.317012482,,,
|
||||
1.50,2.00,2.57527815,-0.621023059,-0.153239456,-0.621023059,0.897709368,0.0564566417,-0.153239456,0.0564566417,0.317012482,,,
|
||||
2.00,2.50,2.8723275501,-0.786745664,-0.0991696216,-0.786745664,1.81451826,-0.0991696216,-0.0991696216,-0.0991696216,0.783154191,,,
|
||||
2.00,2.50,2.87232755,-0.786745664,-0.0991696216,-0.786745664,1.81451826,-0.0991696216,-0.0991696216,-0.0991696216,0.783154191,,,
|
||||
2.50,3.00,1.64826027,-0.0096356901,0.0289070702,-0.0096356901,1.5880372,0.0770855206,0.0289070702,0.0770855206,1.17370253,,,
|
||||
2.50,3.00,1.64826027,-0.0096356901,0.0289070702,-0.0096356901,1.5880372,0.0770855206,0.0289070702,0.0770855206,1.17370253,,,
|
||||
3.00,3.50,1.9742693999,-0.149321794,0.108597668,-0.149321794,2.1190662901,-0.081448251,0.108597668,-0.081448251,1.04666432,,,
|
||||
3.00,3.50,1.9742694,-0.149321794,0.108597668,-0.149321794,2.11906629,-0.081448251,0.108597668,-0.081448251,1.04666432,,,
|
||||
3.50,4.00,1.06313148,0.315509839,0.0893944544,0.315509839,1.3313148501,0.00,0.0893944544,0.00,0.705553667,,,
|
||||
3.50,4.00,1.06313148,0.315509839,0.0893944544,0.315509839,1.33131485,0.00,0.0893944544,0.00,0.705553667,,,
|
||||
4.00,4.50,1.18724478,0.490413981,0.0959505616,0.490413981,2.2160480201,0.111942322,0.0959505616,0.111942322,0.936707201,,,
|
||||
4.00,4.50,1.18724478,0.490413981,0.0959505616,0.490413981,2.21604802,0.111942322,0.0959505616,0.111942322,0.936707201,,,
|
||||
4.50,5.00,1.8674336899,0.0558169411,0.074422588,0.0558169411,2.70096668,-0.148845176,0.074422588,-0.148845176,1.49159963,,,
|
||||
4.50,5.00,1.86743369,0.055816941,0.074422588,0.055816941,2.70096668,-0.148845176,0.074422588,-0.148845176,1.49159963,,,
|
||||
5.00,5.50,1.89536719,0.324938579,-0.160114662,0.324938579,2.27210757,0.20720721,-0.160114662,0.20720721,1.21252525,,,
|
||||
5.00,5.50,1.89536719,0.324938579,-0.160114662,0.324938579,2.27210757,0.20720721,-0.160114662,0.20720721,1.21252525,,,
|
||||
5.50,6.00,1.60313579,0.0031911465,-0.00,0.0031911465,1.6071931001,-0.0013676342,-0.00,-0.0013676342,1.5996711099,,,
|
||||
5.50,6.00,1.60313579,0.0031911466,0.00,0.0031911466,1.6071931,-0.0013676342,0.00,-0.0013676342,1.59967111,,,
|
||||
|
+587
@@ -0,0 +1,587 @@
|
||||
<OpenViBE-Scenario>
|
||||
<FormatVersion>2</FormatVersion>
|
||||
<Creator>OpenViBE Designer</Creator>
|
||||
<CreatorVersion>2.2.0</CreatorVersion>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<Identifier>(0x002d042d, 0x0a17b655)</Identifier>
|
||||
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
|
||||
<Name>Test Name</Name>
|
||||
<DefaultValue>Covariance-To-Feature</DefaultValue>
|
||||
<Value>Feature-To-Covariance</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Inputs></Inputs>
|
||||
<Outputs></Outputs>
|
||||
<Boxes>
|
||||
<Box>
|
||||
<Identifier>(0x000015a8, 0x000079ea)</Identifier>
|
||||
<Name>Player Controller</Name>
|
||||
<AlgorithmClassIdentifier>(0x5f426dce, 0x08456e13)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
|
||||
<Name>Stimulation name</Name>
|
||||
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
|
||||
<Value>OVTK_StimulationId_Label_00</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xcc14d8d6, 0xf27ecb73)</TypeIdentifier>
|
||||
<Name>Action to perform</Name>
|
||||
<DefaultValue>Pause</DefaultValue>
|
||||
<Value>Stop</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>432</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>720</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x568d148e, 0x650792b3)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x01165f9f)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>false</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>2</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00001de9, 0x000044ad)</Identifier>
|
||||
<Name>Tangent</Name>
|
||||
<AlgorithmClassIdentifier>(0x7c265dba, 0x202c1f71)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x17341935, 0x152ff448)</TypeIdentifier>
|
||||
<Name>Input Feature Vector</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Output Covariance Matrix</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Tangent Space</Name>
|
||||
<DefaultValue>true</DefaultValue>
|
||||
<Value>true</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename to Reference Matrix (CSV, empty for Identity)</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}/Mean.csv</DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/Mean-ref.csv</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xa88b3667, 0x0871638c)</TypeIdentifier>
|
||||
<Name>Log Level</Name>
|
||||
<DefaultValue>Information</DefaultValue>
|
||||
<Value>None</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>224</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>544</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xe5d263bb, 0x4098e177)</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>(0x00001de9, 0x000044ae)</Identifier>
|
||||
<Name>Squeeze</Name>
|
||||
<AlgorithmClassIdentifier>(0x7c265dba, 0x202c1f71)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x17341935, 0x152ff448)</TypeIdentifier>
|
||||
<Name>Input Feature Vector</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Output Covariance Matrix</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Tangent Space</Name>
|
||||
<DefaultValue>true</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename to Reference Matrix (CSV, empty for Identity)</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}/Mean.csv</DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/Mean.csv</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xa88b3667, 0x0871638c)</TypeIdentifier>
|
||||
<Name>Log Level</Name>
|
||||
<DefaultValue>Information</DefaultValue>
|
||||
<Value>None</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>224</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>720</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xe5d263bb, 0x4098e177)</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>(0x000033bb, 0x00004e53)</Identifier>
|
||||
<Name>Streamed matrix multiplexer</Name>
|
||||
<AlgorithmClassIdentifier>(0x7a12298b, 0x785f4d42)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Input stream 1</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Input stream 2</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Multiplexed streamed matrix</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>288</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>640</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x30a4e5c9, 0x83502953)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x4badfdff, 0xc35004a3)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>2</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xfba64161, 0x65304e21)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x0000484f, 0x00003eff)</Identifier>
|
||||
<Name>Tangent Input</Name>
|
||||
<AlgorithmClassIdentifier>(0x336a3d9a, 0x753f1ba4)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x17341935, 0x152ff448)</TypeIdentifier>
|
||||
<Name>Output stream</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Output stimulation</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/$var{Test Name}-input1.csv</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>160</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>544</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x30a4e5c9, 0x83502953)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xa9cdc629, 0xb153eb33)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>2</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x0000484f, 0x00003f00)</Identifier>
|
||||
<Name>Squeeze Input</Name>
|
||||
<AlgorithmClassIdentifier>(0x336a3d9a, 0x753f1ba4)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x17341935, 0x152ff448)</TypeIdentifier>
|
||||
<Name>Output stream</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Output stimulation</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/$var{Test Name}-input2.csv</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>160</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>720</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x30a4e5c9, 0x83502953)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xa9cdc629, 0xb153eb33)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>2</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00004c39, 0x0000096b)</Identifier>
|
||||
<Name>CSV File Writer</Name>
|
||||
<AlgorithmClassIdentifier>(0x428375e8, 0x325f2db9)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Input stream</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations stream</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename</Name>
|
||||
<DefaultValue>record-[$core{date}-$core{time}].csv</DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/$var{Test Name}-output.csv</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Precision</Name>
|
||||
<DefaultValue>10</DefaultValue>
|
||||
<Value>10</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Append data</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Only last matrix</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>368</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>640</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xee4b6d30, 0x788aed29)</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>2</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00005b5f, 0x000050b1)</Identifier>
|
||||
<Name>Timeout</Name>
|
||||
<AlgorithmClassIdentifier>(0x24fcd292, 0x5c8f6aa8)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Input Stream</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Output Stimulations</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Timeout delay</Name>
|
||||
<DefaultValue>5</DefaultValue>
|
||||
<Value>3</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
|
||||
<Name>Output Stimulation</Name>
|
||||
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
|
||||
<Value>OVTK_StimulationId_Label_00</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>368</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>720</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x1eaee00e, 0xdb05d34e)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x017178bd)</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>2</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
</Boxes>
|
||||
<Links>
|
||||
<Link>
|
||||
<Identifier>(0x00001a66, 0x00001ca3)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00005b5f, 0x000050b1)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000015a8, 0x000079ea)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00002f63, 0x00004371)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000033bb, 0x00004e53)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00005b5f, 0x000050b1)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00003088, 0x000054fb)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00001de9, 0x000044ad)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000033bb, 0x00004e53)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x0000309b, 0x00006cb6)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x0000484f, 0x00003f00)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00001de9, 0x000044ae)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000037b5, 0x00003750)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x0000484f, 0x00003eff)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00001de9, 0x000044ad)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00004af4, 0x0000001f)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000033bb, 0x00004e53)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00004c39, 0x0000096b)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000054da, 0x00005cc5)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00001de9, 0x000044ae)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000033bb, 0x00004e53)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
</Links>
|
||||
<Comments></Comments>
|
||||
<Metadata>
|
||||
<Entry>
|
||||
<Identifier>(0x000062ac, 0x00003721)</Identifier>
|
||||
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
|
||||
<Data>[{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":320,"identifier":"(0x0000041e, 0x000069b5)","name":"Default window","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":480},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x00004c5d, 0x000021d4)","index":0,"name":"Default tab","parentIdentifier":"(0x0000041e, 0x000069b5)","type":2},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":0,"identifier":"(0x0000420e, 0x000074bb)","index":0,"name":"Empty","parentIdentifier":"(0x00004c5d, 0x000021d4)","type":0}]</Data>
|
||||
</Entry>
|
||||
</Metadata>
|
||||
</OpenViBE-Scenario>
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
<Bias>
|
||||
<Bias-data>
|
||||
<Bias n="10" size="3"> 1 0 0
|
||||
0 1 0
|
||||
0 0 1</Bias>
|
||||
</Bias-data>
|
||||
</Bias>
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
Time:3x3,End Time,1:,1:,1:,2:,2:,2:,3:,3:,3:,Event Id,Event Date,Event Duration
|
||||
0.0,0.1,2.5849288,1.33543611,0.511092833,1.33543611,2.19748746,0.527579698,0.511092833,0.527579698,0.507583739,769,0.0,0.0
|
||||
0.5,0.6,1.99839975,-0.650968006,-0.150223386,-0.650968006,1.52895167,0.0688523853,-0.150223386,0.0688523853,0.652648582,769,0.5,0.0
|
||||
1.0,1.1,1.21758058,-0.00,0.013088361,-0.00,1.00554914,0.0104706888,0.013088361,0.0104706888,0.756870279,769,1.0,0.0
|
||||
1.5,1.6,2.57527815,-0.621023059,-0.153239456,-0.621023059,0.897709368,0.0564566417,-0.153239456,0.0564566417,0.317012482,769,1.5,0.0
|
||||
2.0,2.1,2.87232755,-0.786745664,-0.0991696216,-0.786745664,1.81451826,-0.0991696216,-0.0991696216,-0.0991696216,0.783154191,769,2.0,0.0
|
||||
2.5,2.6,1.64826027,-0.00963569008,0.0289070702,-0.00963569008,1.5880372,0.0770855206,0.0289070702,0.0770855206,1.17370253,769,2.5,0.0
|
||||
3.0,3.1,1.9742694,-0.149321794,0.108597668,-0.149321794,2.11906629,-0.081448251,0.108597668,-0.081448251,1.04666432,769,3.0,0.0
|
||||
4.0,4.1,1.06313148,0.315509839,0.0893944544,0.315509839,1.33131485,0.00,0.0893944544,0.00,0.705553667,769,4.0,0.0
|
||||
4.5,4.6,1.18724478,0.490413981,0.0959505616,0.490413981,2.21604802,0.111942322,0.0959505616,0.111942322,0.936707201,770,4.5,0.0
|
||||
5.0,5.1,1.86743369,0.055816941,0.074422588,0.055816941,2.70096668,-0.148845176,0.074422588,-0.148845176,1.49159963,770,5.0,0.0
|
||||
5.5,5.6,1.89536719,0.324938579,-0.160114662,0.324938579,2.27210757,0.20720721,-0.160114662,0.20720721,1.21252525,770,5.5,0.0
|
||||
6.0,6.1,1.60313579,0.00319114656,0.00,0.00319114656,1.6071931,-0.00136763424,0.00,-0.00136763424,1.59967111,770,6.0,0.0
|
||||
|
+49
@@ -0,0 +1,49 @@
|
||||
Time:3x3,End Time,1:,1:,1:,2:,2:,2:,3:,3:,3:,Event Id,Event Date,Event Duration
|
||||
0.0,0.1,2.3375879681,1.1235817880,0.4375016641,1.1235817880,2.0088885697,0.4587268555,0.4375016641,0.4587268555,0.5205728814,,,
|
||||
0.0,0.1,1.0,0.0,0.0,0.0,1.0,0.0,-0.0,0.0,1.0,,,
|
||||
0.0,0.1,2.5849288,1.33543611,0.511092833,1.33543611,2.19748746,0.527579698,0.511092833,0.527579698,0.507583739,,,
|
||||
0.0,0.1,2.5849288,1.33543611,0.511092833,1.33543611,2.19748746,0.527579698,0.511092833,0.527579698,0.507583739,,,
|
||||
0.5,0.6,1.7964057845,-0.6185516321,-0.1598617505,-0.6185516321,1.4288680906,0.0365060386,-0.1598617505,0.0365060386,0.7333089338,,,
|
||||
0.5,0.6,1.0756566596,-0.4579140103,-0.2114127465,-0.4579140103,1.0309058513,-0.1528116787,-0.2114127465,-0.1528116787,1.3308125300,,,
|
||||
0.5,0.6,1.99839975,-0.650968006,-0.150223386,-0.650968006,1.52895167,0.0688523853,-0.150223386,0.0688523853,0.652648582,,,
|
||||
0.5,0.6,1.99839975,-0.650968006,-0.150223386,-0.650968006,1.52895167,0.0688523853,-0.150223386,0.0688523853,0.652648582,,,
|
||||
1.0,1.1,1.0798106882,-0.0163890739,-0.0021344530,-0.0163890739,0.9391381373,-0.0206524620,-0.0021344530,-0.0206524620,0.8605585282,,,
|
||||
1.0,1.1,0.7322555263,-0.0460573370,-0.0554090439,-0.0460573370,0.7563379136,-0.1454584788,-0.0554090439,-0.1454584788,1.3255563093,,,
|
||||
1.0,1.1,1.21758058,0.00,0.013088361,0.00,1.00554914,0.0104706888,0.013088361,0.0104706888,0.756870279,,,
|
||||
1.0,1.1,1.21758058,0.00,0.013088361,0.00,1.00554914,0.0104706888,0.013088361,0.0104706888,0.756870279,,,
|
||||
1.5,1.6,2.1564136972,-0.5311254505,-0.1508860995,-0.5311254505,0.8463175378,0.0380832525,-0.1508860995,0.0380832525,0.3871796076,,,
|
||||
1.5,1.6,1.3946913771,-0.3529635241,-0.1507735488,-0.3529635241,0.7325030580,-0.0239166525,-0.1507735488,-0.0239166525,0.6404540983,,,
|
||||
1.5,1.6,2.57527815,-0.621023059,-0.153239456,-0.621023059,0.897709368,0.0564566417,-0.153239456,0.0564566417,0.317012482,,,
|
||||
1.5,1.6,2.57527815,-0.621023059,-0.153239456,-0.621023059,0.897709368,0.0564566417,-0.153239456,0.0564566417,0.317012482,,,
|
||||
2.0,2.1,2.2610472501,-0.5987174986,-0.0891846320,-0.5987174986,1.6552464264,-0.1444777516,-0.0891846320,-0.1444777516,0.9661034629,,,
|
||||
2.0,2.1,1.4130481322,-0.3274355106,-0.0818128545,-0.3274355106,1.3898388594,-0.2556481100,-0.0818128545,-0.2556481100,1.4656994550,,,
|
||||
2.0,2.1,2.87232755,-0.786745664,-0.0991696216,-0.786745664,1.81451826,-0.0991696216,-0.0991696216,-0.0991696216,0.783154191,,,
|
||||
2.0,2.1,2.87232755,-0.786745664,-0.0991696216,-0.786745664,1.81451826,-0.0991696216,-0.0991696216,-0.0991696216,0.783154191,,,
|
||||
2.5,2.6,1.2893592097,0.0400449898,0.0283946377,0.0400449898,1.4319869075,0.0393787337,0.0283946377,0.0393787337,1.4082015200,,,
|
||||
2.5,2.6,0.8648032496,0.0934128905,0.0219582593,0.0934128905,1.2089596505,-0.0398926396,0.0219582593,-0.0398926396,1.9022433520,,,
|
||||
2.5,2.6,1.64826027,-0.0096356901,0.0289070702,-0.0096356901,1.5880372,0.0770855206,0.0289070702,0.0770855206,1.17370253,,,
|
||||
2.5,2.6,1.64826027,-0.0096356901,0.0289070702,-0.0096356901,1.5880372,0.0770855206,0.0289070702,0.0770855206,1.17370253,,,
|
||||
3.0,3.1,1.5015552066,-0.0594514456,0.0962030617,-0.0594514456,1.8398138927,-0.1185607586,0.0962030617,-0.1185607586,1.2430573748,,,
|
||||
3.0,3.1,1.0238594322,0.0250386782,0.0760701334,0.0250386782,1.5082341167,-0.1801058831,0.0760701334,-0.1801058831,1.5841130590,,,
|
||||
3.0,3.1,1.9742694,-0.149321794,0.108597668,-0.149321794,2.11906629,-0.081448251,0.108597668,-0.081448251,1.04666432,,,
|
||||
3.0,3.1,1.9742694,-0.149321794,0.108597668,-0.149321794,2.11906629,-0.081448251,0.108597668,-0.081448251,1.04666432,,,
|
||||
4.0,4.1,0.8268185049,0.2773250134,0.0741722716,0.2773250134,1.1553614354,-0.0231391038,0.0741722716,-0.0231391038,0.8444734431,,,
|
||||
4.0,4.1,0.6080801523,0.2368114440,0.0555705814,0.2368114440,0.9682812380,-0.0572978769,0.0555705814,-0.0572978769,1.0543411216,,,
|
||||
4.0,4.1,1.06313148,0.315509839,0.0893944544,0.315509839,1.33131485,0.00,0.0893944544,0.00,0.705553667,,,
|
||||
4.0,4.1,1.06313148,0.315509839,0.0893944544,0.315509839,1.33131485,0.00,0.0893944544,0.00,0.705553667,,,
|
||||
4.5,4.6,0.9256627617,0.3992555385,0.0732879412,0.3992555385,1.8522373972,0.0716092283,0.0732879412,0.0716092283,1.1118708257,,,
|
||||
4.5,4.6,0.7060500528,0.3205518345,0.0496783655,0.3205518345,1.5171967044,0.0229145690,0.0496783655,0.0229145690,1.3424845135,,,
|
||||
4.5,4.6,1.18724478,0.490413981,0.0959505616,0.490413981,2.21604802,0.111942322,0.0959505616,0.111942322,0.936707201,,,
|
||||
4.5,4.6,1.18724478,0.490413981,0.0959505616,0.490413981,2.21604802,0.111942322,0.0959505616,0.111942322,0.936707201,,,
|
||||
5.0,5.1,1.4277768407,0.0479887577,0.0452254506,0.0479887577,2.1715066321,-0.1823592263,0.0452254506,-0.1823592263,1.7289574830,,,
|
||||
5.0,5.1,1.0965454040,0.0439480881,0.0187759211,0.0439480881,1.7463814966,-0.2199295367,0.0187759211,-0.2199295367,1.9990169538,,,
|
||||
5.0,5.1,1.86743369,0.055816941,0.074422588,0.055816941,2.70096668,-0.148845176,0.074422588,-0.148845176,1.49159963,,,
|
||||
5.0,5.1,1.86743369,0.055816941,0.074422588,0.055816941,2.70096668,-0.148845176,0.074422588,-0.148845176,1.49159963,,,
|
||||
5.5,5.6,1.4256920075,0.2406250166,-0.1648767943,0.2406250166,1.7689402685,0.1547873069,-0.1648767943,0.1547873069,1.3788046529,,,
|
||||
5.5,5.6,1.1055625378,0.1857719531,-0.1677345802,0.1857719531,1.4080506402,0.1070954089,-0.1677345802,0.1070954089,1.5456980053,,,
|
||||
5.5,5.6,1.89536719,0.324938579,-0.160114662,0.324938579,2.27210757,0.20720721,-0.160114662,0.20720721,1.21252525,,,
|
||||
5.5,5.6,1.89536719,0.324938579,-0.160114662,0.324938579,2.27210757,0.20720721,-0.160114662,0.20720721,1.21252525,,,
|
||||
6.0,6.1,1.1958492811,-0.0044659670,-0.0125273785,-0.0044659670,1.2426448650,-0.0366720387,-0.0125273785,-0.0366720387,1.7747573440,,,
|
||||
6.0,6.1,0.9402403823,-0.0065491760,-0.0216643844,-0.0065491760,1.0030116239,-0.0673486990,-0.0216643844,-0.0673486990,1.9303209142,,,
|
||||
6.0,6.1,1.60313579,0.0031911466,0.00,0.0031911466,1.6071931,-0.0013676342,0.00,-0.0013676342,1.59967111,,,
|
||||
6.0,6.1,1.60313579,0.0031911466,0.00,0.0031911466,1.6071931,-0.0013676342,0.00,-0.0013676342,1.59967111,,,
|
||||
|
+796
@@ -0,0 +1,796 @@
|
||||
<OpenViBE-Scenario>
|
||||
<FormatVersion>2</FormatVersion>
|
||||
<Creator>OpenViBE Designer</Creator>
|
||||
<CreatorVersion>2.2.0</CreatorVersion>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<Identifier>(0x002d042d, 0x0a17b655)</Identifier>
|
||||
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
|
||||
<Name>Test Name</Name>
|
||||
<DefaultValue>Covariance-To-Feature</DefaultValue>
|
||||
<Value>Matrix-Affine-Transformation</Value>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<Identifier>(0x006e9c48, 0x3386ce48)</Identifier>
|
||||
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
|
||||
<Name>Input Bias</Name>
|
||||
<DefaultValue>bias-input</DefaultValue>
|
||||
<Value>Matrix-Affine-Transformation-bias-input</Value>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<Identifier>(0x00667d28, 0x74308af4)</Identifier>
|
||||
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
|
||||
<Name>Output Bias</Name>
|
||||
<DefaultValue>bias-output</DefaultValue>
|
||||
<Value>Matrix-Affine-Transformation-bias-output</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Inputs></Inputs>
|
||||
<Outputs></Outputs>
|
||||
<Boxes>
|
||||
<Box>
|
||||
<Identifier>(0x0000024a, 0x00005590)</Identifier>
|
||||
<Name>CSV File Writer</Name>
|
||||
<AlgorithmClassIdentifier>(0x428375e8, 0x325f2db9)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Input stream</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations stream</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename</Name>
|
||||
<DefaultValue>record-[$core{date}-$core{time}].csv</DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/$var{Test Name}-output.csv</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Precision</Name>
|
||||
<DefaultValue>10</DefaultValue>
|
||||
<Value>10</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Append data</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Only last matrix</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>672</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>720</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xee4b6d30, 0x788aed29)</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>2</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x000015a8, 0x000079ea)</Identifier>
|
||||
<Name>Player Controller</Name>
|
||||
<AlgorithmClassIdentifier>(0x5f426dce, 0x08456e13)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
|
||||
<Name>Stimulation name</Name>
|
||||
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
|
||||
<Value>OVTK_StimulationId_EndOfFile</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xcc14d8d6, 0xf27ecb73)</TypeIdentifier>
|
||||
<Name>Action to perform</Name>
|
||||
<DefaultValue>Pause</DefaultValue>
|
||||
<Value>Stop</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>400</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>1152</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x568d148e, 0x650792b3)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x01165f9f)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>false</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>2</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x0000484f, 0x00003eff)</Identifier>
|
||||
<Name>CSV File Reader</Name>
|
||||
<AlgorithmClassIdentifier>(0x336a3d9a, 0x753f1ba4)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Output stream</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Output stimulation</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/$var{Test Name}-input.csv</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>304</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>720</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x30a4e5c9, 0x83502953)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xa9cdc629, 0xb153eb33)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>2</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x000048af, 0x00002a63)</Identifier>
|
||||
<Name>Matrix Affine Transformation</Name>
|
||||
<AlgorithmClassIdentifier>(0x1baa7180, 0x52cb19b8)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Matrix Input</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Transformed Matrix Output</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename to load transformation</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}/my-transformation-input.xml</DefaultValue>
|
||||
<Value></Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename to save transformation</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}/my-transformation-output.xml</DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/$var{Output Bias}-4.xml</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Continuous Update</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>448</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>1008</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x9a24ed4b, 0x44592bc6)</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>(0x000048af, 0x00002a64)</Identifier>
|
||||
<Name>Matrix Affine Transformation</Name>
|
||||
<AlgorithmClassIdentifier>(0x1baa7180, 0x52cb19b8)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Matrix Input</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Transformed Matrix Output</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename to load transformation</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}/my-transformation-input.xml</DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/$var{Input Bias}.xml</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename to save transformation</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}/my-transformation-output.xml</DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/$var{Output Bias}-3.xml</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Continuous Update</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>448</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>816</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x9a24ed4b, 0x44592bc6)</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>(0x000048af, 0x00002a65)</Identifier>
|
||||
<Name>Matrix Affine Transformation</Name>
|
||||
<AlgorithmClassIdentifier>(0x1baa7180, 0x52cb19b8)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Matrix Input</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Transformed Matrix Output</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename to load transformation</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}/my-transformation-input.xml</DefaultValue>
|
||||
<Value></Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename to save transformation</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}/my-transformation-output.xml</DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/$var{Output Bias}-2.xml</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Continuous Update</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>true</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>448</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>624</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x9a24ed4b, 0x44592bc6)</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>(0x000048af, 0x00002a66)</Identifier>
|
||||
<Name>Matrix Affine Transformation</Name>
|
||||
<AlgorithmClassIdentifier>(0x1baa7180, 0x52cb19b8)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Matrix Input</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Transformed Matrix Output</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename to load transformation</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}/my-transformation-input.xml</DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/$var{Input Bias}.xml</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename to save transformation</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}/my-transformation-output.xml</DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/$var{Output Bias}-1.xml</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Continuous Update</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>true</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>448</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>432</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x9a24ed4b, 0x44592bc6)</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>(0x00004ce5, 0x000064bd)</Identifier>
|
||||
<Name>Streamed matrix multiplexer</Name>
|
||||
<AlgorithmClassIdentifier>(0x7a12298b, 0x785f4d42)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Input stream 1</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Input stream 2</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Input stream 3</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Input stream 4</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Multiplexed streamed matrix</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>608</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>720</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x30a4e5c9, 0x83502953)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x4badfdff, 0xc35004a3)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>2</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xfba64161, 0x65304e21)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00005b5f, 0x000050b0)</Identifier>
|
||||
<Name>Timeout</Name>
|
||||
<AlgorithmClassIdentifier>(0x24fcd292, 0x5c8f6aa8)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Input Stream</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Output Stimulations</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Timeout delay</Name>
|
||||
<DefaultValue>5</DefaultValue>
|
||||
<Value>1</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
|
||||
<Name>Output Stimulation</Name>
|
||||
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
|
||||
<Value>OVTK_StimulationId_EndOfFile</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>352</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>1152</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x1eaee00e, 0xdb05d34e)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x017178bd)</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>2</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
</Boxes>
|
||||
<Links>
|
||||
<Link>
|
||||
<Identifier>(0x00000b3e, 0x000078a7)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00005b5f, 0x000050b0)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000015a8, 0x000079ea)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00003aab, 0x00002a7d)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x0000484f, 0x00003eff)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000048af, 0x00002a63)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00003be1, 0x0000472a)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x0000484f, 0x00003eff)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000048af, 0x00002a65)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00004da8, 0x00000384)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000048af, 0x00002a65)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00004ce5, 0x000064bd)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00004fc6, 0x000065b8)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00004ce5, 0x000064bd)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x0000024a, 0x00005590)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00005239, 0x0000200e)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x0000484f, 0x00003eff)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000048af, 0x00002a64)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000059ec, 0x00000e9a)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000048af, 0x00002a63)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00004ce5, 0x000064bd)</BoxIdentifier>
|
||||
<BoxInputIndex>3</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00005b10, 0x0000636d)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000048af, 0x00002a66)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00004ce5, 0x000064bd)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00005e9d, 0x00000c90)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x0000484f, 0x00003eff)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00005b5f, 0x000050b0)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00006987, 0x0000792b)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x0000484f, 0x00003eff)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000048af, 0x00002a66)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00006cef, 0x0000347f)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000048af, 0x00002a64)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00004ce5, 0x000064bd)</BoxIdentifier>
|
||||
<BoxInputIndex>2</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
</Links>
|
||||
<Comments>
|
||||
<Comment>
|
||||
<Identifier>(0x00000a76, 0x00006320)</Identifier>
|
||||
<Text>continuous update
|
||||
bias in input</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>432</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>240</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x00000a76, 0x00006321)</Identifier>
|
||||
<Text>non continuous update
|
||||
bias in input</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>816</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>240</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x00000a76, 0x00006322)</Identifier>
|
||||
<Text>continuous update
|
||||
without bias in input</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>624</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>240</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x00000a76, 0x00006323)</Identifier>
|
||||
<Text>non continuous update
|
||||
without bias in input</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>1008</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>240</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
</Comments>
|
||||
<Metadata>
|
||||
<Entry>
|
||||
<Identifier>(0x000062ac, 0x00003721)</Identifier>
|
||||
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
|
||||
<Data>[{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":320,"identifier":"(0x0000041e, 0x000069b5)","name":"Default window","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":480},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x00004c5d, 0x000021d4)","index":0,"name":"Default tab","parentIdentifier":"(0x0000041e, 0x000069b5)","type":2},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":0,"identifier":"(0x0000420e, 0x000074bb)","index":0,"name":"Empty","parentIdentifier":"(0x00004c5d, 0x000021d4)","type":0}]</Data>
|
||||
</Entry>
|
||||
</Metadata>
|
||||
</OpenViBE-Scenario>
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
<Classifier>
|
||||
<Classifier-data type="Minimum Distance to Mean with geodesic filtering Rebias (FgMDM Rebias) (Real Time adaptation assumed)" class-count="2" metric="Riemann">
|
||||
<Reference size="3"> 1.000000000000002 3.045804662198415e-016 -1.083439842832976e-017
|
||||
3.120207801110272e-016 1.000000000000002 1.423904735981842e-016
|
||||
-1.131932479063284e-017 9.88074520883982e-017 1</Reference>
|
||||
<Weight size="6"> 0.4571483281434478 -0.2091652423315247 0.03361968484301781 -0.3084651559605923 0.1455122307807162 -0.2948877594305606
|
||||
-0.2091652423315247 0.09570219534058361 -0.0153824679964546 0.141136224558352 -0.06657817417172912 0.1349239751403816
|
||||
0.03361968484301781 -0.0153824679964546 0.002472464929564769 -0.02268520016372741 0.01070128673448211 -0.021686688818007
|
||||
-0.3084651559605923 0.141136224558352 -0.0226852001637274 0.2081397799882916 -0.09818575328544738 0.1989783033288804
|
||||
0.1455122307807162 -0.06657817417172912 0.01070128673448211 -0.09818575328544738 0.04631715354351313 -0.09386401100695584
|
||||
-0.2948877594305606 0.1349239751403816 -0.021686688818007 0.1989783033288804 -0.09386401100695584 0.1902200780545993</Weight>
|
||||
<Bias nb-classify="0" size="3"> 1.709527037001553 0.01674065808550483 0.02077745909258021
|
||||
0.0167406580855048 1.603445856214175 0.05423884606003263
|
||||
0.02077745909258023 0.05423884606003254 0.8303254613806947</Bias>
|
||||
<Class class-id="0" nb-trials="7" size="3" stimulation="OVTK_GDF_Left"> 1.217491024198781 -0.06524404047529427 0.009190643646449745
|
||||
-0.06524404047529459 0.8795201800587355 0.03831069209919288
|
||||
0.00919064364644976 0.03831069209919275 0.8827123219453276</Class>
|
||||
<Class class-id="1" nb-trials="5" size="3" stimulation="OVTK_GDF_Right"> 0.7647242857777238 0.08583740056243625 -0.01647572387326594
|
||||
0.08583740056243591 1.208572712146326 -0.07434413112825075
|
||||
-0.01647572387326593 -0.07434413112825099 1.194911803886511</Class>
|
||||
</Classifier-data>
|
||||
</Classifier>
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
<Classifier>
|
||||
<Classifier-data type="Minimum Distance to Mean with geodesic filtering (FgMDM) (Real Time adaptation assumed)" class-count="2" metric="Riemann">
|
||||
<Reference size="3"> 1.709527037001553 0.01674065808550483 0.02077745909258021
|
||||
0.0167406580855048 1.603445856214175 0.05423884606003263
|
||||
0.02077745909258023 0.05423884606003254 0.8303254613806947</Reference>
|
||||
<Weight size="6"> 0.4571483281434481 -0.2091652423315248 0.03361968484301779 -0.3084651559605915 0.1455122307807163 -0.2948877594305613
|
||||
-0.2091652423315248 0.09570219534058362 -0.01538246799645458 0.1411362245583517 -0.06657817417172916 0.1349239751403819
|
||||
0.03361968484301779 -0.01538246799645458 0.002472464929564764 -0.02268520016372732 0.01070128673448211 -0.02168668881800702
|
||||
-0.3084651559605916 0.1411362245583517 -0.02268520016372732 0.2081397799882904 -0.09818575328544718 0.1989783033288803
|
||||
0.1455122307807163 -0.06657817417172916 0.01070128673448211 -0.09818575328544718 0.04631715354351319 -0.09386401100695609
|
||||
-0.2948877594305613 0.1349239751403819 -0.02168668881800702 0.1989783033288803 -0.09386401100695609 0.1902200780546</Weight>
|
||||
<Class class-id="0" nb-trials="7" size="3" stimulation="OVTK_GDF_Left"> 2.080424456035409 -0.08968108457255815 0.03145957072437496
|
||||
-0.08968108457255819 1.411636322699941 0.09127519234056924
|
||||
0.03145957072437495 0.09127519234056881 0.7348278641565802</Class>
|
||||
<Class class-id="1" nb-trials="5" size="3" stimulation="OVTK_GDF_Right"> 1.308402910825092 0.1571670864034623 0.002326752129441802
|
||||
0.1571670864034622 1.934558115887081 -0.01963517957026331
|
||||
0.002326752129441757 -0.01963517957026387 0.9885270397948652</Class>
|
||||
</Classifier-data>
|
||||
</Classifier>
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
<Classifier>
|
||||
<Classifier-data type="Minimum Distance to Mean Rebias (MDM Rebias)" class-count="2" metric="Riemann">
|
||||
<Bias nb-classify="0" size="3"> 1.709527037001553 0.01674065808550483 0.02077745909258021
|
||||
0.0167406580855048 1.603445856214175 0.05423884606003263
|
||||
0.02077745909258023 0.05423884606003254 0.8303254613806947</Bias>
|
||||
<Class class-id="0" nb-trials="7" size="3" stimulation="OVTK_GDF_Left"> 1.129201373790552 -0.103108470045361 -0.005591866397332841
|
||||
-0.103108470045361 0.8848967837622729 0.01595935296593173
|
||||
-0.005591866397332836 0.01595935296593177 0.8014994162357301</Class>
|
||||
<Class class-id="1" nb-trials="5" size="3" stimulation="OVTK_GDF_Right"> 0.8555858821740578 0.1461173946933084 0.004183833412542616
|
||||
0.1461173946933084 1.212890068100399 -0.03053146595067506
|
||||
0.004183833412542643 -0.03053146595067515 1.364422601725092</Class>
|
||||
</Classifier-data>
|
||||
</Classifier>
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
<Classifier>
|
||||
<Classifier-data type="Minimum Distance to Mean (MDM)" class-count="2" metric="Riemann">
|
||||
<Class class-id="0" nb-trials="7" size="3" stimulation="OVTK_GDF_Left"> 1.928498257823693 -0.1538212861771107 0.01072463406295541
|
||||
-0.1538212861771107 1.418171586084176 0.06326910288136137
|
||||
0.01072463406295545 0.06326910288136133 0.6661665454308594</Class>
|
||||
<Class class-id="1" nb-trials="5" size="3" stimulation="OVTK_GDF_Right"> 1.465255037801102 0.2589795052562249 0.03170238062149895
|
||||
0.2589795052562249 1.945333450603011 0.03574217029847612
|
||||
0.03170238062149886 0.03574217029847622 1.131531168265404</Class>
|
||||
</Classifier-data>
|
||||
</Classifier>
|
||||
+97
@@ -0,0 +1,97 @@
|
||||
Time:2,End Time,,,Event Id,Event Date,Event Duration
|
||||
0.0,0.1,1.3146344607,1.4748541725,,,
|
||||
0.0,0.1,0.5287184737,0.4712815263,,,
|
||||
0.0,0.1,1.3146344607,1.4748541725,,,
|
||||
0.0,0.1,0.5287184737,0.4712815263,,,
|
||||
0.0,0.1,0.0266535092,0.7187078375,,,
|
||||
0.0,0.1,0.9642408218,0.0357591782,,,
|
||||
0.0,0.1,0.0266535092,0.7187078375,,,
|
||||
0.0,0.1,0.9642408218,0.0357591782,,,
|
||||
0.5,0.6,0.6051193554,1.0518176354,769:769:769:769,0.1:0.1:0.1:0.1,0.0:0.0:0.0:0.0
|
||||
0.5,0.6,0.6347963992,0.3652036008,,,
|
||||
0.5,0.6,1.8559620293,1.8412868439,,,
|
||||
0.5,0.6,0.4980153912,0.5019846088,,,
|
||||
0.5,0.6,0.0930348094,0.7884208263,,,
|
||||
0.5,0.6,0.8944532140,0.1055467860,,,
|
||||
0.5,0.6,0.2438422258,0.4515437911,,,
|
||||
0.5,0.6,0.6493426386,0.3506573614,,,
|
||||
1.0,1.1,0.6321793518,0.8124450161,769:770:769:769,0.6:0.6:0.6:0.6,0.0:0.0:0.0:0.0
|
||||
1.0,1.1,0.5623918813,0.4376081187,,,
|
||||
1.0,1.1,0.9585763775,0.8417488820,,,
|
||||
1.0,1.1,0.4675537809,0.5324462191,,,
|
||||
1.0,1.1,0.2853965111,0.4203267068,,,
|
||||
1.0,1.1,0.5955971068,0.4044028932,,,
|
||||
1.0,1.1,0.5896943472,0.0785980891,,,
|
||||
1.0,1.1,0.1176103227,0.8823896773,,,
|
||||
1.5,1.6,1.1148870146,1.8495487410,769:770:769:770,1.1:1.1:1.1:1.1,0.0:0.0:0.0:0.0
|
||||
1.5,1.6,0.6239125734,0.3760874266,,,
|
||||
1.5,1.6,0.9232558534,1.5992808599,,,
|
||||
1.5,1.6,0.6339970600,0.3660029400,,,
|
||||
1.5,1.6,0.8833524332,1.5605360001,,,
|
||||
1.5,1.6,0.6385463341,0.3614536659,,,
|
||||
1.5,1.6,0.7085752971,1.3178982986,,,
|
||||
1.5,1.6,0.6503407207,0.3496592793,,,
|
||||
2.0,2.1,0.7163048394,1.0671543241,769:769:769:769,1.6:1.6:1.6:1.6,0.0:0.0:0.0:0.0
|
||||
2.0,2.1,0.5983620741,0.4016379259,,,
|
||||
2.0,2.1,0.9722919048,0.9418856609,,,
|
||||
2.0,2.1,0.4920576219,0.5079423781,,,
|
||||
2.0,2.1,0.0745574219,0.8320457554,,,
|
||||
2.0,2.1,0.9177617907,0.0822382093,,,
|
||||
2.0,2.1,0.3096578586,0.3640810790,,,
|
||||
2.0,2.1,0.5403889529,0.4596110471,,,
|
||||
2.5,2.6,0.7055973474,0.3311470950,769:770:769:769,2.1:2.1:2.1:2.1,0.0:0.0:0.0:0.0
|
||||
2.5,2.6,0.3194105331,0.6805894669,,,
|
||||
2.5,2.6,1.0814347909,0.4657549948,,,
|
||||
2.5,2.6,0.3010328785,0.6989671215,,,
|
||||
2.5,2.6,0.5202855039,0.2434159481,,,
|
||||
2.5,2.6,0.3187318126,0.6812681874,,,
|
||||
2.5,2.6,0.8603890212,0.2124549051,,,
|
||||
2.5,2.6,0.1980296480,0.8019703520,,,
|
||||
3.0,3.1,0.6840648815,0.4765003984,770:770:770:770,2.6:2.6:2.6:2.6,0.0:0.0:0.0:0.0
|
||||
3.0,3.1,0.4105761275,0.5894238725,,,
|
||||
3.0,3.1,0.8864877839,0.4773963713,,,
|
||||
3.0,3.1,0.3500270675,0.6499729325,,,
|
||||
3.0,3.1,0.4427522664,0.2809272237,,,
|
||||
3.0,3.1,0.3881928776,0.6118071224,,,
|
||||
3.0,3.1,0.6555921150,0.0738417697,,,
|
||||
3.0,3.1,0.1012316144,0.8987683856,,,
|
||||
4.0,4.1,0.8454327898,0.7475471701,770:770:770:770,3.1:3.1:3.1:3.1,0.0:0.0:0.0:0.0
|
||||
4.0,4.1,0.4692759412,0.5307240588,,,
|
||||
4.0,4.1,1.0196264961,0.6934266642,,,
|
||||
4.0,4.1,0.4047899273,0.5952100727,,,
|
||||
4.0,4.1,0.5949672922,0.0970870361,,,
|
||||
4.0,4.1,0.1402881712,0.8597118288,,,
|
||||
4.0,4.1,0.7252648118,0.1903424748,,,
|
||||
4.0,4.1,0.2078865880,0.7921134120,,,
|
||||
4.5,4.6,0.9511190382,0.3534512553,770:770:770:770,4.1:4.1:4.1:4.1,0.0:0.0:0.0:0.0
|
||||
4.5,4.6,0.2709330858,0.7290669142,,,
|
||||
4.5,4.6,1.0658708278,0.4466031818,,,
|
||||
4.5,4.6,0.2952799050,0.7047200950,,,
|
||||
4.5,4.6,0.8758921425,0.2000189869,,,
|
||||
4.5,4.6,0.1859066064,0.8140933936,,,
|
||||
4.5,4.6,0.9303070670,0.3636609841,,,
|
||||
4.5,4.6,0.2810432482,0.7189567518,,,
|
||||
5.0,5.1,1.0673142921,0.6866504528,770:770:770:770,4.6:4.6:4.6:4.6,0.0:0.0:0.0:0.0
|
||||
5.0,5.1,0.3914847518,0.6085152482,,,
|
||||
5.0,5.1,1.0690569132,0.8035065888,,,
|
||||
5.0,5.1,0.4290944408,0.5709055592,,,
|
||||
5.0,5.1,0.7632985592,0.0588512626,,,
|
||||
5.0,5.1,0.0715821631,0.9284178369,,,
|
||||
5.0,5.1,0.7283205622,0.1097229102,,,
|
||||
5.0,5.1,0.1309274683,0.8690725317,,,
|
||||
5.5,5.6,0.8565218506,0.4480630617,770:770:770:770,5.1:5.1:5.1:5.1,0.0:0.0:0.0:0.0
|
||||
5.5,5.6,0.3434525859,0.6565474141,,,
|
||||
5.5,5.6,0.8137461529,0.4779701966,,,
|
||||
5.5,5.6,0.3700272097,0.6299727903,,,
|
||||
5.5,5.6,0.5942285596,0.1175751448,,,
|
||||
5.5,5.6,0.1651791695,0.8348208305,,,
|
||||
5.5,5.6,0.5004183664,0.1318946493,,,
|
||||
5.5,5.6,0.2085907549,0.7914092451,,,
|
||||
6.0,6.1,0.9215137413,0.5110243251,770:770:770:770,5.6:5.6:5.6:5.6,0.0:0.0:0.0:0.0
|
||||
6.0,6.1,0.3567265241,0.6432734759,,,
|
||||
6.0,6.1,0.7684991863,0.5332461095,,,
|
||||
6.0,6.1,0.4096393597,0.5903606403,,,
|
||||
6.0,6.1,0.6318850879,0.0668547115,,,
|
||||
6.0,6.1,0.0956789803,0.9043210197,,,
|
||||
6.0,6.1,0.5036063251,0.1140517296,,,
|
||||
6.0,6.1,0.1846518939,0.8153481061,,,
|
||||
|
+1088
File diff suppressed because it is too large
Load Diff
+97
@@ -0,0 +1,97 @@
|
||||
Time:2,End Time,,,Event Id,Event Date,Event Duration
|
||||
0.0,0.1,1.3146344607,1.4748541725,,,
|
||||
0.0,0.1,0.5287184737,0.4712815263,,,
|
||||
0.0,0.1,1.3146344607,1.4748541725,,,
|
||||
0.0,0.1,0.5287184737,0.4712815263,,,
|
||||
0.0,0.1,0.0266535092,0.7187078375,,,
|
||||
0.0,0.1,0.9642408218,0.0357591782,,,
|
||||
0.0,0.1,0.0266535092,0.7187078375,,,
|
||||
0.0,0.1,0.9642408218,0.0357591782,,,
|
||||
0.5,0.6,0.6051193554,1.0518176354,769:769:769:769,0.1:0.1:0.1:0.1,0.0:0.0:0.0:0.0
|
||||
0.5,0.6,0.6347963992,0.3652036008,,,
|
||||
0.5,0.6,1.8559620293,1.8412868439,,,
|
||||
0.5,0.6,0.4980153912,0.5019846088,,,
|
||||
0.5,0.6,0.0930348094,0.7884208263,,,
|
||||
0.5,0.6,0.8944532140,0.1055467860,,,
|
||||
0.5,0.6,0.2438422258,0.4515437911,,,
|
||||
0.5,0.6,0.6493426386,0.3506573614,,,
|
||||
1.0,1.1,0.6321793518,0.8124450161,769:770:769:769,0.6:0.6:0.6:0.6,0.0:0.0:0.0:0.0
|
||||
1.0,1.1,0.5623918813,0.4376081187,,,
|
||||
1.0,1.1,1.0777024519,0.6775878148,,,
|
||||
1.0,1.1,0.3860260765,0.6139739235,,,
|
||||
1.0,1.1,0.2853965111,0.4203267068,,,
|
||||
1.0,1.1,0.5955971068,0.4044028932,,,
|
||||
1.0,1.1,0.5896943472,0.0785980891,,,
|
||||
1.0,1.1,0.1176103227,0.8823896773,,,
|
||||
1.5,1.6,1.1148870146,1.8495487410,769:770:769:770,1.1:1.1:1.1:1.1,0.0:0.0:0.0:0.0
|
||||
1.5,1.6,0.6239125734,0.3760874266,,,
|
||||
1.5,1.6,0.9909040183,1.4164015407,,,
|
||||
1.5,1.6,0.5883763012,0.4116236988,,,
|
||||
1.5,1.6,0.8833524332,1.5605360001,,,
|
||||
1.5,1.6,0.6385463341,0.3614536659,,,
|
||||
1.5,1.6,0.6496058623,1.3047986171,,,
|
||||
1.5,1.6,0.6676195388,0.3323804612,,,
|
||||
2.0,2.1,0.7163048394,1.0671543241,769:769:769:769,1.6:1.6:1.6:1.6,0.0:0.0:0.0:0.0
|
||||
2.0,2.1,0.5983620741,0.4016379259,,,
|
||||
2.0,2.1,1.1020382378,0.7977816861,,,
|
||||
2.0,2.1,0.4199248971,0.5800751029,,,
|
||||
2.0,2.1,0.0745574219,0.8320457554,,,
|
||||
2.0,2.1,0.9177617907,0.0822382093,,,
|
||||
2.0,2.1,0.3691719435,0.3509813975,,,
|
||||
2.0,2.1,0.4873703662,0.5126296338,,,
|
||||
2.5,2.6,0.7055973474,0.3311470950,769:770:769:770,2.1:2.1:2.1:2.1,0.0:0.0:0.0:0.0
|
||||
2.5,2.6,0.3194105331,0.6805894669,,,
|
||||
2.5,2.6,1.2333291135,0.5446448151,,,
|
||||
2.5,2.6,0.3063289097,0.6936710903,,,
|
||||
2.5,2.6,0.5202855039,0.2434159481,,,
|
||||
2.5,2.6,0.3187318126,0.6812681874,,,
|
||||
2.5,2.6,0.9457079276,0.2756947863,,,
|
||||
2.5,2.6,0.2257198082,0.7742801918,,,
|
||||
3.0,3.1,0.7291625779,0.4486378710,770:770:770:770,2.6:2.6:2.6:2.6,0.0:0.0:0.0:0.0
|
||||
3.0,3.1,0.3809116149,0.6190883851,,,
|
||||
3.0,3.1,1.1038872155,0.4869987955,,,
|
||||
3.0,3.1,0.3061179696,0.6938820304,,,
|
||||
3.0,3.1,0.4827742283,0.2403578990,,,
|
||||
3.0,3.1,0.3323844840,0.6676155160,,,
|
||||
3.0,3.1,0.8070947922,0.1026198026,,,
|
||||
3.0,3.1,0.1128043929,0.8871956071,,,
|
||||
4.0,4.1,0.8712464821,0.7861385418,770:770:770:770,3.1:3.1:3.1:3.1,0.0:0.0:0.0:0.0
|
||||
4.0,4.1,0.4743246321,0.5256753679,,,
|
||||
4.0,4.1,1.0942141267,0.9215909190,,,
|
||||
4.0,4.1,0.4571825638,0.5428174362,,,
|
||||
4.0,4.1,0.6666144159,0.0221808687,,,
|
||||
4.0,4.1,0.0322024108,0.9677975892,,,
|
||||
4.0,4.1,0.9235954973,0.2077183073,,,
|
||||
4.0,4.1,0.1836080374,0.8163919626,,,
|
||||
4.5,4.6,1.0176355173,0.4395194172,770:770:770:770,4.1:4.1:4.1:4.1,0.0:0.0:0.0:0.0
|
||||
4.5,4.6,0.3016284726,0.6983715274,,,
|
||||
4.5,4.6,1.2237688054,0.7143237987,,,
|
||||
4.5,4.6,0.3685705199,0.6314294801,,,
|
||||
4.5,4.6,0.9475392662,0.2615165902,,,
|
||||
4.5,4.6,0.2162981874,0.7837018126,,,
|
||||
4.5,4.6,1.1286377524,0.3919887318,,,
|
||||
4.5,4.6,0.2577810763,0.7422189237,,,
|
||||
5.0,5.1,1.1634608004,0.6232598273,770:770:770:770,4.6:4.6:4.6:4.6,0.0:0.0:0.0:0.0
|
||||
5.0,5.1,0.3488289202,0.6511710798,,,
|
||||
5.0,5.1,1.3575893945,0.6790904993,,,
|
||||
5.0,5.1,0.3334301582,0.6665698418,,,
|
||||
5.0,5.1,0.8349456829,0.1198656080,,,
|
||||
5.0,5.1,0.1255385322,0.8744614678,,,
|
||||
5.0,5.1,0.9266512477,0.1543668878,,,
|
||||
5.0,5.1,0.1427976855,0.8572023145,,,
|
||||
5.5,5.6,0.9421097042,0.4225417076,770:770:770:770,5.1:5.1:5.1:5.1,0.0:0.0:0.0:0.0
|
||||
5.5,5.6,0.3096334375,0.6903665625,,,
|
||||
5.5,5.6,1.0286598949,0.5058249291,,,
|
||||
5.5,5.6,0.3296382742,0.6703617258,,,
|
||||
5.5,5.6,0.6658756833,0.0611909524,,,
|
||||
5.5,5.6,0.0841614088,0.9158385912,,,
|
||||
5.5,5.6,0.6987490519,0.0863992153,,,
|
||||
5.5,5.6,0.1100419104,0.8899580896,,,
|
||||
6.0,6.1,1.0146269373,0.4726840080,770:770:770:770,5.6:5.6:5.6:5.6,0.0:0.0:0.0:0.0
|
||||
6.0,6.1,0.3178111541,0.6821888459,,,
|
||||
6.0,6.1,1.0851903380,0.3673923326,,,
|
||||
6.0,6.1,0.2529235272,0.7470764728,,,
|
||||
6.0,6.1,0.7035322116,0.0179716102,,,
|
||||
6.0,6.1,0.0249085448,0.9750914552,,,
|
||||
6.0,6.1,0.7019370106,0.0765651631,,,
|
||||
6.0,6.1,0.0983493248,0.9016506752,,,
|
||||
|
+1088
File diff suppressed because it is too large
Load Diff
+13
@@ -0,0 +1,13 @@
|
||||
Time:3x3,End Time,1:,1:,1:,2:,2:,2:,3:,3:,3:,Event Id,Event Date,Event Duration
|
||||
0.0,0.1,2.5849288,1.33543611,0.511092833,1.33543611,2.19748746,0.527579698,0.511092833,0.527579698,0.507583739,769,0.0,0.0
|
||||
0.5,0.6,1.99839975,-0.650968006,-0.150223386,-0.650968006,1.52895167,0.0688523853,-0.150223386,0.0688523853,0.652648582,769,0.5,0.0
|
||||
1.0,1.1,1.21758058,-0.00,0.013088361,-0.00,1.00554914,0.0104706888,0.013088361,0.0104706888,0.756870279,769,1.0,0.0
|
||||
1.5,1.6,2.57527815,-0.621023059,-0.153239456,-0.621023059,0.897709368,0.0564566417,-0.153239456,0.0564566417,0.317012482,769,1.5,0.0
|
||||
2.0,2.1,2.87232755,-0.786745664,-0.0991696216,-0.786745664,1.81451826,-0.0991696216,-0.0991696216,-0.0991696216,0.783154191,769,2.0,0.0
|
||||
2.5,2.6,1.64826027,-0.00963569008,0.0289070702,-0.00963569008,1.5880372,0.0770855206,0.0289070702,0.0770855206,1.17370253,769,2.5,0.0
|
||||
3.0,3.1,1.9742694,-0.149321794,0.108597668,-0.149321794,2.11906629,-0.081448251,0.108597668,-0.081448251,1.04666432,769,3.0,0.0
|
||||
4.0,4.1,1.06313148,0.315509839,0.0893944544,0.315509839,1.33131485,0.00,0.0893944544,0.00,0.705553667,769,4.0,0.0
|
||||
4.5,4.6,1.18724478,0.490413981,0.0959505616,0.490413981,2.21604802,0.111942322,0.0959505616,0.111942322,0.936707201,770,4.5,0.0
|
||||
5.0,5.1,1.86743369,0.055816941,0.074422588,0.055816941,2.70096668,-0.148845176,0.074422588,-0.148845176,1.49159963,770,5.0,0.0
|
||||
5.5,5.6,1.89536719,0.324938579,-0.160114662,0.324938579,2.27210757,0.20720721,-0.160114662,0.20720721,1.21252525,770,5.5,0.0
|
||||
6.0,6.1,1.60313579,0.00319114656,0.00,0.00319114656,1.6071931,-0.00136763424,0.00,-0.00136763424,1.59967111,770,6.0,0.0
|
||||
|
+97
@@ -0,0 +1,97 @@
|
||||
Time:2,End Time,,,Event Id,Event Date,Event Duration
|
||||
0.0,0.1,1.3146344607,1.4748541725,,,
|
||||
0.0,0.1,0.5287184737,0.4712815263,,,
|
||||
0.0,0.1,1.3146344607,1.4748541725,,,
|
||||
0.0,0.1,0.5287184737,0.4712815263,,,
|
||||
0.0,0.1,0.0266535092,0.7187078375,,,
|
||||
0.0,0.1,0.9642408218,0.0357591782,,,
|
||||
0.0,0.1,0.0266535092,0.7187078375,,,
|
||||
0.0,0.1,0.9642408218,0.0357591782,,,
|
||||
0.5,0.6,0.4643261138,1.0518176354,769:769:769:769,0.1:0.1:0.1:0.1,0.0:0.0:0.0:0.0
|
||||
0.5,0.6,0.6937453233,0.3062546767,,,
|
||||
0.5,0.6,1.6956511871,1.8412868439,,,
|
||||
0.5,0.6,0.5205878157,0.4794121843,,,
|
||||
0.5,0.6,0.0963664980,0.7884208263,,,
|
||||
0.5,0.6,0.8910851282,0.1089148718,,,
|
||||
0.5,0.6,0.2405105372,0.4515437911,,,
|
||||
0.5,0.6,0.6524687046,0.3475312954,,,
|
||||
1.0,1.1,0.6014301665,0.8124450161,769:769:769:769,0.6:0.6:0.6:0.6,0.0:0.0:0.0:0.0
|
||||
1.0,1.1,0.5746228706,0.4253771294,,,
|
||||
1.0,1.1,0.9850377743,0.8417488820,,,
|
||||
1.0,1.1,0.4607811641,0.5392188359,,,
|
||||
1.0,1.1,0.2717276214,0.4203267068,,,
|
||||
1.0,1.1,0.6073608526,0.3926391474,,,
|
||||
1.0,1.1,0.6134562392,0.0785980891,,,
|
||||
1.0,1.1,0.1135721371,0.8864278629,,,
|
||||
1.5,1.6,1.1028723354,1.8495487410,769:770:769:770,1.1:1.1:1.1:1.1,0.0:0.0:0.0:0.0
|
||||
1.5,1.6,0.6264515437,0.3735484563,,,
|
||||
1.5,1.6,0.8931606340,1.5992808599,,,
|
||||
1.5,1.6,0.6416523171,0.3583476829,,,
|
||||
1.5,1.6,0.8684816718,1.5605360001,,,
|
||||
1.5,1.6,0.6424555976,0.3575444024,,,
|
||||
1.5,1.6,0.6258439703,1.3178982986,,,
|
||||
1.5,1.6,0.6780211140,0.3219788860,,,
|
||||
2.0,2.1,0.6261108933,1.0671543241,769:769:769:769,1.6:1.6:1.6:1.6,0.0:0.0:0.0:0.0
|
||||
2.0,2.1,0.6302345983,0.3697654017,,,
|
||||
2.0,2.1,0.9998915882,0.9418856609,,,
|
||||
2.0,2.1,0.4850637020,0.5149362980,,,
|
||||
2.0,2.1,0.1399914271,0.8320457554,,,
|
||||
2.0,2.1,0.8559814073,0.1440185927,,,
|
||||
2.0,2.1,0.3279732492,0.3640810790,,,
|
||||
2.0,2.1,0.5260874243,0.4739125757,,,
|
||||
2.5,2.6,0.6119976041,0.3311470950,769:770:769:769,2.1:2.1:2.1:2.1,0.0:0.0:0.0:0.0
|
||||
2.5,2.6,0.3511095332,0.6488904668,,,
|
||||
2.5,2.6,1.1374772823,0.4657549948,,,
|
||||
2.5,2.6,0.2905099912,0.7094900088,,,
|
||||
2.5,2.6,0.4486383802,0.2434159481,,,
|
||||
2.5,2.6,0.3517295364,0.6482704636,,,
|
||||
2.5,2.6,0.9045092334,0.2124549051,,,
|
||||
2.5,2.6,0.1902074541,0.8097925459,,,
|
||||
3.0,3.1,0.6352502437,0.4765003984,770:770:770:770,2.6:2.6:2.6:2.6,0.0:0.0:0.0:0.0
|
||||
3.0,3.1,0.4286036638,0.5713963362,,,
|
||||
3.0,3.1,1.0115551361,0.4773963713,,,
|
||||
3.0,3.1,0.3206258692,0.6793741308,,,
|
||||
3.0,3.1,0.4111271045,0.2809272237,,,
|
||||
3.0,3.1,0.4059323268,0.5940676732,,,
|
||||
3.0,3.1,0.7658960980,0.0738417697,,,
|
||||
3.0,3.1,0.0879343097,0.9120656903,,,
|
||||
4.0,4.1,0.8453784458,0.7475471701,770:770:770:770,3.1:3.1:3.1:3.1,0.0:0.0:0.0:0.0
|
||||
4.0,4.1,0.4692919510,0.5307080490,,,
|
||||
4.0,4.1,1.0616555036,0.6934266642,,,
|
||||
4.0,4.1,0.3950964102,0.6049035898,,,
|
||||
4.0,4.1,0.5949672922,0.0970870361,,,
|
||||
4.0,4.1,0.1402881712,0.8597118288,,,
|
||||
4.0,4.1,0.8823968030,0.1903424748,,,
|
||||
4.0,4.1,0.1774359145,0.8225640855,,,
|
||||
4.5,4.6,0.9510921853,0.4133214582,770:770:770:770,4.1:4.1:4.1:4.1,0.0:0.0:0.0:0.0
|
||||
4.5,4.6,0.3029297311,0.6970702689,,,
|
||||
4.5,4.6,1.1703812211,0.4908732854,,,
|
||||
4.5,4.6,0.2954834936,0.7045165064,,,
|
||||
4.5,4.6,0.8758921425,0.1838378142,,,
|
||||
4.5,4.6,0.1734760946,0.8265239054,,,
|
||||
4.5,4.6,1.0874390582,0.3953847299,,,
|
||||
4.5,4.6,0.2666430989,0.7333569011,,,
|
||||
5.0,5.1,1.0673471203,0.5523447946,770:770:770:770,4.6:4.6:4.6:4.6,0.0:0.0:0.0:0.0
|
||||
5.0,5.1,0.3410184304,0.6589815696,,,
|
||||
5.0,5.1,1.2646035568,0.7114824206,,,
|
||||
5.0,5.1,0.3600462878,0.6399537122,,,
|
||||
5.0,5.1,0.7632985592,0.0712442309,,,
|
||||
5.0,5.1,0.0853691767,0.9146308233,,,
|
||||
5.0,5.1,0.8854525534,0.1933982252,,,
|
||||
5.0,5.1,0.1792631836,0.8207368164,,,
|
||||
5.5,5.6,0.8565016826,0.3905536191,770:770:770:770,5.1:5.1:5.1:5.1,0.0:0.0:0.0:0.0
|
||||
5.5,5.6,0.3131806733,0.6868193267,,,
|
||||
5.5,5.6,0.9583113737,0.4435190877,,,
|
||||
5.5,5.6,0.3163856828,0.6836143172,,,
|
||||
5.5,5.6,0.5942285596,0.0978257686,,,
|
||||
5.5,5.6,0.1413556200,0.8586443800,,,
|
||||
5.5,5.6,0.6575503577,0.0345039706,,,
|
||||
5.5,5.6,0.0498573149,0.9501426851,,,
|
||||
6.0,6.1,0.9215401748,0.4599537361,770:770:770:770,5.6:5.6:5.6:5.6,0.0:0.0:0.0:0.0
|
||||
6.0,6.1,0.3329393872,0.6670606128,,,
|
||||
6.0,6.1,0.9791673177,0.5064862975,,,
|
||||
6.0,6.1,0.3409181604,0.6590818396,,,
|
||||
6.0,6.1,0.6318850879,0.0601692404,,,
|
||||
6.0,6.1,0.0869429435,0.9130570565,,,
|
||||
6.0,6.1,0.6607383164,0.0313160119,,,
|
||||
6.0,6.1,0.0452507999,0.9547492001,,,
|
||||
|
+1044
File diff suppressed because it is too large
Load Diff
+8
@@ -0,0 +1,8 @@
|
||||
Time:3x3,End Time,1:,1:,1:,2:,2:,2:,3:,3:,3:,Event Id,Event Date,Event Duration
|
||||
0.0,0.1,2.5849288,1.33543611,0.511092833,1.33543611,2.19748746,0.527579698,0.511092833,0.527579698,0.507583739,,,
|
||||
0.5,0.6,1.99839975,-0.650968006,-0.150223386,-0.650968006,1.52895167,0.0688523853,-0.150223386,0.0688523853,0.652648582,,,
|
||||
1.0,1.1,1.21758058,-0.00,0.013088361,-0.00,1.00554914,0.0104706888,0.013088361,0.0104706888,0.756870279,,,
|
||||
1.5,1.6,2.57527815,-0.621023059,-0.153239456,-0.621023059,0.897709368,0.0564566417,-0.153239456,0.0564566417,0.317012482,,,
|
||||
2.0,2.1,2.87232755,-0.786745664,-0.0991696216,-0.786745664,1.81451826,-0.0991696216,-0.0991696216,-0.0991696216,0.783154191,,,
|
||||
2.5,2.6,1.64826027,-0.00963569008,0.0289070702,-0.00963569008,1.5880372,0.0770855206,0.0289070702,0.0770855206,1.17370253,,,
|
||||
3.0,3.1,1.9742694,-0.149321794,0.108597668,-0.149321794,2.11906629,-0.081448251,0.108597668,-0.081448251,1.04666432,,,
|
||||
|
+6
@@ -0,0 +1,6 @@
|
||||
Time:3x3,End Time,1:,1:,1:,2:,2:,2:,3:,3:,3:,Event Id,Event Date,Event Duration
|
||||
0.0,0.1,1.06313148,0.315509839,0.0893944544,0.315509839,1.33131485,0.00,0.0893944544,0.00,0.705553667,,,
|
||||
0.5,0.6,1.18724478,0.490413981,0.0959505616,0.490413981,2.21604802,0.111942322,0.0959505616,0.111942322,0.936707201,,,
|
||||
1.0,1.1,1.86743369,0.055816941,0.074422588,0.055816941,2.70096668,-0.148845176,0.074422588,-0.148845176,1.49159963,,,
|
||||
1.5,1.6,1.89536719,0.324938579,-0.160114662,0.324938579,2.27210757,0.20720721,-0.160114662,0.20720721,1.21252525,,,
|
||||
2.0,2.1,1.60313579,0.00319114656,0.00,0.00319114656,1.6071931,-0.00136763424,0.00,-0.00136763424,1.59967111,,,
|
||||
|
+1044
File diff suppressed because it is too large
Load Diff
+2
@@ -0,0 +1,2 @@
|
||||
Time:3x3,End Time,1:,1:,1:,2:,2:,2:,3:,3:,3:,Event Id,Event Date,Event Duration
|
||||
0.0000000000,0.0000000000, 1.70952664, 0.01674082, 0.02077766, 0.01674082, 1.60344581, 0.05423902, 0.02077766, 0.05423902, 0.8303257,,,
|
||||
|
Reference in New Issue
Block a user