This commit is contained in:
2021-10-14 13:47:35 +02:00
commit 6625a8dfaa
4026 changed files with 844291 additions and 0 deletions
@@ -0,0 +1,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})
@@ -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>
@@ -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
@@ -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>
@@ -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|
*/
@@ -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|
*/
@@ -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|
*/
@@ -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|
*/
@@ -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|
*/
@@ -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|
*/
@@ -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|
*/
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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);
@@ -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})
@@ -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,,,
1 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
2 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
3 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
4 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
5 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
6 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
7 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
8 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
9 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
10 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
11 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
12 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
13 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
@@ -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,,,
1 Time:3x3 End Time 1: 1: 1: 2: 2: 2: 3: 3: 3: Event Id Event Date Event Duration
2 0.0000000000 0.5000000000 2.76 1.62 0.62 1.62 2.29 0.64 0.62 0.64 0.24
3 0.0000000000 0.5000000000 1.00 0.644381009 0.76178344 0.644381009 1.00 0.863289805 0.76178344 0.863289805 1.00
4 0.0000000000 0.5000000000 2.5849288 1.33543611 0.511092833 1.33543611 2.19748746 0.527579698 0.511092833 0.527579698 0.507583739
5 0.0000000000 0.5000000000 2.34520102 0.945778241 0.361964512 0.945778241 2.07080856 0.373640786 0.361964512 0.373640786 0.87399042
6 0.0000000000 0.5000000000 0.77844311 0.26946108 -0.07784431 0.26946108 0.18562874 0.00598802 -0.07784431 0.00598802 0.03592814
7 0.0000000000 0.5000000000 1.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 1.00
8 0.5000000000 1.0000000000 2.36 -1.04 -0.24 -1.04 1.61 0.11 -0.24 0.11 0.21
9 0.5000000000 1.0000000000 1.00 -0.533536825 -0.340914594 -0.533536825 1.00 0.189177769 -0.340914594 0.189177769 1.00
10 0.5000000000 1.0000000000 1.99839975 -0.650968006 -0.150223386 -0.650968006 1.52895167 0.0688523853 -0.150223386 0.0688523853 0.652648582
11 0.5000000000 1.0000000000 1.83506857 -0.475246188 -0.109672197 -0.475246188 1.49234296 0.0502664238 -0.109672197 0.0502664238 0.852588472
12 0.5000000000 1.0000000000 0.80645161 0.24596774 -0.06048387 0.24596774 0.18145161 -0.01612903 -0.06048387 -0.01612903 0.01209677
13 0.5000000000 1.0000000000 1.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 1.00
14 1.0000000000 1.5000000000 1.85 -0.00 0.05 -0.00 1.04 0.04 0.05 0.04 0.09
15 1.0000000000 1.5000000000 1.00 -0.00 0.12253577 -0.00 1.00 0.13074409 0.12253577 0.13074409 1.00
16 1.0000000000 1.5000000000 1.21758058 -0.00 0.013088361 -0.00 1.00554914 0.0104706888 0.013088361 0.0104706888 0.756870279
17 1.0000000000 1.5000000000 1.18111558 -0.00 0.0109600534 -0.00 1.00356272 0.00876804276 0.0109600534 0.00876804276 0.795321701
18 1.0000000000 1.5000000000 0.75806452 0.30107527 -0.16666667 0.30107527 0.19354839 -0.07526882 -0.16666667 -0.07526882 0.0483871
19 1.0000000000 1.5000000000 1.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 1.00
20 1.5000000000 2.0000000000 2.89 -0.77 -0.19 -0.77 0.81 0.07 -0.19 0.07 0.09
21 1.5000000000 2.0000000000 1.00 -0.503267974 -0.37254902 -0.503267974 1.00 0.259259259 -0.37254902 0.259259259 1.00
22 1.5000000000 2.0000000000 2.57527815 -0.621023059 -0.153239456 -0.621023059 0.897709368 0.0564566417 -0.153239456 0.0564566417 0.317012482
23 1.5000000000 2.0000000000 2.22680827 -0.45607113 -0.112537032 -0.45607113 0.994823924 0.0414610118 -0.112537032 0.0414610118 0.568367802
24 1.5000000000 2.0000000000 0.89928058 0.10071942 -0.03597122 0.10071942 0.09352518 0.00 -0.03597122 0.00 0.00719424
25 1.5000000000 2.0000000000 1.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 1.00
26 2.0000000000 2.5000000000 3.41 -1.19 -0.15 -1.19 1.81 -0.15 -0.15 -0.15 0.25
27 2.0000000000 2.5000000000 1.00 -0.478994453 -0.162459108 -0.478994453 1.00 -0.222988244 -0.162459108 -0.222988244 1.00
28 2.0000000000 2.5000000000 2.87232755 -0.786745664 -0.0991696216 -0.786745664 1.81451826 -0.0991696216 -0.0991696216 -0.0991696216 0.783154191
29 2.0000000000 2.5000000000 2.53874679 -0.536560096 -0.0676336255 -0.536560096 1.81732146 -0.0676336255 -0.0676336255 -0.0676336255 1.11393175
30 2.0000000000 2.5000000000 0.84555985 0.16988417 -0.08880309 0.16988417 0.13513514 -0.03088803 -0.08880309 -0.03088803 0.01930502
31 2.0000000000 2.5000000000 1.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 1.00
32 2.5000000000 3.0000000000 2.21 -0.04 0.12 -0.04 1.96 0.32 0.12 0.32 0.24
33 2.5000000000 3.0000000000 1.00 -0.0192192227 0.164770511 -0.0192192227 1.00 0.466569475 0.164770511 0.466569475 1.00
34 2.5000000000 3.0000000000 1.64826027 -0.00963569008 0.0289070702 -0.00963569008 1.5880372 0.0770855206 0.0289070702 0.0770855206 1.17370253
35 2.5000000000 3.0000000000 1.47 -0.00 0.00 -0.00 1.47 0.00 0.00 0.00 1.47
36 2.5000000000 3.0000000000 0.79899497 0.22110553 -0.10552764 0.22110553 0.17085427 -0.0201005 -0.10552764 -0.0201005 0.03015075
37 2.5000000000 3.0000000000 1.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 1.00
38 3.0000000000 3.5000000000 2.29 -0.33 0.24 -0.33 2.61 -0.18 0.24 -0.18 0.24
39 3.0000000000 3.5000000000 1.00 -0.134982027 0.323733677 -0.134982027 1.00 -0.227429413 0.323733677 -0.227429413 1.00
40 3.0000000000 3.5000000000 1.9742694 -0.149321794 0.108597668 -0.149321794 2.11906629 -0.081448251 0.108597668 -0.081448251 1.04666432
41 3.0000000000 3.5000000000 1.73914927 -0.0147732834 0.0107442061 -0.0147732834 1.75347488 -0.0080581546 0.0107442061 -0.0080581546 1.64737585
42 3.0000000000 3.5000000000 0.71686747 0.22289157 -0.06024096 0.22289157 0.25903614 -0.04216867 -0.06024096 -0.04216867 0.02409639
43 3.0000000000 3.5000000000 1.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 1.00
44 3.5000000000 4.0000000000 1.09 0.60 0.17 0.60 1.60 0.00 0.17 0.00 0.41
45 3.5000000000 4.0000000000 1.00 0.4543369 0.25429847 0.4543369 1.00 0.00 0.25429847 0.00 1.00
46 3.5000000000 4.0000000000 1.06313148 0.315509839 0.0893944544 0.315509839 1.33131485 0.00 0.0893944544 0.00 0.705553667
47 3.5000000000 4.0000000000 1.04056757 0.07659782 0.02170272 0.07659782 1.10567572 0.00 0.02170272 0.00 0.95375671
48 3.5000000000 4.0000000000 0.23039216 0.02941176 0.35294118 0.02941176 0.07843137 0.00 0.35294118 0.00 0.69117647
49 3.5000000000 4.0000000000 1.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 1.00
50 4.0000000000 4.5000000000 0.96 0.92 0.18 0.92 2.89 0.21 0.18 0.21 0.49
51 4.0000000000 4.5000000000 1.00 0.55233592 0.26244533 0.55233592 1.00 0.17647059 0.26244533 0.17647059 1.00
52 4.0000000000 4.5000000000 1.18724478 0.490413981 0.0959505616 0.490413981 2.21604802 0.111942322 0.0959505616 0.111942322 0.936707201
53 4.0000000000 4.5000000000 1.22291898 0.42297509 0.08275599 0.42297509 2.11024714 0.09654866 0.08275599 0.09654866 1.00683388
54 4.0000000000 4.5000000000 0.22307692 0.02692308 0.35384615 0.02692308 0.11153846 -0.00769231 0.35384615 -0.00769231 0.66538462
55 4.0000000000 4.5000000000 1.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 1.00
56 4.5000000000 5.0000000000 1.61 0.15 0.20 0.15 3.85 -0.40 0.20 -0.40 0.60
57 4.5000000000 5.0000000000 1.00 0.06024874 0.20348923 0.06024874 1.00 -0.26318068 0.20348923 -0.26318068 1.00
58 4.5000000000 5.0000000000 1.86743369 0.055816941 0.074422588 0.055816941 2.70096668 -0.148845176 0.074422588 -0.148845176 1.49159963
59 4.5000000000 5.0000000000 1.95254699 0.02467793 0.03290391 0.02467793 2.32107076 -0.06580782 0.03290391 -0.06580782 1.78638225
60 4.5000000000 5.0000000000 0.16544118 0.09926471 0.25735294 0.09926471 0.22426471 0.20588235 0.25735294 0.20588235 0.61029412
61 4.5000000000 5.0000000000 1.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 1.00
62 5.0000000000 5.5000000000 2.01 0.69 -0.34 0.69 2.81 0.44 -0.34 0.44 0.56
63 5.0000000000 5.5000000000 1.00 0.290334 -0.32046963 0.290334 1.00 0.35075632 -0.32046963 0.35075632 1.00
64 5.0000000000 5.5000000000 1.89536719 0.324938579 -0.160114662 0.324938579 2.27210757 0.20720721 -0.160114662 0.20720721 1.21252525
65 5.0000000000 5.5000000000 1.80811047 0.04705949 -0.02318873 0.04705949 1.86267219 0.03000895 -0.02318873 0.03000895 1.70921734
66 5.0000000000 5.5000000000 0.18846154 0.04615385 0.26153846 0.04615385 0.11153846 0.06538462 0.26153846 0.06538462 0.70
67 5.0000000000 5.5000000000 1.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 1.00
68 5.5000000000 6.0000000000 1.56 0.70 0.00 0.70 2.45 -0.30 0.00 -0.30 0.80
69 5.5000000000 6.0000000000 1.00 0.35805744 0.00 0.35805744 1.00 -0.21428571 0.00 -0.21428571 1.00
70 5.5000000000 6.0000000000 1.60313579 0.00319114656 0.00 0.00319114656 1.6071931 -0.00136763424 0.00 -0.00136763424 1.59967111
71 5.5000000000 6.0000000000 1.60333333 0.00 0.00 0.00 1.60333333 -0.00 0.00 -0.00 1.60333333
72 5.5000000000 6.0000000000 0.13333333 0.05777778 0.21333333 0.05777778 0.12 0.07555556 0.21333333 0.07555556 0.74666667
73 5.5000000000 6.0000000000 1.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 1.00
@@ -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,,,
1 Time:3x3 End Time 1: 1: 1: 2: 2: 2: 3: 3: 3: Event Id Event Date Event Duration
2 0.0000000 0.500000 2.5849288 1.33543611 0.511092833 1.33543611 2.19748746 0.527579698 0.511092833 0.527579698 0.507583739
3 0.5000000 1.000000 1.99839975 -0.650968006 -0.150223386 -0.650968006 1.52895167 0.0688523853 -0.150223386 0.0688523853 0.652648582
4 1.0000000 1.500000 1.21758058 -0.00 0.013088361 -0.00 1.00554914 0.0104706888 0.013088361 0.0104706888 0.756870279
5 1.5000000 2.000000 2.57527815 -0.621023059 -0.153239456 -0.621023059 0.897709368 0.0564566417 -0.153239456 0.0564566417 0.317012482
6 2.0000000 2.500000 2.87232755 -0.786745664 -0.0991696216 -0.786745664 1.81451826 -0.0991696216 -0.0991696216 -0.0991696216 0.783154191
7 2.5000000 3.000000 1.64826027 -0.00963569008 0.0289070702 -0.00963569008 1.5880372 0.0770855206 0.0289070702 0.0770855206 1.17370253
8 3.0000000 3.500000 1.9742694 -0.149321794 0.108597668 -0.149321794 2.11906629 -0.081448251 0.108597668 -0.081448251 1.04666432
9 3.5000000 4.000000 1.06313148 0.315509839 0.0893944544 0.315509839 1.33131485 0.00 0.0893944544 0.00 0.705553667
10 4.0000000 4.500000 1.18724478 0.490413981 0.0959505616 0.490413981 2.21604802 0.111942322 0.0959505616 0.111942322 0.936707201
11 4.5000000 5.000000 1.86743369 0.055816941 0.074422588 0.055816941 2.70096668 -0.148845176 0.074422588 -0.148845176 1.49159963
12 5.0000000 5.500000 1.89536719 0.324938579 -0.160114662 0.324938579 2.27210757 0.20720721 -0.160114662 0.20720721 1.21252525
13 5.5000000 6.000000 1.60313579 0.00319114656 0.00 0.00319114656 1.6071931 -0.00136763424 0.00 -0.00136763424 1.59967111
@@ -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,,,
1 Time:3x3 End Time 1: 1: 1: 2: 2: 2: 3: 3: 3: Event Id Event Date Event Duration
2 6.5000000000 6.5625000000 1.70952664 0.01674082 0.02077766 0.01674082 1.60344581 0.05423902 0.02077766 0.05423902 0.8303257
3 6.5000000000 6.5625000000 1.87394645 0.02563437 0.0298922 0.02563437 1.7732458 0.06073032 0.0298922 0.06073032 0.93197441
4 6.5000000000 6.5625000000 1.7137077 0.01869396 0.02040996 0.01869396 1.60430933 0.0512624 0.02040996 0.0512624 0.82767414
5 6.5000000000 6.5625000000 1.70798275 0.01610538 0.02003787 0.01610538 1.60581809 0.05385499 0.02003787 0.05385499 0.83577899
6 6.5000000000 6.5625000000 1.56594664 0.01175612 0.01576697 0.01175612 1.44152542 0.04955601 0.01576697 0.04955601 0.72075273
7 6.5000000000 6.5625000000 1.71301511 0.01811099 0.02219169 0.01811099 1.59879804 0.0548546 0.02219169 0.0548546 0.81958134
8 6.5000000000 6.5625000000 1.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 1.00
@@ -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,,,
1 Time:3x3 End Time 1: 1: 1: 2: 2: 2: 3: 3: 3: Event Id Event Date Event Duration
2 0.0000000 0.500000 2.5849288 1.33543611 0.511092833 1.33543611 2.19748746 0.527579698 0.511092833 0.527579698 0.507583739
3 0.5000000 1.000000 1.99839975 -0.650968006 -0.150223386 -0.650968006 1.52895167 0.0688523853 -0.150223386 0.0688523853 0.652648582
4 1.0000000 1.500000 1.21758058 -0.00 0.013088361 -0.00 1.00554914 0.0104706888 0.013088361 0.0104706888 0.756870279
5 1.5000000 2.000000 2.57527815 -0.621023059 -0.153239456 -0.621023059 0.897709368 0.0564566417 -0.153239456 0.0564566417 0.317012482
6 2.0000000 2.500000 2.87232755 -0.786745664 -0.0991696216 -0.786745664 1.81451826 -0.0991696216 -0.0991696216 -0.0991696216 0.783154191
7 2.5000000 3.000000 1.64826027 -0.00963569008 0.0289070702 -0.00963569008 1.5880372 0.0770855206 0.0289070702 0.0770855206 1.17370253
8 3.0000000 3.500000 1.9742694 -0.149321794 0.108597668 -0.149321794 2.11906629 -0.081448251 0.108597668 -0.081448251 1.04666432
9 3.5000000 4.000000 1.06313148 0.315509839 0.0893944544 0.315509839 1.33131485 0.00 0.0893944544 0.00 0.705553667
10 4.0000000 4.500000 1.18724478 0.490413981 0.0959505616 0.490413981 2.21604802 0.111942322 0.0959505616 0.111942322 0.936707201
11 4.5000000 5.000000 1.86743369 0.055816941 0.074422588 0.055816941 2.70096668 -0.148845176 0.074422588 -0.148845176 1.49159963
12 5.0000000 5.500000 1.89536719 0.324938579 -0.160114662 0.324938579 2.27210757 0.20720721 -0.160114662 0.20720721 1.21252525
13 5.5000000 6.000000 1.60313579 0.00319114656 0.00 0.00319114656 1.6071931 -0.00136763424 0.00 -0.00136763424 1.59967111
@@ -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,,,
1 Time:6 End Time Event Id Event Date Event Duration
2 0.0000000000 0.5000000000 0.19923529 0.81954961 0.45583261 0.06265258 0.53984445 -0.74189243
3 0.0000000000 0.5000000000 2.58492880 1.33543611 0.511092833 2.19748746 0.527579698 0.507583739
4 0.5000000000 1.0000000000 0.08020799 -0.56380364 -0.19863986 -0.12711376 -0.00487228 -0.24993702
5 0.5000000000 1.0000000000 1.99839975 -0.650968006 -0.150223386 1.52895167 0.0688523853 0.652648582
6 1.0000000000 1.5000000000 -0.33927073 -0.0139971 -0.00466568 -0.46577928 -0.04826772 -0.09127522
7 1.0000000000 1.5000000000 1.21758058 -0.000000000 0.0130883610 1.00554914 0.0104706888 0.756870279
8 1.5000000000 2.0000000000 0.34039208 -0.59873603 -0.23557737 -0.70072935 0.02089894 -0.98360691
9 1.5000000000 2.0000000000 2.57527815 -0.621023059 -0.153239456 0.897709368 0.0564566417 0.317012482
10 2.0000000000 2.5000000000 0.4605308 -0.52546299 -0.14067914 0.04677775 -0.21048792 -0.06431401
11 2.0000000000 2.5000000000 2.87232755 -0.786745664 -0.0991696216 1.81451826 -0.0991696216 0.783154191
12 2.5000000000 3.0000000000 -0.0365709 -0.02310847 0.00568693 -0.0103298 0.01443795 0.34577556
13 2.5000000000 3.0000000000 1.64826027 -0.00963569008 0.0289070702 1.58803720 0.0770855206 1.17370253
14 3.0000000000 3.5000000000 0.13870707 -0.11420977 0.08057211 0.27541021 -0.14045981 0.22931806
15 3.0000000000 3.5000000000 1.97426940 -0.149321794 0.108597668 2.11906629 -0.0814482510 1.04666432
16 3.5000000000 4.0000000000 -0.52065199 0.37104578 0.12469995 -0.21855289 -0.08508472 -0.16646769
17 3.5000000000 4.0000000000 1.06313148 0.315509839 0.0893944544 1.33131485 0.00000000 0.705553667
18 4.0000000000 4.5000000000 -0.42665126 0.41541091 0.08741089 0.28616558 0.02832375 0.11565408
19 4.0000000000 4.5000000000 1.18724478 0.490413981 0.0959505616 2.21604802 0.111942322 0.936707201
20 4.5000000000 5.0000000000 0.08700644 0.0237524 0.04023502 0.51858937 -0.17189999 0.58429274
21 4.5000000000 5.0000000000 1.86743369 0.0558169410 0.0744225880 2.70096668 -0.148845176 1.49159963
22 5.0000000000 5.5000000000 0.08116035 0.22060811 -0.19108877 0.32966629 0.12395396 0.36518821
23 5.0000000000 5.5000000000 1.89536719 0.324938579 -0.160114662 2.27210757 0.207207210 1.21252525
24 5.5000000000 6.0000000000 -0.06409514 -0.01104878 -0.02378668 0.00324331 -0.06638659 0.65726463
25 5.5000000000 6.0000000000 1.60313579 0.00319114656 0.00000000 1.60719310 -0.00136763424 1.59967111
@@ -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>
@@ -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,,,
1 Time:6 End Time A B C D E F Event Id Event Date Event Duration
2 0.0000000000 0.5000000000 0.1992352855 0.8195496110 0.4558326038 0.0626525810 0.5398444507 -0.7418924315
3 0.5000000000 1.0000000000 0.0802079905 -0.5638036394 -0.1986398629 -0.1271137599 -0.0048722803 -0.2499370264
4 1.0000000000 1.5000000000 -0.3392707289 -0.0139971004 -0.0046656834 -0.4657792818 -0.0482677110 -0.0912752215
5 1.5000000000 2.0000000000 0.3403920796 -0.5987360282 -0.2355773730 -0.7007293522 0.0208989408 -0.9836069163
6 2.0000000000 2.5000000000 0.4605307984 -0.5254629883 -0.1406791473 0.0467777487 -0.2104879168 -0.0643140147
7 2.5000000000 3.0000000000 -0.0365708962 -0.0231084678 0.0056869283 -0.0103298061 0.0144379583 0.3457755534
8 3.0000000000 3.5000000000 0.1387070746 -0.1142097638 0.0805721020 0.2754102081 -0.1404598090 0.2293180575
9 3.5000000000 4.0000000000 -0.5206519983 0.3710457814 0.1246999460 -0.2185528906 -0.0850847159 -0.1664676937
10 4.0000000000 4.5000000000 -0.4266512586 0.4154109093 0.0874108853 0.2861655803 0.0283237504 0.1156540704
11 4.5000000000 5.0000000000 0.0870064331 0.0237524010 0.0402350114 0.5185893700 -0.1718999872 0.5842927372
12 5.0000000000 5.5000000000 0.0811603490 0.2206081191 -0.1910887744 0.3296662887 0.1239539595 0.3651882077
13 5.5000000000 6.0000000000 -0.0640951351 -0.0110487786 -0.0237866849 0.0032433083 -0.0663865876 0.6572646278
@@ -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,,,
1 Time:6 End Time A B C D E F Event Id Event Date Event Duration
2 0.0000000000 0.5000000000 2.5849288000 1.3354361100 0.5110928330 2.1974874600 0.5275796980 0.5075837390
3 0.5000000000 1.0000000000 1.9983997500 -0.6509680060 -0.1502233860 1.5289516700 0.0688523853 0.6526485820
4 1.0000000000 1.5000000000 1.2175805800 -0.0000000000 0.0130883610 1.0055491400 0.0104706888 0.7568702790
5 1.5000000000 2.0000000000 2.5752781500 -0.6210230590 -0.1532394560 0.8977093680 0.0564566417 0.3170124820
6 2.0000000000 2.5000000000 2.8723275500 -0.7867456640 -0.0991696216 1.8145182600 -0.0991696216 0.7831541910
7 2.5000000000 3.0000000000 1.6482602700 -0.0096356901 0.0289070702 1.5880372000 0.0770855206 1.1737025300
8 3.0000000000 3.5000000000 1.9742694000 -0.1493217940 0.1085976680 2.1190662900 -0.0814482510 1.0466643200
9 3.5000000000 4.0000000000 1.0631314800 0.3155098390 0.0893944544 1.3313148500 0.0000000000 0.7055536670
10 4.0000000000 4.5000000000 1.1872447800 0.4904139810 0.0959505616 2.2160480200 0.1119423220 0.9367072010
11 4.5000000000 5.0000000000 1.8674336900 0.0558169410 0.0744225880 2.7009666800 -0.1488451760 1.4915996300
12 5.0000000000 5.5000000000 1.8953671900 0.3249385790 -0.1601146620 2.2721075700 0.2072072100 1.2125252500
13 5.5000000000 6.0000000000 1.6031357900 0.0031911466 0.0000000000 1.6071931000 -0.0013676342 1.5996711100
@@ -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,,,
1 Time:3x3 End Time 1: 1: 1: 2: 2: 2: 3: 3: 3: Event Id Event Date Event Duration
2 0.00 0.50 2.5849287999 1.3354361099 0.511092833 1.3354361099 2.19748746 0.527579698 0.511092833 0.527579698 0.507583739
3 0.00 0.50 2.5849288 1.33543611 0.511092833 1.33543611 2.19748746 0.527579698 0.511092833 0.527579698 0.507583739
4 0.50 1.00 1.9983997499 -0.650968006 -0.150223386 -0.650968006 1.52895167 0.0688523853 -0.150223386 0.0688523853 0.652648582
5 0.50 1.00 1.99839975 -0.650968006 -0.150223386 -0.650968006 1.52895167 0.0688523853 -0.150223386 0.0688523853 0.652648582
6 1.00 1.50 1.21758058 0.00 0.013088361 0.00 1.00554914 0.0104706888 0.013088361 0.0104706888 0.756870279
7 1.00 1.50 1.21758058 -0.00 0.013088361 -0.00 1.00554914 0.0104706888 0.013088361 0.0104706888 0.756870279
8 1.50 2.00 2.5752781499 -0.621023059 -0.153239456 -0.621023059 0.897709368 0.0564566417 -0.153239456 0.0564566417 0.317012482
9 1.50 2.00 2.57527815 -0.621023059 -0.153239456 -0.621023059 0.897709368 0.0564566417 -0.153239456 0.0564566417 0.317012482
10 2.00 2.50 2.8723275501 -0.786745664 -0.0991696216 -0.786745664 1.81451826 -0.0991696216 -0.0991696216 -0.0991696216 0.783154191
11 2.00 2.50 2.87232755 -0.786745664 -0.0991696216 -0.786745664 1.81451826 -0.0991696216 -0.0991696216 -0.0991696216 0.783154191
12 2.50 3.00 1.64826027 -0.0096356901 0.0289070702 -0.0096356901 1.5880372 0.0770855206 0.0289070702 0.0770855206 1.17370253
13 2.50 3.00 1.64826027 -0.0096356901 0.0289070702 -0.0096356901 1.5880372 0.0770855206 0.0289070702 0.0770855206 1.17370253
14 3.00 3.50 1.9742693999 -0.149321794 0.108597668 -0.149321794 2.1190662901 -0.081448251 0.108597668 -0.081448251 1.04666432
15 3.00 3.50 1.9742694 -0.149321794 0.108597668 -0.149321794 2.11906629 -0.081448251 0.108597668 -0.081448251 1.04666432
16 3.50 4.00 1.06313148 0.315509839 0.0893944544 0.315509839 1.3313148501 0.00 0.0893944544 0.00 0.705553667
17 3.50 4.00 1.06313148 0.315509839 0.0893944544 0.315509839 1.33131485 0.00 0.0893944544 0.00 0.705553667
18 4.00 4.50 1.18724478 0.490413981 0.0959505616 0.490413981 2.2160480201 0.111942322 0.0959505616 0.111942322 0.936707201
19 4.00 4.50 1.18724478 0.490413981 0.0959505616 0.490413981 2.21604802 0.111942322 0.0959505616 0.111942322 0.936707201
20 4.50 5.00 1.8674336899 0.0558169411 0.074422588 0.0558169411 2.70096668 -0.148845176 0.074422588 -0.148845176 1.49159963
21 4.50 5.00 1.86743369 0.055816941 0.074422588 0.055816941 2.70096668 -0.148845176 0.074422588 -0.148845176 1.49159963
22 5.00 5.50 1.89536719 0.324938579 -0.160114662 0.324938579 2.27210757 0.20720721 -0.160114662 0.20720721 1.21252525
23 5.00 5.50 1.89536719 0.324938579 -0.160114662 0.324938579 2.27210757 0.20720721 -0.160114662 0.20720721 1.21252525
24 5.50 6.00 1.60313579 0.0031911465 -0.00 0.0031911465 1.6071931001 -0.0013676342 -0.00 -0.0013676342 1.5996711099
25 5.50 6.00 1.60313579 0.0031911466 0.00 0.0031911466 1.6071931 -0.0013676342 0.00 -0.0013676342 1.59967111
@@ -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>
@@ -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>
@@ -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
1 Time:3x3 End Time 1: 1: 1: 2: 2: 2: 3: 3: 3: Event Id Event Date Event Duration
2 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
3 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
4 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
5 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
6 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
7 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
8 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
9 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
10 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
11 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
12 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
13 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
@@ -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,,,
1 Time:3x3 End Time 1: 1: 1: 2: 2: 2: 3: 3: 3: Event Id Event Date Event Duration
2 0.0 0.1 2.3375879681 1.1235817880 0.4375016641 1.1235817880 2.0088885697 0.4587268555 0.4375016641 0.4587268555 0.5205728814
3 0.0 0.1 1.0 0.0 0.0 0.0 1.0 0.0 -0.0 0.0 1.0
4 0.0 0.1 2.5849288 1.33543611 0.511092833 1.33543611 2.19748746 0.527579698 0.511092833 0.527579698 0.507583739
5 0.0 0.1 2.5849288 1.33543611 0.511092833 1.33543611 2.19748746 0.527579698 0.511092833 0.527579698 0.507583739
6 0.5 0.6 1.7964057845 -0.6185516321 -0.1598617505 -0.6185516321 1.4288680906 0.0365060386 -0.1598617505 0.0365060386 0.7333089338
7 0.5 0.6 1.0756566596 -0.4579140103 -0.2114127465 -0.4579140103 1.0309058513 -0.1528116787 -0.2114127465 -0.1528116787 1.3308125300
8 0.5 0.6 1.99839975 -0.650968006 -0.150223386 -0.650968006 1.52895167 0.0688523853 -0.150223386 0.0688523853 0.652648582
9 0.5 0.6 1.99839975 -0.650968006 -0.150223386 -0.650968006 1.52895167 0.0688523853 -0.150223386 0.0688523853 0.652648582
10 1.0 1.1 1.0798106882 -0.0163890739 -0.0021344530 -0.0163890739 0.9391381373 -0.0206524620 -0.0021344530 -0.0206524620 0.8605585282
11 1.0 1.1 0.7322555263 -0.0460573370 -0.0554090439 -0.0460573370 0.7563379136 -0.1454584788 -0.0554090439 -0.1454584788 1.3255563093
12 1.0 1.1 1.21758058 0.00 0.013088361 0.00 1.00554914 0.0104706888 0.013088361 0.0104706888 0.756870279
13 1.0 1.1 1.21758058 0.00 0.013088361 0.00 1.00554914 0.0104706888 0.013088361 0.0104706888 0.756870279
14 1.5 1.6 2.1564136972 -0.5311254505 -0.1508860995 -0.5311254505 0.8463175378 0.0380832525 -0.1508860995 0.0380832525 0.3871796076
15 1.5 1.6 1.3946913771 -0.3529635241 -0.1507735488 -0.3529635241 0.7325030580 -0.0239166525 -0.1507735488 -0.0239166525 0.6404540983
16 1.5 1.6 2.57527815 -0.621023059 -0.153239456 -0.621023059 0.897709368 0.0564566417 -0.153239456 0.0564566417 0.317012482
17 1.5 1.6 2.57527815 -0.621023059 -0.153239456 -0.621023059 0.897709368 0.0564566417 -0.153239456 0.0564566417 0.317012482
18 2.0 2.1 2.2610472501 -0.5987174986 -0.0891846320 -0.5987174986 1.6552464264 -0.1444777516 -0.0891846320 -0.1444777516 0.9661034629
19 2.0 2.1 1.4130481322 -0.3274355106 -0.0818128545 -0.3274355106 1.3898388594 -0.2556481100 -0.0818128545 -0.2556481100 1.4656994550
20 2.0 2.1 2.87232755 -0.786745664 -0.0991696216 -0.786745664 1.81451826 -0.0991696216 -0.0991696216 -0.0991696216 0.783154191
21 2.0 2.1 2.87232755 -0.786745664 -0.0991696216 -0.786745664 1.81451826 -0.0991696216 -0.0991696216 -0.0991696216 0.783154191
22 2.5 2.6 1.2893592097 0.0400449898 0.0283946377 0.0400449898 1.4319869075 0.0393787337 0.0283946377 0.0393787337 1.4082015200
23 2.5 2.6 0.8648032496 0.0934128905 0.0219582593 0.0934128905 1.2089596505 -0.0398926396 0.0219582593 -0.0398926396 1.9022433520
24 2.5 2.6 1.64826027 -0.0096356901 0.0289070702 -0.0096356901 1.5880372 0.0770855206 0.0289070702 0.0770855206 1.17370253
25 2.5 2.6 1.64826027 -0.0096356901 0.0289070702 -0.0096356901 1.5880372 0.0770855206 0.0289070702 0.0770855206 1.17370253
26 3.0 3.1 1.5015552066 -0.0594514456 0.0962030617 -0.0594514456 1.8398138927 -0.1185607586 0.0962030617 -0.1185607586 1.2430573748
27 3.0 3.1 1.0238594322 0.0250386782 0.0760701334 0.0250386782 1.5082341167 -0.1801058831 0.0760701334 -0.1801058831 1.5841130590
28 3.0 3.1 1.9742694 -0.149321794 0.108597668 -0.149321794 2.11906629 -0.081448251 0.108597668 -0.081448251 1.04666432
29 3.0 3.1 1.9742694 -0.149321794 0.108597668 -0.149321794 2.11906629 -0.081448251 0.108597668 -0.081448251 1.04666432
30 4.0 4.1 0.8268185049 0.2773250134 0.0741722716 0.2773250134 1.1553614354 -0.0231391038 0.0741722716 -0.0231391038 0.8444734431
31 4.0 4.1 0.6080801523 0.2368114440 0.0555705814 0.2368114440 0.9682812380 -0.0572978769 0.0555705814 -0.0572978769 1.0543411216
32 4.0 4.1 1.06313148 0.315509839 0.0893944544 0.315509839 1.33131485 0.00 0.0893944544 0.00 0.705553667
33 4.0 4.1 1.06313148 0.315509839 0.0893944544 0.315509839 1.33131485 0.00 0.0893944544 0.00 0.705553667
34 4.5 4.6 0.9256627617 0.3992555385 0.0732879412 0.3992555385 1.8522373972 0.0716092283 0.0732879412 0.0716092283 1.1118708257
35 4.5 4.6 0.7060500528 0.3205518345 0.0496783655 0.3205518345 1.5171967044 0.0229145690 0.0496783655 0.0229145690 1.3424845135
36 4.5 4.6 1.18724478 0.490413981 0.0959505616 0.490413981 2.21604802 0.111942322 0.0959505616 0.111942322 0.936707201
37 4.5 4.6 1.18724478 0.490413981 0.0959505616 0.490413981 2.21604802 0.111942322 0.0959505616 0.111942322 0.936707201
38 5.0 5.1 1.4277768407 0.0479887577 0.0452254506 0.0479887577 2.1715066321 -0.1823592263 0.0452254506 -0.1823592263 1.7289574830
39 5.0 5.1 1.0965454040 0.0439480881 0.0187759211 0.0439480881 1.7463814966 -0.2199295367 0.0187759211 -0.2199295367 1.9990169538
40 5.0 5.1 1.86743369 0.055816941 0.074422588 0.055816941 2.70096668 -0.148845176 0.074422588 -0.148845176 1.49159963
41 5.0 5.1 1.86743369 0.055816941 0.074422588 0.055816941 2.70096668 -0.148845176 0.074422588 -0.148845176 1.49159963
42 5.5 5.6 1.4256920075 0.2406250166 -0.1648767943 0.2406250166 1.7689402685 0.1547873069 -0.1648767943 0.1547873069 1.3788046529
43 5.5 5.6 1.1055625378 0.1857719531 -0.1677345802 0.1857719531 1.4080506402 0.1070954089 -0.1677345802 0.1070954089 1.5456980053
44 5.5 5.6 1.89536719 0.324938579 -0.160114662 0.324938579 2.27210757 0.20720721 -0.160114662 0.20720721 1.21252525
45 5.5 5.6 1.89536719 0.324938579 -0.160114662 0.324938579 2.27210757 0.20720721 -0.160114662 0.20720721 1.21252525
46 6.0 6.1 1.1958492811 -0.0044659670 -0.0125273785 -0.0044659670 1.2426448650 -0.0366720387 -0.0125273785 -0.0366720387 1.7747573440
47 6.0 6.1 0.9402403823 -0.0065491760 -0.0216643844 -0.0065491760 1.0030116239 -0.0673486990 -0.0216643844 -0.0673486990 1.9303209142
48 6.0 6.1 1.60313579 0.0031911466 0.00 0.0031911466 1.6071931 -0.0013676342 0.00 -0.0013676342 1.59967111
49 6.0 6.1 1.60313579 0.0031911466 0.00 0.0031911466 1.6071931 -0.0013676342 0.00 -0.0013676342 1.59967111
@@ -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>
@@ -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>
@@ -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>
@@ -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>
@@ -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>
@@ -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,,,
1 Time:2 End Time Event Id Event Date Event Duration
2 0.0 0.1 1.3146344607 1.4748541725
3 0.0 0.1 0.5287184737 0.4712815263
4 0.0 0.1 1.3146344607 1.4748541725
5 0.0 0.1 0.5287184737 0.4712815263
6 0.0 0.1 0.0266535092 0.7187078375
7 0.0 0.1 0.9642408218 0.0357591782
8 0.0 0.1 0.0266535092 0.7187078375
9 0.0 0.1 0.9642408218 0.0357591782
10 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
11 0.5 0.6 0.6347963992 0.3652036008
12 0.5 0.6 1.8559620293 1.8412868439
13 0.5 0.6 0.4980153912 0.5019846088
14 0.5 0.6 0.0930348094 0.7884208263
15 0.5 0.6 0.8944532140 0.1055467860
16 0.5 0.6 0.2438422258 0.4515437911
17 0.5 0.6 0.6493426386 0.3506573614
18 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
19 1.0 1.1 0.5623918813 0.4376081187
20 1.0 1.1 0.9585763775 0.8417488820
21 1.0 1.1 0.4675537809 0.5324462191
22 1.0 1.1 0.2853965111 0.4203267068
23 1.0 1.1 0.5955971068 0.4044028932
24 1.0 1.1 0.5896943472 0.0785980891
25 1.0 1.1 0.1176103227 0.8823896773
26 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
27 1.5 1.6 0.6239125734 0.3760874266
28 1.5 1.6 0.9232558534 1.5992808599
29 1.5 1.6 0.6339970600 0.3660029400
30 1.5 1.6 0.8833524332 1.5605360001
31 1.5 1.6 0.6385463341 0.3614536659
32 1.5 1.6 0.7085752971 1.3178982986
33 1.5 1.6 0.6503407207 0.3496592793
34 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
35 2.0 2.1 0.5983620741 0.4016379259
36 2.0 2.1 0.9722919048 0.9418856609
37 2.0 2.1 0.4920576219 0.5079423781
38 2.0 2.1 0.0745574219 0.8320457554
39 2.0 2.1 0.9177617907 0.0822382093
40 2.0 2.1 0.3096578586 0.3640810790
41 2.0 2.1 0.5403889529 0.4596110471
42 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
43 2.5 2.6 0.3194105331 0.6805894669
44 2.5 2.6 1.0814347909 0.4657549948
45 2.5 2.6 0.3010328785 0.6989671215
46 2.5 2.6 0.5202855039 0.2434159481
47 2.5 2.6 0.3187318126 0.6812681874
48 2.5 2.6 0.8603890212 0.2124549051
49 2.5 2.6 0.1980296480 0.8019703520
50 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
51 3.0 3.1 0.4105761275 0.5894238725
52 3.0 3.1 0.8864877839 0.4773963713
53 3.0 3.1 0.3500270675 0.6499729325
54 3.0 3.1 0.4427522664 0.2809272237
55 3.0 3.1 0.3881928776 0.6118071224
56 3.0 3.1 0.6555921150 0.0738417697
57 3.0 3.1 0.1012316144 0.8987683856
58 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
59 4.0 4.1 0.4692759412 0.5307240588
60 4.0 4.1 1.0196264961 0.6934266642
61 4.0 4.1 0.4047899273 0.5952100727
62 4.0 4.1 0.5949672922 0.0970870361
63 4.0 4.1 0.1402881712 0.8597118288
64 4.0 4.1 0.7252648118 0.1903424748
65 4.0 4.1 0.2078865880 0.7921134120
66 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
67 4.5 4.6 0.2709330858 0.7290669142
68 4.5 4.6 1.0658708278 0.4466031818
69 4.5 4.6 0.2952799050 0.7047200950
70 4.5 4.6 0.8758921425 0.2000189869
71 4.5 4.6 0.1859066064 0.8140933936
72 4.5 4.6 0.9303070670 0.3636609841
73 4.5 4.6 0.2810432482 0.7189567518
74 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
75 5.0 5.1 0.3914847518 0.6085152482
76 5.0 5.1 1.0690569132 0.8035065888
77 5.0 5.1 0.4290944408 0.5709055592
78 5.0 5.1 0.7632985592 0.0588512626
79 5.0 5.1 0.0715821631 0.9284178369
80 5.0 5.1 0.7283205622 0.1097229102
81 5.0 5.1 0.1309274683 0.8690725317
82 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
83 5.5 5.6 0.3434525859 0.6565474141
84 5.5 5.6 0.8137461529 0.4779701966
85 5.5 5.6 0.3700272097 0.6299727903
86 5.5 5.6 0.5942285596 0.1175751448
87 5.5 5.6 0.1651791695 0.8348208305
88 5.5 5.6 0.5004183664 0.1318946493
89 5.5 5.6 0.2085907549 0.7914092451
90 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
91 6.0 6.1 0.3567265241 0.6432734759
92 6.0 6.1 0.7684991863 0.5332461095
93 6.0 6.1 0.4096393597 0.5903606403
94 6.0 6.1 0.6318850879 0.0668547115
95 6.0 6.1 0.0956789803 0.9043210197
96 6.0 6.1 0.5036063251 0.1140517296
97 6.0 6.1 0.1846518939 0.8153481061
@@ -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,,,
1 Time:2 End Time Event Id Event Date Event Duration
2 0.0 0.1 1.3146344607 1.4748541725
3 0.0 0.1 0.5287184737 0.4712815263
4 0.0 0.1 1.3146344607 1.4748541725
5 0.0 0.1 0.5287184737 0.4712815263
6 0.0 0.1 0.0266535092 0.7187078375
7 0.0 0.1 0.9642408218 0.0357591782
8 0.0 0.1 0.0266535092 0.7187078375
9 0.0 0.1 0.9642408218 0.0357591782
10 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
11 0.5 0.6 0.6347963992 0.3652036008
12 0.5 0.6 1.8559620293 1.8412868439
13 0.5 0.6 0.4980153912 0.5019846088
14 0.5 0.6 0.0930348094 0.7884208263
15 0.5 0.6 0.8944532140 0.1055467860
16 0.5 0.6 0.2438422258 0.4515437911
17 0.5 0.6 0.6493426386 0.3506573614
18 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
19 1.0 1.1 0.5623918813 0.4376081187
20 1.0 1.1 1.0777024519 0.6775878148
21 1.0 1.1 0.3860260765 0.6139739235
22 1.0 1.1 0.2853965111 0.4203267068
23 1.0 1.1 0.5955971068 0.4044028932
24 1.0 1.1 0.5896943472 0.0785980891
25 1.0 1.1 0.1176103227 0.8823896773
26 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
27 1.5 1.6 0.6239125734 0.3760874266
28 1.5 1.6 0.9909040183 1.4164015407
29 1.5 1.6 0.5883763012 0.4116236988
30 1.5 1.6 0.8833524332 1.5605360001
31 1.5 1.6 0.6385463341 0.3614536659
32 1.5 1.6 0.6496058623 1.3047986171
33 1.5 1.6 0.6676195388 0.3323804612
34 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
35 2.0 2.1 0.5983620741 0.4016379259
36 2.0 2.1 1.1020382378 0.7977816861
37 2.0 2.1 0.4199248971 0.5800751029
38 2.0 2.1 0.0745574219 0.8320457554
39 2.0 2.1 0.9177617907 0.0822382093
40 2.0 2.1 0.3691719435 0.3509813975
41 2.0 2.1 0.4873703662 0.5126296338
42 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
43 2.5 2.6 0.3194105331 0.6805894669
44 2.5 2.6 1.2333291135 0.5446448151
45 2.5 2.6 0.3063289097 0.6936710903
46 2.5 2.6 0.5202855039 0.2434159481
47 2.5 2.6 0.3187318126 0.6812681874
48 2.5 2.6 0.9457079276 0.2756947863
49 2.5 2.6 0.2257198082 0.7742801918
50 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
51 3.0 3.1 0.3809116149 0.6190883851
52 3.0 3.1 1.1038872155 0.4869987955
53 3.0 3.1 0.3061179696 0.6938820304
54 3.0 3.1 0.4827742283 0.2403578990
55 3.0 3.1 0.3323844840 0.6676155160
56 3.0 3.1 0.8070947922 0.1026198026
57 3.0 3.1 0.1128043929 0.8871956071
58 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
59 4.0 4.1 0.4743246321 0.5256753679
60 4.0 4.1 1.0942141267 0.9215909190
61 4.0 4.1 0.4571825638 0.5428174362
62 4.0 4.1 0.6666144159 0.0221808687
63 4.0 4.1 0.0322024108 0.9677975892
64 4.0 4.1 0.9235954973 0.2077183073
65 4.0 4.1 0.1836080374 0.8163919626
66 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
67 4.5 4.6 0.3016284726 0.6983715274
68 4.5 4.6 1.2237688054 0.7143237987
69 4.5 4.6 0.3685705199 0.6314294801
70 4.5 4.6 0.9475392662 0.2615165902
71 4.5 4.6 0.2162981874 0.7837018126
72 4.5 4.6 1.1286377524 0.3919887318
73 4.5 4.6 0.2577810763 0.7422189237
74 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
75 5.0 5.1 0.3488289202 0.6511710798
76 5.0 5.1 1.3575893945 0.6790904993
77 5.0 5.1 0.3334301582 0.6665698418
78 5.0 5.1 0.8349456829 0.1198656080
79 5.0 5.1 0.1255385322 0.8744614678
80 5.0 5.1 0.9266512477 0.1543668878
81 5.0 5.1 0.1427976855 0.8572023145
82 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
83 5.5 5.6 0.3096334375 0.6903665625
84 5.5 5.6 1.0286598949 0.5058249291
85 5.5 5.6 0.3296382742 0.6703617258
86 5.5 5.6 0.6658756833 0.0611909524
87 5.5 5.6 0.0841614088 0.9158385912
88 5.5 5.6 0.6987490519 0.0863992153
89 5.5 5.6 0.1100419104 0.8899580896
90 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
91 6.0 6.1 0.3178111541 0.6821888459
92 6.0 6.1 1.0851903380 0.3673923326
93 6.0 6.1 0.2529235272 0.7470764728
94 6.0 6.1 0.7035322116 0.0179716102
95 6.0 6.1 0.0249085448 0.9750914552
96 6.0 6.1 0.7019370106 0.0765651631
97 6.0 6.1 0.0983493248 0.9016506752
@@ -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
1 Time:3x3 End Time 1: 1: 1: 2: 2: 2: 3: 3: 3: Event Id Event Date Event Duration
2 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
3 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
4 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
5 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
6 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
7 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
8 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
9 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
10 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
11 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
12 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
13 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
@@ -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,,,
1 Time:2 End Time Event Id Event Date Event Duration
2 0.0 0.1 1.3146344607 1.4748541725
3 0.0 0.1 0.5287184737 0.4712815263
4 0.0 0.1 1.3146344607 1.4748541725
5 0.0 0.1 0.5287184737 0.4712815263
6 0.0 0.1 0.0266535092 0.7187078375
7 0.0 0.1 0.9642408218 0.0357591782
8 0.0 0.1 0.0266535092 0.7187078375
9 0.0 0.1 0.9642408218 0.0357591782
10 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
11 0.5 0.6 0.6937453233 0.3062546767
12 0.5 0.6 1.6956511871 1.8412868439
13 0.5 0.6 0.5205878157 0.4794121843
14 0.5 0.6 0.0963664980 0.7884208263
15 0.5 0.6 0.8910851282 0.1089148718
16 0.5 0.6 0.2405105372 0.4515437911
17 0.5 0.6 0.6524687046 0.3475312954
18 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
19 1.0 1.1 0.5746228706 0.4253771294
20 1.0 1.1 0.9850377743 0.8417488820
21 1.0 1.1 0.4607811641 0.5392188359
22 1.0 1.1 0.2717276214 0.4203267068
23 1.0 1.1 0.6073608526 0.3926391474
24 1.0 1.1 0.6134562392 0.0785980891
25 1.0 1.1 0.1135721371 0.8864278629
26 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
27 1.5 1.6 0.6264515437 0.3735484563
28 1.5 1.6 0.8931606340 1.5992808599
29 1.5 1.6 0.6416523171 0.3583476829
30 1.5 1.6 0.8684816718 1.5605360001
31 1.5 1.6 0.6424555976 0.3575444024
32 1.5 1.6 0.6258439703 1.3178982986
33 1.5 1.6 0.6780211140 0.3219788860
34 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
35 2.0 2.1 0.6302345983 0.3697654017
36 2.0 2.1 0.9998915882 0.9418856609
37 2.0 2.1 0.4850637020 0.5149362980
38 2.0 2.1 0.1399914271 0.8320457554
39 2.0 2.1 0.8559814073 0.1440185927
40 2.0 2.1 0.3279732492 0.3640810790
41 2.0 2.1 0.5260874243 0.4739125757
42 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
43 2.5 2.6 0.3511095332 0.6488904668
44 2.5 2.6 1.1374772823 0.4657549948
45 2.5 2.6 0.2905099912 0.7094900088
46 2.5 2.6 0.4486383802 0.2434159481
47 2.5 2.6 0.3517295364 0.6482704636
48 2.5 2.6 0.9045092334 0.2124549051
49 2.5 2.6 0.1902074541 0.8097925459
50 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
51 3.0 3.1 0.4286036638 0.5713963362
52 3.0 3.1 1.0115551361 0.4773963713
53 3.0 3.1 0.3206258692 0.6793741308
54 3.0 3.1 0.4111271045 0.2809272237
55 3.0 3.1 0.4059323268 0.5940676732
56 3.0 3.1 0.7658960980 0.0738417697
57 3.0 3.1 0.0879343097 0.9120656903
58 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
59 4.0 4.1 0.4692919510 0.5307080490
60 4.0 4.1 1.0616555036 0.6934266642
61 4.0 4.1 0.3950964102 0.6049035898
62 4.0 4.1 0.5949672922 0.0970870361
63 4.0 4.1 0.1402881712 0.8597118288
64 4.0 4.1 0.8823968030 0.1903424748
65 4.0 4.1 0.1774359145 0.8225640855
66 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
67 4.5 4.6 0.3029297311 0.6970702689
68 4.5 4.6 1.1703812211 0.4908732854
69 4.5 4.6 0.2954834936 0.7045165064
70 4.5 4.6 0.8758921425 0.1838378142
71 4.5 4.6 0.1734760946 0.8265239054
72 4.5 4.6 1.0874390582 0.3953847299
73 4.5 4.6 0.2666430989 0.7333569011
74 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
75 5.0 5.1 0.3410184304 0.6589815696
76 5.0 5.1 1.2646035568 0.7114824206
77 5.0 5.1 0.3600462878 0.6399537122
78 5.0 5.1 0.7632985592 0.0712442309
79 5.0 5.1 0.0853691767 0.9146308233
80 5.0 5.1 0.8854525534 0.1933982252
81 5.0 5.1 0.1792631836 0.8207368164
82 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
83 5.5 5.6 0.3131806733 0.6868193267
84 5.5 5.6 0.9583113737 0.4435190877
85 5.5 5.6 0.3163856828 0.6836143172
86 5.5 5.6 0.5942285596 0.0978257686
87 5.5 5.6 0.1413556200 0.8586443800
88 5.5 5.6 0.6575503577 0.0345039706
89 5.5 5.6 0.0498573149 0.9501426851
90 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
91 6.0 6.1 0.3329393872 0.6670606128
92 6.0 6.1 0.9791673177 0.5064862975
93 6.0 6.1 0.3409181604 0.6590818396
94 6.0 6.1 0.6318850879 0.0601692404
95 6.0 6.1 0.0869429435 0.9130570565
96 6.0 6.1 0.6607383164 0.0313160119
97 6.0 6.1 0.0452507999 0.9547492001
@@ -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,,,
1 Time:3x3 End Time 1: 1: 1: 2: 2: 2: 3: 3: 3: Event Id Event Date Event Duration
2 0.0 0.1 2.5849288 1.33543611 0.511092833 1.33543611 2.19748746 0.527579698 0.511092833 0.527579698 0.507583739
3 0.5 0.6 1.99839975 -0.650968006 -0.150223386 -0.650968006 1.52895167 0.0688523853 -0.150223386 0.0688523853 0.652648582
4 1.0 1.1 1.21758058 -0.00 0.013088361 -0.00 1.00554914 0.0104706888 0.013088361 0.0104706888 0.756870279
5 1.5 1.6 2.57527815 -0.621023059 -0.153239456 -0.621023059 0.897709368 0.0564566417 -0.153239456 0.0564566417 0.317012482
6 2.0 2.1 2.87232755 -0.786745664 -0.0991696216 -0.786745664 1.81451826 -0.0991696216 -0.0991696216 -0.0991696216 0.783154191
7 2.5 2.6 1.64826027 -0.00963569008 0.0289070702 -0.00963569008 1.5880372 0.0770855206 0.0289070702 0.0770855206 1.17370253
8 3.0 3.1 1.9742694 -0.149321794 0.108597668 -0.149321794 2.11906629 -0.081448251 0.108597668 -0.081448251 1.04666432
@@ -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,,,
1 Time:3x3 End Time 1: 1: 1: 2: 2: 2: 3: 3: 3: Event Id Event Date Event Duration
2 0.0 0.1 1.06313148 0.315509839 0.0893944544 0.315509839 1.33131485 0.00 0.0893944544 0.00 0.705553667
3 0.5 0.6 1.18724478 0.490413981 0.0959505616 0.490413981 2.21604802 0.111942322 0.0959505616 0.111942322 0.936707201
4 1.0 1.1 1.86743369 0.055816941 0.074422588 0.055816941 2.70096668 -0.148845176 0.074422588 -0.148845176 1.49159963
5 1.5 1.6 1.89536719 0.324938579 -0.160114662 0.324938579 2.27210757 0.20720721 -0.160114662 0.20720721 1.21252525
6 2.0 2.1 1.60313579 0.00319114656 0.00 0.00319114656 1.6071931 -0.00136763424 0.00 -0.00136763424 1.59967111
@@ -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,,,
1 Time:3x3 End Time 1: 1: 1: 2: 2: 2: 3: 3: 3: Event Id Event Date Event Duration
2 0.0000000000 0.0000000000 1.70952664 0.01674082 0.02077766 0.01674082 1.60344581 0.05423902 0.02077766 0.05423902 0.8303257