init
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
PROJECT(openvibe-plugins-file-io)
|
||||
|
||||
SET(PROJECT_VERSION_MAJOR ${OV_GLOBAL_VERSION_MAJOR})
|
||||
SET(PROJECT_VERSION ${OV_GLOBAL_VERSION_STRING})
|
||||
|
||||
FILE(GLOB_RECURSE SRC_FILES src/*.cpp src/*.c src/*.h src/*.inl)
|
||||
ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRC_FILES})
|
||||
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES
|
||||
VERSION ${PROJECT_VERSION}
|
||||
SOVERSION ${PROJECT_VERSION_MAJOR}
|
||||
FOLDER ${PLUGINS_FOLDER}
|
||||
COMPILE_FLAGS "-DOVP_Exports -DOVP_Shared -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE")
|
||||
|
||||
INCLUDE_DIRECTORIES("src")
|
||||
|
||||
# OpenViBE Base
|
||||
INCLUDE("FindOpenViBE")
|
||||
INCLUDE("FindOpenViBECommon")
|
||||
INCLUDE("FindOpenViBEToolkit")
|
||||
|
||||
# OpenViBE Module
|
||||
INCLUDE("FindOpenViBEModuleEBML")
|
||||
INCLUDE("FindOpenViBEModuleSystem")
|
||||
INCLUDE("FindOpenViBEModuleXML")
|
||||
INCLUDE("FindOpenViBEModuleFS")
|
||||
|
||||
# OpenViBE Third Party
|
||||
INCLUDE("FindThirdPartyBoost")
|
||||
INCLUDE("FindThirdPartyBoost_Regex")
|
||||
|
||||
# ---------------------------------
|
||||
# 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})
|
||||
|
||||
|
||||
INSTALL(DIRECTORY signals DESTINATION ${DIST_DATADIR}/openvibe/scenarios/)
|
||||
INSTALL(DIRECTORY box-tutorials DESTINATION ${DIST_DATADIR}/openvibe/scenarios/)
|
||||
INSTALL(DIRECTORY electrode_sets DESTINATION ${DIST_DATADIR}/openvibe/)
|
||||
|
||||
+329
@@ -0,0 +1,329 @@
|
||||
<OpenViBE-Scenario>
|
||||
<FormatVersion>1</FormatVersion>
|
||||
<Creator>openvibe</Creator>
|
||||
<CreatorVersion>2.0</CreatorVersion>
|
||||
<Boxes>
|
||||
<Box>
|
||||
<Identifier>(0x00003095, 0x0000083c)</Identifier>
|
||||
<Name>Signal display</Name>
|
||||
<AlgorithmClassIdentifier>(0x0055be5f, 0x087bdd12)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Data</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6ab26b81, 0x0f8c02f3)</TypeIdentifier>
|
||||
<Name>Channel Units</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x5de046a6, 0x086340aa)</TypeIdentifier>
|
||||
<Name>Display Mode</Name>
|
||||
<DefaultValue>Scan</DefaultValue>
|
||||
<Value>Scan</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x33a30739, 0x00d5299b)</TypeIdentifier>
|
||||
<Name>Auto vertical scale</Name>
|
||||
<DefaultValue>Per channel</DefaultValue>
|
||||
<Value>Per channel</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Scale refresh interval (secs)</Name>
|
||||
<DefaultValue>5</DefaultValue>
|
||||
<Value>5</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Vertical Scale</Name>
|
||||
<DefaultValue>100</DefaultValue>
|
||||
<Value>100</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Vertical Offset</Name>
|
||||
<DefaultValue>0</DefaultValue>
|
||||
<Value>0</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Time Scale</Name>
|
||||
<DefaultValue>10</DefaultValue>
|
||||
<Value>10</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Horizontal ruler</Name>
|
||||
<DefaultValue>true</DefaultValue>
|
||||
<Value>true</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Vertical ruler</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Multiview</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>208.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
|
||||
<Value>38</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>352.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x92c056a7, 0x2dc71aff)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
|
||||
<Value>113</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc67a01dc, 0x28ce06c1)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>false</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>9</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00007cac, 0x00005021)</Identifier>
|
||||
<Name>GDF file reader</Name>
|
||||
<AlgorithmClassIdentifier>(0x3eeb1264, 0x4edfbd9a)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x403488e7, 0x565d70b6)</TypeIdentifier>
|
||||
<Name>Experiment information</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>EEG stream</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value>${Path_Data}/scenarios/signals/real-hand-movements.gdf</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Samples per buffer</Name>
|
||||
<DefaultValue>32</DefaultValue>
|
||||
<Value>32</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Subtract physical minimum</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>112</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
|
||||
<Value>25</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>368</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x78b8b69d, 0x27afe678)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
|
||||
<Value>123</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x00a753ca)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>false</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
</Boxes>
|
||||
<Links>
|
||||
<Link>
|
||||
<Identifier>(0x00001b96, 0x0000671e)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00007cac, 0x00005021)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00003095, 0x0000083c)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
|
||||
<Value>131</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
|
||||
<Value>368</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
|
||||
<Value>184</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
|
||||
<Value>337</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00004818, 0x00007e41)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00007cac, 0x00005021)</BoxIdentifier>
|
||||
<BoxOutputIndex>2</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00003095, 0x0000083c)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
|
||||
<Value>131</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
|
||||
<Value>383</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
|
||||
<Value>184</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
|
||||
<Value>352</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Link>
|
||||
</Links>
|
||||
<Comments>
|
||||
<Comment>
|
||||
<Identifier>(0x00003f6d, 0x000051fc)</Identifier>
|
||||
<Text>The <i>Signal Display</i> box displays
|
||||
the content of the file.</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>608</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>224</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x00004f81, 0x00006854)</Identifier>
|
||||
<Text>You can browse each box' documentation by selecting the box and pressing <b>F1</b></Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>512</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>304</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x0000609f, 0x00006abc)</Identifier>
|
||||
<Text>The <i><b>GDF File Reader</b></i> box
|
||||
reads a <i>GDF</i> file from disk and sends
|
||||
its content to the following box.
|
||||
The <i>GDF</i> file format is a general
|
||||
data format for biomedical data.</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>608</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>128</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
</Comments>
|
||||
<Metadata>
|
||||
<Entry>
|
||||
<Identifier>(0x0000775c, 0x000078ff)</Identifier>
|
||||
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
|
||||
<Data>[{"boxIdentifier":"(0x00003095, 0x0000083c)","childCount":0,"identifier":"(0x00000dd5, 0x00002bd9)","index":0,"parentIdentifier":"(0xffffffff, 0xffffffff)","type":3},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":1,"identifier":"(0x00006b68, 0x000051e7)","index":0,"name":"Default window","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":1},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x00004775, 0x00005b97)","index":0,"name":"Default tab","parentIdentifier":"(0x00006b68, 0x000051e7)","type":2},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":0,"identifier":"(0x00007276, 0x00006df8)","index":0,"name":"Empty","parentIdentifier":"(0x00004775, 0x00005b97)","type":0}]</Data>
|
||||
</Entry>
|
||||
</Metadata>
|
||||
</OpenViBE-Scenario>
|
||||
+284
@@ -0,0 +1,284 @@
|
||||
<OpenViBE-Scenario>
|
||||
<FormatVersion>1</FormatVersion>
|
||||
<Creator>OpenVIBE</Creator>
|
||||
<CreatorVersion>0.2.99</CreatorVersion>
|
||||
<Settings></Settings>
|
||||
<Inputs></Inputs>
|
||||
<Outputs></Outputs>
|
||||
<Boxes>
|
||||
<Box>
|
||||
<Identifier>(0x00003308, 0x00003644)</Identifier>
|
||||
<Name>Generic stream reader</Name>
|
||||
<AlgorithmClassIdentifier>(0x6468099f, 0x0370095a)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x403488e7, 0x565d70b6)</TypeIdentifier>
|
||||
<Name>Output stream 1</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Output stream 2</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Output stream 3</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value>${Path_Data}/scenarios/signals/bci-motor-imagery.ov</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>80</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>352</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x30a4e5c9, 0x83502953)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xf37b8e7a, 0x1bc33e4e)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x012ff9b9)</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x000066fb, 0x00004b22)</Identifier>
|
||||
<Name>Signal display</Name>
|
||||
<AlgorithmClassIdentifier>(0x0055be5f, 0x087bdd12)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Data</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6ab26b81, 0x0f8c02f3)</TypeIdentifier>
|
||||
<Name>Channel Units</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x5de046a6, 0x086340aa)</TypeIdentifier>
|
||||
<Name>Display Mode</Name>
|
||||
<DefaultValue>Scan</DefaultValue>
|
||||
<Value>Scan</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x33a30739, 0x00d5299b)</TypeIdentifier>
|
||||
<Name>Auto vertical scale</Name>
|
||||
<DefaultValue>Per channel</DefaultValue>
|
||||
<Value>Per channel</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Scale refresh interval (secs)</Name>
|
||||
<DefaultValue>5</DefaultValue>
|
||||
<Value>5</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Vertical Scale</Name>
|
||||
<DefaultValue>100</DefaultValue>
|
||||
<Value>100</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Vertical Offset</Name>
|
||||
<DefaultValue>0</DefaultValue>
|
||||
<Value>0</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Time Scale</Name>
|
||||
<DefaultValue>10</DefaultValue>
|
||||
<Value>10</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Horizontal ruler</Name>
|
||||
<DefaultValue>true</DefaultValue>
|
||||
<Value>true</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Vertical ruler</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Multiview</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>208.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>352.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x92c056a7, 0x2dc71aff)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>false</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>9</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
</Boxes>
|
||||
<Links>
|
||||
<Link>
|
||||
<Identifier>(0x00001a63, 0x0000448e)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00003308, 0x00003644)</BoxIdentifier>
|
||||
<BoxOutputIndex>2</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000066fb, 0x00004b22)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x0000484b, 0x00006f3b)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00003308, 0x00003644)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000066fb, 0x00004b22)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
</Links>
|
||||
<Comments>
|
||||
<Comment>
|
||||
<Identifier>(0x00003620, 0x000059a1)</Identifier>
|
||||
<Text>You can browse each box' documentation by selecting the box and pressing <b>F1</b></Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>512</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>272</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x00005c3b, 0x00000b17)</Identifier>
|
||||
<Text>The <i>Signal Display</i> box displays
|
||||
the content of the file.</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>608</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>192</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x00005efd, 0x00002640)</Identifier>
|
||||
<Text>The <i><b>Generic Stream Reader</b></i> box
|
||||
reads an <i>OpenViBE</i> file from disk and sends
|
||||
its content to the following box.
|
||||
The <i>OpenViBE</i> file format can store any
|
||||
stream of the OpenViBE platform into a file.</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>608</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>96</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
</Comments>
|
||||
<Metadata>
|
||||
<Entry>
|
||||
<Identifier>(0x0000775c, 0x000078ff)</Identifier>
|
||||
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
|
||||
<Data>[{"boxIdentifier":"(0x000066fb, 0x00004b22)","childCount":0,"identifier":"(0x000036a0, 0x000071be)","parentIdentifier":"(0xffffffff, 0xffffffff)","type":3},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":1,"identifier":"(0x00007d0d, 0x00005168)","name":"Default window","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":1},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x00004865, 0x00005a3e)","index":0,"name":"Default tab","parentIdentifier":"(0x00007d0d, 0x00005168)","type":2},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":0,"identifier":"(0x00004291, 0x000027f2)","index":0,"name":"Empty","parentIdentifier":"(0x00004865, 0x00005a3e)","type":0}]</Data>
|
||||
</Entry>
|
||||
</Metadata>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x790d75b8, 0x3bb90c33)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x8c1fc55b, 0x7b433dc2)</Identifier>
|
||||
<Value>1.0</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x9f5c4075, 0x4a0d3666)</Identifier>
|
||||
<Value>Stream reading example</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf36a1567, 0xd13c53da)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf6b2e3fa, 0x7bd43926)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf8034a49, 0x8b3f37cc)</Identifier>
|
||||
<Value>Inria</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</OpenViBE-Scenario>
|
||||
+686
@@ -0,0 +1,686 @@
|
||||
<OpenViBE-Scenario>
|
||||
<FormatVersion>1</FormatVersion>
|
||||
<Creator>openvibe</Creator>
|
||||
<CreatorVersion>2.0</CreatorVersion>
|
||||
<Boxes>
|
||||
<Box>
|
||||
<Identifier>(0x000014d0, 0x00006e53)</Identifier>
|
||||
<Name>GDF file writer</Name>
|
||||
<AlgorithmClassIdentifier>(0x1e7b2155, 0x107289ce)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x403488e7, 0x565d70b6)</TypeIdentifier>
|
||||
<Name>Experiment information</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Signal</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulation</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename</Name>
|
||||
<DefaultValue>record-[$core{date}-$core{time}].gdf</DefaultValue>
|
||||
<Value>${Path_UserData}/spaceship-freetime-doubled.gdf</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>320.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
|
||||
<Value>23</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>224.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xd41e3037, 0xcc12644a)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
|
||||
<Value>102</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x002eba2a)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00002e3b, 0x000031a4)</Identifier>
|
||||
<Name>Signal Concatenation</Name>
|
||||
<AlgorithmClassIdentifier>(0x372f3a9d, 0x49e20cd2)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Input signal 1</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Input stimulations 1</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Input signal 2</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Input stimulations 2</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Signal</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Status</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Time out before assuming end-of-file (in sec)</Name>
|
||||
<DefaultValue>5</DefaultValue>
|
||||
<Value>5</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
|
||||
<Name>End-of-file stimulation for input 1</Name>
|
||||
<DefaultValue>OVTK_StimulationId_ExperimentStop</DefaultValue>
|
||||
<Value>OVTK_StimulationId_ExperimentStop</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
|
||||
<Name>End-of-file stimulation for input 2</Name>
|
||||
<DefaultValue>OVTK_StimulationId_ExperimentStop</DefaultValue>
|
||||
<Value>OVTK_StimulationId_ExperimentStop</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>208.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
|
||||
<Value>33</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>320.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x2071186d, 0x08fedd4a)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
|
||||
<Value>148</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x00a5ce58)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>4</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xfba64161, 0x65304e21)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00003a1f, 0x00000d0f)</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>368.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
|
||||
<Value>23</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>320.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x568d148e, 0x650792b3)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
|
||||
<Value>118</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x002c907c)</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>(0x00004fce, 0x0000401d)</Identifier>
|
||||
<Name>GDF file reader</Name>
|
||||
<AlgorithmClassIdentifier>(0x3eeb1264, 0x4edfbd9a)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x403488e7, 0x565d70b6)</TypeIdentifier>
|
||||
<Name>Experiment information</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>EEG stream</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value>${Path_Data}/scenarios/signals/spaceship-freetime.gdf</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Samples per buffer</Name>
|
||||
<DefaultValue>32</DefaultValue>
|
||||
<Value>32</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Subtract physical minimum</Name>
|
||||
<DefaultValue>False</DefaultValue>
|
||||
<Value>False</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>80.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
|
||||
<Value>23</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>176.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x78b8b69d, 0x27afe678)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
|
||||
<Value>106</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x01087006)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>false</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00005d50, 0x000030ca)</Identifier>
|
||||
<Name>GDF file reader</Name>
|
||||
<AlgorithmClassIdentifier>(0x3eeb1264, 0x4edfbd9a)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x403488e7, 0x565d70b6)</TypeIdentifier>
|
||||
<Name>Experiment information</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>EEG stream</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value>${Path_Data}/scenarios/signals/spaceship-freetime.gdf</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Samples per buffer</Name>
|
||||
<DefaultValue>32</DefaultValue>
|
||||
<Value>32</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Subtract physical minimum</Name>
|
||||
<DefaultValue>False</DefaultValue>
|
||||
<Value>False</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>80.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
|
||||
<Value>23</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>352.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x78b8b69d, 0x27afe678)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
|
||||
<Value>106</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x000dc339)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc67a01dc, 0x28ce06c1)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>false</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
</Boxes>
|
||||
<Links>
|
||||
<Link>
|
||||
<Identifier>(0x00000efd, 0x00000c31)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00002e3b, 0x000031a4)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000014d0, 0x00006e53)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
|
||||
<Value>231</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
|
||||
<Value>305</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
|
||||
<Value>304</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
|
||||
<Value>224</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x0000157b, 0x00006c4b)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00004fce, 0x0000401d)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000014d0, 0x00006e53)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
|
||||
<Value>98</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
|
||||
<Value>161</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
|
||||
<Value>304</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
|
||||
<Value>209</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000024b5, 0x00003f90)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00002e3b, 0x000031a4)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000014d0, 0x00006e53)</BoxIdentifier>
|
||||
<BoxInputIndex>2</BoxInputIndex>
|
||||
</Target>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
|
||||
<Value>231</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
|
||||
<Value>320</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
|
||||
<Value>304</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
|
||||
<Value>239</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000026b8, 0x00007cdc)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00004fce, 0x0000401d)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00002e3b, 0x000031a4)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
|
||||
<Value>98</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
|
||||
<Value>176</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
|
||||
<Value>187</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
|
||||
<Value>297</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00002b7e, 0x00005e63)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00005d50, 0x000030ca)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00002e3b, 0x000031a4)</BoxIdentifier>
|
||||
<BoxInputIndex>2</BoxInputIndex>
|
||||
</Target>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
|
||||
<Value>98</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
|
||||
<Value>352</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
|
||||
<Value>187</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
|
||||
<Value>327</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00002fd3, 0x00001a24)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00005d50, 0x000030ca)</BoxIdentifier>
|
||||
<BoxOutputIndex>2</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00002e3b, 0x000031a4)</BoxIdentifier>
|
||||
<BoxInputIndex>3</BoxInputIndex>
|
||||
</Target>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
|
||||
<Value>98</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
|
||||
<Value>367</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
|
||||
<Value>187</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
|
||||
<Value>342</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x0000537f, 0x00002c3d)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00004fce, 0x0000401d)</BoxIdentifier>
|
||||
<BoxOutputIndex>2</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00002e3b, 0x000031a4)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
|
||||
<Value>98</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
|
||||
<Value>191</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
|
||||
<Value>187</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
|
||||
<Value>312</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00007d07, 0x000012ca)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00002e3b, 0x000031a4)</BoxIdentifier>
|
||||
<BoxOutputIndex>2</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00003a1f, 0x00000d0f)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
|
||||
<Value>231</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
|
||||
<Value>335</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
|
||||
<Value>352</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
|
||||
<Value>320</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Link>
|
||||
</Links>
|
||||
<Comments>
|
||||
<Comment>
|
||||
<Identifier>(0x00001273, 0x000001e4)</Identifier>
|
||||
<Text>You can browse each box' documentation by selecting the box and pressing <b>F1</b></Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>688.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>336.000000</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x00002bb5, 0x00003539)</Identifier>
|
||||
<Text>This scenario illustrates the <b>Signal Concatenation</b> box.
|
||||
|
||||
This box reads two or more streams, inserting the streams one
|
||||
after another (from left to right, considering the input connectors).
|
||||
Hence, the output stream will have the summed length of the
|
||||
original signals.
|
||||
|
||||
Note that the catenated streams must have the same
|
||||
characteristics, such as sampling rate and number of channels.
|
||||
|
||||
The <i>GDF file writer</i> box writes the resulting file under
|
||||
$APPDATA/openvibe/ on Windows and $HOME/.config/openvibe/ on Linux,
|
||||
as the setting token ${UserData} will be expanded to this path.
|
||||
|
||||
Finally, <i>Player Controller</i> stops the scenario playback
|
||||
after <i>Signal Concatenation</i> is finished.</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>673.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>175.000000</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
</Comments>
|
||||
<Metadata>
|
||||
<Entry>
|
||||
<Identifier>(0x0000775c, 0x000078ff)</Identifier>
|
||||
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
|
||||
<Data>[{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":1,"identifier":"(0x00002968, 0x000001df)","index":0,"name":"Default window","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":1},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x00000bb7, 0x00002c66)","index":0,"name":"Default tab","parentIdentifier":"(0x00002968, 0x000001df)","type":2},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":0,"identifier":"(0x000067e2, 0x00001447)","index":0,"name":"Empty","parentIdentifier":"(0x00000bb7, 0x00002c66)","type":0}]</Data>
|
||||
</Entry>
|
||||
</Metadata>
|
||||
</OpenViBE-Scenario>
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
/**
|
||||
* \page BoxAlgorithm_BCI2000FileReader BCI2000 File Reader
|
||||
__________________________________________________________________
|
||||
|
||||
Detailed description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCI2000FileReader_Description|
|
||||
|
||||
* Loads signals from BCI2000 .dat files.
|
||||
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCI2000FileReader_Description|
|
||||
__________________________________________________________________
|
||||
|
||||
Outputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCI2000FileReader_Outputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCI2000FileReader_Outputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCI2000FileReader_Output1|
|
||||
* The signals for the different channels. If the file header contains channel names, they are used in the stream, otherwise "channel #" is used.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCI2000FileReader_Output1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCI2000FileReader_Output2|
|
||||
* The different state variables.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCI2000FileReader_Output2|
|
||||
|
||||
Settings description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCI2000FileReader_Settings|
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCI2000FileReader_Settings|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCI2000FileReader_Setting1|
|
||||
* The file name should be a BCI2000 .dat file.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCI2000FileReader_Setting1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCI2000FileReader_Setting2|
|
||||
* The number of sample per block sent by the box.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCI2000FileReader_Setting2|
|
||||
__________________________________________________________________
|
||||
|
||||
Examples description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCI2000FileReader_Examples|
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCI2000FileReader_Examples|
|
||||
__________________________________________________________________
|
||||
|
||||
Miscellaneous description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCI2000FileReader_Miscellaneous|
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCI2000FileReader_Miscellaneous|
|
||||
*/
|
||||
+125
@@ -0,0 +1,125 @@
|
||||
/**
|
||||
* \page BoxAlgorithm_BCICompetitionIIIbReader BCI competition IIIb reader
|
||||
__________________________________________________________________
|
||||
|
||||
Detailed description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCICompetitionIIIbReader_Description|
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCICompetitionIIIbReader_Description|
|
||||
__________________________________________________________________
|
||||
|
||||
Outputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCICompetitionIIIbReader_Outputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCICompetitionIIIbReader_Outputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCICompetitionIIIbReader_Output1|
|
||||
* This input contains the signal samples from the trials.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCICompetitionIIIbReader_Output1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCICompetitionIIIbReader_Output2|
|
||||
* This input contains information about the stimulations that occurred during the trials.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCICompetitionIIIbReader_Output2|
|
||||
__________________________________________________________________
|
||||
|
||||
Settings description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCICompetitionIIIbReader_Settings|
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCICompetitionIIIbReader_Settings|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCICompetitionIIIbReader_Setting1|
|
||||
* Name of the signal file from the dataset ("*_s.txt").
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCICompetitionIIIbReader_Setting1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCICompetitionIIIbReader_Setting2|
|
||||
* Name of the trigger file from the dataset ("*_HDR_TRIG.txt").
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCICompetitionIIIbReader_Setting2|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCICompetitionIIIbReader_Setting3|
|
||||
* Name of the label file from the dataset ("*_HDR_Classlabel.txt").
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCICompetitionIIIbReader_Setting3|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCICompetitionIIIbReader_Setting4|
|
||||
* Name of the artifact file from the dataset ("*_HDR_ArtifactSelection.txt").
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCICompetitionIIIbReader_Setting4|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCICompetitionIIIbReader_Setting5|
|
||||
* Name of the true labels file from the dataset ("true_labels_*.txt").
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCICompetitionIIIbReader_Setting5|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCICompetitionIIIbReader_Setting6|
|
||||
* Number of samples to send per sample buffer.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCICompetitionIIIbReader_Setting6|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCICompetitionIIIbReader_Setting7|
|
||||
* Whether the plugin is used in offline mode or not.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCICompetitionIIIbReader_Setting7|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCICompetitionIIIbReader_Setting8|
|
||||
* Keep the training set trials or not.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCICompetitionIIIbReader_Setting8|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCICompetitionIIIbReader_Setting9|
|
||||
* Keep the test set trials or not.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCICompetitionIIIbReader_Setting9|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCICompetitionIIIbReader_Setting10|
|
||||
* Keep the trials containing artifacts or not.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCICompetitionIIIbReader_Setting10|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCICompetitionIIIbReader_Setting11|
|
||||
* The length of a trial in seconds.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCICompetitionIIIbReader_Setting11|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCICompetitionIIIbReader_Setting12|
|
||||
* The time when the CUE is displayed in a trial.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCICompetitionIIIbReader_Setting12|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCICompetitionIIIbReader_Setting13|
|
||||
* The time when the feedback starts in a trial.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCICompetitionIIIbReader_Setting13|
|
||||
__________________________________________________________________
|
||||
|
||||
Examples description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCICompetitionIIIbReader_Examples|
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCICompetitionIIIbReader_Examples|
|
||||
__________________________________________________________________
|
||||
|
||||
Miscellaneous description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BCICompetitionIIIbReader_Miscellaneous|
|
||||
*
|
||||
* The stimulations sent are the following :
|
||||
* - Trial start
|
||||
* - Time : 0
|
||||
* - Id : 0x300
|
||||
*
|
||||
* - Display cross
|
||||
* - Time : 0
|
||||
* - Id : 0x312
|
||||
*
|
||||
* - CUE
|
||||
* - Time : parameter(CUE display start)
|
||||
* - Id : 0x300 + class index (0x301 for first class, 0x302 for the second class, ...)
|
||||
*
|
||||
* - Feedback start
|
||||
* - Time : parameter(Feedback start)
|
||||
* - Id : 0x30D
|
||||
*
|
||||
* - Trial end
|
||||
* - Time : parameter(Trial length)
|
||||
* - Id : 0x320
|
||||
*
|
||||
* - End of session
|
||||
* - Time : when the end of the input file has been reached
|
||||
* - Id : 0x3FF
|
||||
*
|
||||
* See the \ref Doc_Stimulations page for more details about §OpenViBE§ stimulations.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BCICompetitionIIIbReader_Miscellaneous|
|
||||
*/
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
/**
|
||||
* \page BoxAlgorithm_BrainVisionFormatFileWriter BrainVision format file writer
|
||||
__________________________________________________________________
|
||||
|
||||
Detailed description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainVisionFormatFileWriter_Description|
|
||||
* This box writes signal and stimulation data under BrainVision format files.
|
||||
* The files generated by this box are readable with BrainVision Analyzer
|
||||
* software suite.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainVisionFormatFileWriter_Description|
|
||||
__________________________________________________________________
|
||||
|
||||
Inputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainVisionFormatFileWriter_Inputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainVisionFormatFileWriter_Inputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainVisionFormatFileWriter_Input1|
|
||||
* Input EEG signal to be written.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainVisionFormatFileWriter_Input1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainVisionFormatFileWriter_Input2|
|
||||
* Input Stimulations to be written.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainVisionFormatFileWriter_Input2|
|
||||
__________________________________________________________________
|
||||
|
||||
Settings description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainVisionFormatFileWriter_Settings|
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainVisionFormatFileWriter_Settings|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainVisionFormatFileWriter_Setting1|
|
||||
* Path of the header file to write, the header is a .vhdr file, if the extension is missing,
|
||||
* it will be automatically added.
|
||||
* Header will be written to this file. A .eeg file with signal
|
||||
* will be created in the same folder. A .vmrk file will be also written and it will contain
|
||||
* the markers.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainVisionFormatFileWriter_Setting1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainVisionFormatFileWriter_Setting2|
|
||||
* Path to the dictionary containing Marker to Stimulation correspondences. Its format is described in the BrainVision Format File Reader \ref Doc_BoxAlgorithm_BrainVisionFormatFileReader_Miscellaneous section.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainVisionFormatFileWriter_Setting2|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainVisionFormatFileWriter_Setting3|
|
||||
* Whether to write unknown stimulations into the marker stream as well. If set to false,
|
||||
* stimulations that do not appear in the dictionary will be ignored.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainVisionFormatFileWriter_Setting3|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainVisionFormatFileWriter_Setting4|
|
||||
* Whether to use $b as placeholder for EEG and Marker files inside the header. If this is set
|
||||
* to true, the resulting file will be compatible with more software, however renaming the files
|
||||
* will be more complex.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainVisionFormatFileWriter_Setting4|
|
||||
__________________________________________________________________
|
||||
|
||||
Examples description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainVisionFormatFileWriter_Examples|
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainVisionFormatFileWriter_Examples|
|
||||
__________________________________________________________________
|
||||
|
||||
Miscellaneous description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainVisionFormatFileWriter_Miscellaneous|
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainVisionFormatFileWriter_Miscellaneous|
|
||||
*/
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
/**
|
||||
* \page BoxAlgorithm_BrainampFileReader Brainamp file reader
|
||||
__________________________________________________________________
|
||||
|
||||
Detailed description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainampFileReader_Description|
|
||||
* Loads experiment information, signal and stimulations data from Brainamp files.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainampFileReader_Description|
|
||||
__________________________________________________________________
|
||||
|
||||
Outputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainampFileReader_Outputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainampFileReader_Outputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainampFileReader_Output1|
|
||||
* This stream contains information about the experiment and subject.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainampFileReader_Output1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainampFileReader_Output2|
|
||||
* Contains the signal information for the different channels (read from the GDF file).
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainampFileReader_Output2|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainampFileReader_Output3|
|
||||
* Contains information about the stimulations that occurred during the experiment.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainampFileReader_Output3|
|
||||
__________________________________________________________________
|
||||
|
||||
Settings description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainampFileReader_Settings|
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainampFileReader_Settings|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainampFileReader_Setting1|
|
||||
* This setting contains the name of the brainamp header file. The other files are deduced
|
||||
* from the header content (signal content and markers).
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainampFileReader_Setting1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainampFileReader_Setting2|
|
||||
* This setting sets the size of epochs to be generated by this box, in seconds.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainampFileReader_Setting2|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainampFileReader_Setting3|
|
||||
* Should stimuli in the file to be converted to OpenViBE stimuli? For
|
||||
* legacy reasons, the default is true. With false, the stimuli will
|
||||
* be delivered without any conversion.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainampFileReader_Setting3|
|
||||
|
||||
__________________________________________________________________
|
||||
|
||||
Examples description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainampFileReader_Examples|
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainampFileReader_Examples|
|
||||
|
||||
__________________________________________________________________
|
||||
|
||||
Miscellaneous description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_BrainampFileReader_Miscellaneous|
|
||||
* Experiment information is stored in a header file which the user needs to specify
|
||||
* when setting up the box. When started, the box then works up the names of two additional
|
||||
* files : a data file and a marker file. Signal data is retrieved from the data file,
|
||||
* stimulations from the marker file.
|
||||
*
|
||||
* The stimulation makers are transformed in §OpenViBE§ format with the
|
||||
* \c OVTK_StimulationId_Label base. See the \ref Doc_Stimulations page
|
||||
* for more details about §OpenViBE§ stimulations.
|
||||
* |OVP_DocEnd_BoxAlgorithm_BrainampFileReader_Miscellaneous|
|
||||
*/
|
||||
+131
@@ -0,0 +1,131 @@
|
||||
/**
|
||||
* \page BoxAlgorithm_CSVFileReader CSV File Reader
|
||||
__________________________________________________________________
|
||||
|
||||
Detailed description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CSVFileReader_Description|
|
||||
This box allows to read some of the OpenViBE streams from a text file that is
|
||||
easy to read both by machines and humans. CSV files are text files
|
||||
with different values separated by a special character such as a colon, a semicolon
|
||||
or a tabulation. This basic syntax makes them very easy to parse. The purpose of this
|
||||
box is to quickly import some data from other softwares.
|
||||
|
||||
@b NOTE For files carrying signal, the file format the box accepts is NOT the usual
|
||||
N times M matrix. There must be a few extra items: the first column must be the time
|
||||
of each sample, and the first line of data must have one more column than the other lines.
|
||||
This last column should be the sampling rate. See below for details.
|
||||
|
||||
* |OVP_DocEnd_BoxAlgorithm_CSVFileReader_Description|
|
||||
__________________________________________________________________
|
||||
|
||||
Inputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CSVFileReader_Outputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_CSVFileReader_Outputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CSVFileReader_Output1|
|
||||
This output is used to import data from a CSV File to an OpenViBE stream. The type of
|
||||
this output can be modified by the user and the format of the file will be adapted
|
||||
depending on this type. Supported outputs are : Signal, Spectrum, Stimulations,
|
||||
Feature Vector and Streamed Matrix.
|
||||
|
||||
Format specific to some of these stream types is detailed in section
|
||||
\ref Doc_BoxAlgorithm_CSVFileReader_Miscellaneous.
|
||||
* |OVP_DocEnd_BoxAlgorithm_CSVFileReader_Output1|
|
||||
__________________________________________________________________
|
||||
|
||||
Settings description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CSVFileReader_Settings|
|
||||
* |OVP_DocEnd_BoxAlgorithm_CSVFileReader_Settings|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CSVFileReader_Setting1|
|
||||
This setting contains the file where to load the data.
|
||||
* |OVP_DocEnd_BoxAlgorithm_CSVFileReader_Setting1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CSVFileReader_Setting2|
|
||||
This setting contains the special character to use as a separation for the different
|
||||
fields. Typical examples are colon, semi colon and tabulations.
|
||||
* |OVP_DocEnd_BoxAlgorithm_CSVFileReader_Setting2|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CSVFileReader_Setting3|
|
||||
This option mainly makes sense for an output signal type, but can also be used
|
||||
for matrices. Sometimes, the time of the first sample in the data isn't equal
|
||||
0 or the file appears to contain such timing that it is difficult to parse a
|
||||
continuous chunk sequence from it. Many OpenViBE boxes expect continuous
|
||||
chunking, starting at time 0, with no time between the signal chunks. This
|
||||
setting interpretes the file as essentially being dense, with consecutive
|
||||
chunks, the first chunk (sample) at time 0. The samples are sent according
|
||||
to the timing dictated by the sampling rate specified at the end of the
|
||||
second line of the csv file, with the first column ignored.
|
||||
* |OVP_DocEnd_BoxAlgorithm_CSVFileReader_Setting3|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CSVFileReader_Setting4|
|
||||
Number of samples per channel in a streamed matrix.
|
||||
* |OVP_DocEnd_BoxAlgorithm_CSVFileReader_Setting4|
|
||||
__________________________________________________________________
|
||||
|
||||
Examples description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CSVFileReader_Examples|
|
||||
* |OVP_DocEnd_BoxAlgorithm_CSVFileReader_Examples|
|
||||
__________________________________________________________________
|
||||
|
||||
Miscellaneous description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CSVFileReader_Miscellaneous|
|
||||
If the boxes obtaining signal from the CSV File Reader behave curiously,
|
||||
you may want to try enabling the "don't use the file time" setting. Also,
|
||||
if the time is not monotonically increasing from sample to another
|
||||
in the file (this can result from e.g. epoching), the result may not
|
||||
be read back as expected. For such signals, it is best to use the
|
||||
.ov file format and not CSV.
|
||||
|
||||
Here are some typical inputs that you will find in the input
|
||||
file depending on the type of the input connector.
|
||||
|
||||
For the Signal stream, you will have something like this :
|
||||
\verbatim
|
||||
Time (s), Channel 1, Channel 2, ..., Channel n, Sampling Rate
|
||||
Time of measure 1, Measure 1 of channel 1, Measure 1 of channel 2, ..., Measure 1 of channel n, Value of the sampling rate
|
||||
Time of measure 2, Measure 2 of channel 1, Measure 2 of channel 2, ..., Measure 2 of channel n
|
||||
...
|
||||
Time of measure t, Measure t of channel 1, Measure t of channel 2, ..., Measure t of channel n
|
||||
\endverbatim
|
||||
|
||||
For the Spectrum stream, you will have something like this :
|
||||
\verbatim
|
||||
Time (s), Channel 1, Channel 2, ..., Channel n, Min frequency band, Max frequency band
|
||||
Time of measure 1, Freq band 1 of m. 1 of chan 1, Freq band 1 of m. 1 of chan 2, ..., Freq band 1 of m. 1 of chan n, Value Min Frequency Band of band 1, Value Max Frequency Band of band 1
|
||||
Time of measure 1, Freq band 2 of m. 1 of chan 1, Freq band 2 of m. 1 of chan 2, ..., Freq band 2 of m. 1 of chan n, Value Min Frequency Band of band 2, Value Max Frequency Band of band 2
|
||||
...
|
||||
Time of measure 1, Freq band f of m. 1 of chan 1, Freq band f of m. 1 of chan 2, ..., Freq band f of m. 1 of chan n, Value Min Frequency Band of band f, Value Max Frequency Band of band f
|
||||
Time of measure 2, Freq band 1 of m. 2 of chan 1, Freq band 1 of m. 2 of chan 2, ..., Freq band 1 of m. 2 of chan n
|
||||
Time of measure 2, Freq band 2 of m. 2 of chan 1, Freq band 2 of m. 2 of chan 2, ..., Freq band 2 of m. 2 of chan n
|
||||
...
|
||||
Time of measure 2, Freq band f of m. 2 of chan 1, Freq band f of m. 2 of chan 2, ..., Freq band f of m. 2 of chan n
|
||||
...
|
||||
...
|
||||
...
|
||||
Time of measure t, Freq band 1 of m. t of chan 1, Freq band 1 of m. t of chan 2, ..., Freq band 1 of m. t of chan n
|
||||
Time of measure t, Freq band 2 of m. t of chan 1, Freq band 2 of m. t of chan 2, ..., Freq band 2 of m. t of chan n
|
||||
...
|
||||
Time of measure t, Freq band f of m. t of chan 1, Freq band f of m. t of chan 2, ..., Freq band f of m. t of chan n
|
||||
\endverbatim
|
||||
|
||||
For the Stimulation stream, you will have something like this :
|
||||
\verbatim
|
||||
Time (s), Identifier, Duration
|
||||
Time of stim 1, Identifier of stim 1, Duration of stim 1
|
||||
Time of stim 2, Identifier of stim 2, Duration of stim 2
|
||||
...
|
||||
Time of stim n, Identifier of stim n, Duration of stim n
|
||||
\endverbatim
|
||||
* |OVP_DocEnd_BoxAlgorithm_CSVFileReader_Miscellaneous|
|
||||
*/
|
||||
+126
@@ -0,0 +1,126 @@
|
||||
/**
|
||||
* \page BoxAlgorithm_CSVFileWriter CSV File Writer
|
||||
__________________________________________________________________
|
||||
|
||||
Detailed description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CSVFileWriter_Description|
|
||||
This box allows to output some of the OpenViBE streams in a text file that is
|
||||
easy to read by the machine and easy to read by the human. CSV files are text files
|
||||
with different values separated by a special character such as a colon, a semicolon
|
||||
or a tabulation. This basic syntax makes them very easy to read for both machine and
|
||||
human. The purpose of this box is to quicly export some data to other softwares.
|
||||
* |OVP_DocEnd_BoxAlgorithm_CSVFileWriter_Description|
|
||||
__________________________________________________________________
|
||||
|
||||
Inputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CSVFileWriter_Inputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_CSVFileWriter_Inputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CSVFileWriter_Input1|
|
||||
This is input is used to know what data to dump in the considered file. The type of
|
||||
this input can be modified by the user and the format of the output will be adapted
|
||||
depending on this type. Supported inputs are : Signal, Spectrum, Streamed Matrix,
|
||||
Feature Vector, and Stimulations.
|
||||
Format specific to each of these stream types is detailed in section
|
||||
\ref Doc_BoxAlgorithm_CSVFileWriter_Miscellaneous.
|
||||
* |OVP_DocEnd_BoxAlgorithm_CSVFileWriter_Input1|
|
||||
__________________________________________________________________
|
||||
|
||||
Settings description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CSVFileWriter_Settings|
|
||||
* |OVP_DocEnd_BoxAlgorithm_CSVFileWriter_Settings|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CSVFileWriter_Setting1|
|
||||
This setting contains the file where to store the data.
|
||||
* |OVP_DocEnd_BoxAlgorithm_CSVFileWriter_Setting1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CSVFileWriter_Setting2|
|
||||
This setting contains the special character to use as a separation for the different
|
||||
fields. Typical examples are colon, semi colon and tabulations.
|
||||
* |OVP_DocEnd_BoxAlgorithm_CSVFileWriter_Setting2|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CSVFileWriter_Setting3|
|
||||
This allows you to set std::precision, i.e. how many digits are used to represent each input value in the output.
|
||||
* |OVP_DocEnd_BoxAlgorithm_CSVFileWriter_Setting3|
|
||||
__________________________________________________________________
|
||||
|
||||
Examples description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CSVFileWriter_Examples|
|
||||
* |OVP_DocEnd_BoxAlgorithm_CSVFileWriter_Examples|
|
||||
__________________________________________________________________
|
||||
|
||||
Miscellaneous description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_CSVFileWriter_Miscellaneous|
|
||||
In this section, we detail the typical outputs that you will find in the output
|
||||
file depending on the type of the input connector.
|
||||
|
||||
For the Signal stream, you will have something like this :
|
||||
\verbatim
|
||||
Time (s), Channel 1, Channel 2, ..., Channel n, Sampling Rate
|
||||
Time of measure 1, Measure 1 of channel 1, Measure 1 of channel 2, ..., Measure 1 of channel n, Value of the sampling rate
|
||||
Time of measure 2, Measure 2 of channel 1, Measure 2 of channel 2, ..., Measure 2 of channel n,
|
||||
...
|
||||
Time of measure t, Measure t of channel 1, Measure t of channel 2, ..., Measure t of channel n,
|
||||
\endverbatim
|
||||
|
||||
For the Streamed Matrix stream, you will have something like this :
|
||||
\verbatim
|
||||
Time (s), Column 1, Column 2, ..., Column n
|
||||
Time of matrix 1, slot [1,1] of 1, slot[1,2] of 1, ..., slot[1,n] of 1
|
||||
Time of matrix 1, slot [2,1] of 1, slot[2,2] of 1, ..., slot[2,n] of 1
|
||||
...
|
||||
Time of matrix 1, slot [m,1] of 1, slot[m,2] of 1, ..., slot[m,n] of 1
|
||||
...
|
||||
Time of matrix 2, slot [1,1] of 2, slot[1,2] of 2, ..., slot[1,n] of 2
|
||||
...
|
||||
\endverbatim
|
||||
|
||||
For the Feature Vector stream, you will have something like this :
|
||||
\verbatim
|
||||
Time (s), Feature 1, Feature 2, ..., Feature n
|
||||
Time of vector 1, feature 1, feature 2, ..., feature n
|
||||
Time of vector 2, feature 1, feature 2, ..., feature n
|
||||
...
|
||||
Time of vector k, feature 1, feature 2, ..., feature n
|
||||
\endverbatim
|
||||
|
||||
For the Spectrum stream, you will have something like this :
|
||||
\verbatim
|
||||
Time (s), Channel 1, Channel 2, ..., Channel n, Min frequency band, Max frequency band
|
||||
Time of measure 1, Freq band 1 of m. 1 of chan 1, Freq band 1 of m. 1 of chan 2, ..., Freq band 1 of m. 1 of chan n, Value Min Frequency Band of band 1, Value Max Frequency Band of band 1
|
||||
Time of measure 1, Freq band 2 of m. 1 of chan 1, Freq band 2 of m. 1 of chan 2, ..., Freq band 2 of m. 1 of chan n, Value Min Frequency Band of band 2, Value Max Frequency Band of band 2
|
||||
...
|
||||
Time of measure 1, Freq band f of m. 1 of chan 1, Freq band f of m. 1 of chan 2, ..., Freq band f of m. 1 of chan n, Value Min Frequency Band of band f, Value Max Frequency Band of band f
|
||||
Time of measure 2, Freq band 1 of m. 2 of chan 1, Freq band 1 of m. 2 of chan 2, ..., Freq band 1 of m. 2 of chan n
|
||||
Time of measure 2, Freq band 2 of m. 2 of chan 1, Freq band 2 of m. 2 of chan 2, ..., Freq band 2 of m. 2 of chan n
|
||||
...
|
||||
Time of measure 2, Freq band f of m. 2 of chan 1, Freq band f of m. 2 of chan 2, ..., Freq band f of m. 2 of chan n
|
||||
...
|
||||
...
|
||||
...
|
||||
Time of measure t, Freq band 1 of m. t of chan 1, Freq band 1 of m. t of chan 2, ..., Freq band 1 of m. t of chan n
|
||||
Time of measure t, Freq band 2 of m. t of chan 1, Freq band 2 of m. t of chan 2, ..., Freq band 2 of m. t of chan n
|
||||
...
|
||||
Time of measure t, Freq band f of m. t of chan 1, Freq band f of m. t of chan 2, ..., Freq band f of m. t of chan n
|
||||
\endverbatim
|
||||
|
||||
For the Stimulation stream, you will have something like this :
|
||||
\verbatim
|
||||
Time (s), Identifier, Duration
|
||||
Time of stim 1, Identifier of stim 1, Duration of stim 1
|
||||
Time of stim 2, Identifier of stim 2, Duration of stim 2
|
||||
...
|
||||
Time of stim n, Identifier of stim n, Duration of stim n
|
||||
\endverbatim
|
||||
* |OVP_DocEnd_BoxAlgorithm_CSVFileWriter_Miscellaneous|
|
||||
*/
|
||||
+86
@@ -0,0 +1,86 @@
|
||||
/**
|
||||
* \page BoxAlgorithm_GDFFileReader GDF file reader
|
||||
__________________________________________________________________
|
||||
|
||||
Detailed description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_GDFFileReader_Description|
|
||||
The box attempts to be compliant with the version 2.51 of the GDF file specification (doc v10) by Alois Schlögl,
|
||||
as available at the <a href="http://arxiv.org/abs/cs/0608052">arxiv</a>.
|
||||
* |OVP_DocEnd_BoxAlgorithm_GDFFileReader_Description|
|
||||
__________________________________________________________________
|
||||
|
||||
Outputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_GDFFileReader_Outputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_GDFFileReader_Outputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_GDFFileReader_Output1|
|
||||
* This stream contains information about the experiment and subject.
|
||||
* |OVP_DocEnd_BoxAlgorithm_GDFFileReader_Output1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_GDFFileReader_Output2|
|
||||
* Contains the signal information for the different channels (read from the GDF file).
|
||||
* |OVP_DocEnd_BoxAlgorithm_GDFFileReader_Output2|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_GDFFileReader_Output3|
|
||||
* Contains information about the stimulations that occurred during the experiment.
|
||||
* |OVP_DocEnd_BoxAlgorithm_GDFFileReader_Output3|
|
||||
__________________________________________________________________
|
||||
|
||||
Settings description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_GDFFileReader_Settings|
|
||||
* |OVP_DocEnd_BoxAlgorithm_GDFFileReader_Settings|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_GDFFileReader_Setting1|
|
||||
* Name of the GDF file to read.
|
||||
* |OVP_DocEnd_BoxAlgorithm_GDFFileReader_Setting1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_GDFFileReader_Setting2|
|
||||
* Number of samples per channel in a streamed matrix.
|
||||
* |OVP_DocEnd_BoxAlgorithm_GDFFileReader_Setting2|
|
||||
__________________________________________________________________
|
||||
|
||||
Examples description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_GDFFileReader_Examples|
|
||||
* If your GDF file is located in your /tmp directory, you can configure the plugin as follows :
|
||||
*
|
||||
* Filename :
|
||||
*
|
||||
\code
|
||||
/tmp/myGDFFile.gdf
|
||||
\endcode
|
||||
*
|
||||
* Samples per buffer :
|
||||
*
|
||||
\code
|
||||
32
|
||||
\endcode
|
||||
*
|
||||
* Several example GDF files can be found in the share/openvibe/scenarios/signals/ folder.
|
||||
*
|
||||
* Practical example :
|
||||
*
|
||||
* Let's add a GDF file reader box to an empty scenario. One should also locate a GDF file and enter its path in the 'Filename' setting of the box. A second setting
|
||||
* allows to specify the number of samples to be sent per data block.
|
||||
*
|
||||
* This box has 3 output connectors, corresponding to experiment information, stimulations
|
||||
* and signals. One can connect the last two to the two input connectors of a Signal Display box to visualize the signals and/or stimulations stored in the GDF file.
|
||||
*
|
||||
* |OVP_DocEnd_BoxAlgorithm_GDFFileReader_Examples|
|
||||
|
||||
__________________________________________________________________
|
||||
|
||||
Miscellaneous description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_GDFFileReader_Miscellaneous|
|
||||
* The experiment information output isn't operational yet.
|
||||
* |OVP_DocEnd_BoxAlgorithm_GDFFileReader_Miscellaneous|
|
||||
*/
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
/**
|
||||
* \page BoxAlgorithm_GDFFileWriter GDF file writer
|
||||
__________________________________________________________________
|
||||
|
||||
Detailed description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_GDFFileWriter_Description|
|
||||
Writes incoming experiment information, signal and stimulations data to a file according to the GDF file format. One simply has to connect this box to an output to save the desired streams to a file. For now, only GDF1 files are supported.
|
||||
|
||||
* |OVP_DocEnd_BoxAlgorithm_GDFFileWriter_Description|
|
||||
__________________________________________________________________
|
||||
|
||||
Inputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_GDFFileWriter_Inputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_GDFFileWriter_Inputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_GDFFileWriter_Input1|
|
||||
This stream contains information about the experiment and subject.
|
||||
* |OVP_DocEnd_BoxAlgorithm_GDFFileWriter_Input1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_GDFFileWriter_Input2|
|
||||
Contains the signal information for the different channels.
|
||||
* |OVP_DocEnd_BoxAlgorithm_GDFFileWriter_Input2|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_GDFFileWriter_Input3|
|
||||
Contains information about the stimulations that occurred during the experiment.
|
||||
* |OVP_DocEnd_BoxAlgorithm_GDFFileWriter_Input3|
|
||||
__________________________________________________________________
|
||||
|
||||
Settings description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_GDFFileWriter_Settings|
|
||||
* |OVP_DocEnd_BoxAlgorithm_GDFFileWriter_Settings|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_GDFFileWriter_Setting1|
|
||||
Name of the GDF file to be written.
|
||||
* |OVP_DocEnd_BoxAlgorithm_GDFFileWriter_Setting1|
|
||||
__________________________________________________________________
|
||||
|
||||
Examples description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_GDFFileWriter_Examples|
|
||||
If you want to write the GDF file in your /tmp directory, you can configure the plugin like that :
|
||||
|
||||
Filename :
|
||||
\code
|
||||
/tmp/myGDFFile.gdf
|
||||
\endcode
|
||||
* |OVP_DocEnd_BoxAlgorithm_GDFFileWriter_Examples|
|
||||
|
||||
__________________________________________________________________
|
||||
|
||||
Miscellaneous description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_GDFFileWriter_Miscellaneous|
|
||||
The only output format is GDF1.
|
||||
|
||||
The experiment information such as the subject name and sex may not be parsed correctly by other programs.
|
||||
* |OVP_DocEnd_BoxAlgorithm_GDFFileWriter_Miscellaneous|
|
||||
*/
|
||||
+96
@@ -0,0 +1,96 @@
|
||||
/**
|
||||
* \page BoxAlgorithm_SignalConcatenation Signal Stream Concatenation
|
||||
__________________________________________________________________
|
||||
|
||||
Detailed description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_SignalConcatenation_Description|
|
||||
The input streams must share the same characteristics : sampling frequency, number of channels, sample count per block.
|
||||
User can specify a time-out value beyond which a stream is considered as finished if no samples are received.
|
||||
If user wants a specific part of a given stream, he can specify a stimulation used as end-of-stream trigger.
|
||||
|
||||
The status stimulation output deliver the stimulation OVTK_StimulationId_EndOfFile when the concatenation is finished. You can connect this output to a \subpage BoxAlgorithm_PlayerController to script your concatenation easily.
|
||||
* |OVP_DocEnd_BoxAlgorithm_SignalConcatenation_Description|
|
||||
__________________________________________________________________
|
||||
|
||||
Inputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_SignalConcatenation_Inputs|
|
||||
The box has a pair of input (signal, stimulation) per source.
|
||||
* |OVP_DocEnd_BoxAlgorithm_SignalConcatenation_Inputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_SignalConcatenation_Input1|
|
||||
Signal stream from source #1.
|
||||
* |OVP_DocEnd_BoxAlgorithm_SignalConcatenation_Input1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_SignalConcatenation_Input2|
|
||||
Stimulation stream from source #1.
|
||||
* |OVP_DocEnd_BoxAlgorithm_SignalConcatenation_Input2|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_SignalConcatenation_Input3|
|
||||
Signal stream from source #2.
|
||||
* |OVP_DocEnd_BoxAlgorithm_SignalConcatenation_Input3|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_SignalConcatenation_Input4|
|
||||
Stimulation stream from source #2.
|
||||
* |OVP_DocEnd_BoxAlgorithm_SignalConcatenation_Input4|
|
||||
__________________________________________________________________
|
||||
|
||||
Outputs description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_SignalConcatenation_Outputs|
|
||||
* |OVP_DocEnd_BoxAlgorithm_SignalConcatenation_Outputs|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_SignalConcatenation_Output1|
|
||||
Concatenated signal stream.
|
||||
* |OVP_DocEnd_BoxAlgorithm_SignalConcatenation_Output1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_SignalConcatenation_Output2|
|
||||
Concatenated stimulation stream.
|
||||
* |OVP_DocEnd_BoxAlgorithm_SignalConcatenation_Output2|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_SignalConcatenation_Output3|
|
||||
Status stimulation stream (sends OVTK_StimulationId_EndOfFile on success).
|
||||
* |OVP_DocEnd_BoxAlgorithm_SignalConcatenation_Output3|
|
||||
__________________________________________________________________
|
||||
|
||||
Settings description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_SignalConcatenation_Settings|
|
||||
A stimulation setting is added for each input pair.
|
||||
* |OVP_DocEnd_BoxAlgorithm_SignalConcatenation_Settings|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_SignalConcatenation_Setting1|
|
||||
If no samples are received beyond this time-out value, a stream is considered as finished.
|
||||
* |OVP_DocEnd_BoxAlgorithm_SignalConcatenation_Setting1|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_SignalConcatenation_Setting2|
|
||||
Stimulation that triggers the end-of-stream for source #1.
|
||||
* |OVP_DocEnd_BoxAlgorithm_SignalConcatenation_Setting2|
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_SignalConcatenation_Setting3|
|
||||
Stimulation that triggers the end-of-stream for source #2.
|
||||
* |OVP_DocEnd_BoxAlgorithm_SignalConcatenation_Setting3|
|
||||
__________________________________________________________________
|
||||
|
||||
Examples description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_SignalConcatenation_Examples|
|
||||
This box is mainly designed to concatenate multiple signal files.
|
||||
For example, you have 10 sessions of training and you want to train a classifier on the whole set of data.
|
||||
You can use the Signal Stream Concatenation to produce one EEG file containing the 10 sessions,
|
||||
and then feed a \ref Doc_BoxAlgorithm_ClassifierTrainer box with it.
|
||||
* |OVP_DocEnd_BoxAlgorithm_SignalConcatenation_Examples|
|
||||
__________________________________________________________________
|
||||
|
||||
Miscellaneous description
|
||||
__________________________________________________________________
|
||||
|
||||
* |OVP_DocBegin_BoxAlgorithm_SignalConcatenation_Miscellaneous|
|
||||
* |OVP_DocEnd_BoxAlgorithm_SignalConcatenation_Miscellaneous|
|
||||
*/
|
||||
+244
@@ -0,0 +1,244 @@
|
||||
[
|
||||
[ "O1" "O2" "T5" "P7" "P3" "Pz" "P4" "T6" "P8" "T3" "T7" "C3" "Cz" "C4" "T4" "T8" "F7" "F3" "Fz" "F4" "F8" "Fp1" "Fp2" "P5" "P1" "P2" "P6" "C5" "C1" "C2" "C6" "F5" "F1" "F2" "F6" "M1" "M2" "Oz" "POz" "CPz" "FCz" "FFz" "Fpz" "FC1" "FC2" "CP1" "CP2" "FC3" "FC4" "CP3" "CP4" "FT3" "FT4" "TP3" "TP4" "P'1" "P'2" "Nz" "I1" "Iz" "I2" "FF3" "TP5" "OT5" "IT1" "IT2" "IP1" "IPz" "IP2" "M'1" "M'2" "TP7" "TP8" "Nez" "F3z" "F4z" "AF3" "AF4" "FC5" "FC6" ]
|
||||
["x" "y" "z" ]
|
||||
]
|
||||
[
|
||||
[-0.309017 -0.951057 4.48966e-011 ]
|
||||
]
|
||||
[
|
||||
[0.309017 -0.951057 4.48966e-011 ]
|
||||
]
|
||||
[
|
||||
[-0.809017 -0.587785 4.48966e-011 ]
|
||||
]
|
||||
[
|
||||
[-0.809017 -0.587785 4.48966e-011 ]
|
||||
]
|
||||
[
|
||||
[-0.651157 -0.609342 0.452435 ]
|
||||
]
|
||||
[
|
||||
[-9.52401e-011 -0.707107 0.707107 ]
|
||||
]
|
||||
[
|
||||
[0.651157 -0.609342 0.452435 ]
|
||||
]
|
||||
[
|
||||
[0.809017 -0.587785 4.48966e-011 ]
|
||||
]
|
||||
[
|
||||
[0.809017 -0.587785 4.48966e-011 ]
|
||||
]
|
||||
[
|
||||
[-1 8.97932e-011 4.48966e-011 ]
|
||||
]
|
||||
[
|
||||
[-1 8.97932e-011 4.48966e-011 ]
|
||||
]
|
||||
[
|
||||
[-0.707107 6.34934e-011 0.707107 ]
|
||||
]
|
||||
[
|
||||
[0 0 1 ]
|
||||
]
|
||||
[
|
||||
[0.707107 0 0.707107 ]
|
||||
]
|
||||
[
|
||||
[1 0 4.48966e-011 ]
|
||||
]
|
||||
[
|
||||
[1 0 4.48966e-011 ]
|
||||
]
|
||||
[
|
||||
[-0.809017 0.587785 4.48966e-011 ]
|
||||
]
|
||||
[
|
||||
[-0.651157 0.609342 0.452435 ]
|
||||
]
|
||||
[
|
||||
[3.17467e-011 0.707107 0.707107 ]
|
||||
]
|
||||
[
|
||||
[0.651157 0.609342 0.452435 ]
|
||||
]
|
||||
[
|
||||
[0.809017 0.587785 4.48966e-011 ]
|
||||
]
|
||||
[
|
||||
[-0.309017 0.951057 4.48966e-011 ]
|
||||
]
|
||||
[
|
||||
[0.309017 0.951057 4.48966e-011 ]
|
||||
]
|
||||
[
|
||||
[-0.752459 -0.615881 0.233445 ]
|
||||
]
|
||||
[
|
||||
[-0.347712 -0.703541 0.619779 ]
|
||||
]
|
||||
[
|
||||
[0.347712 -0.703541 0.619779 ]
|
||||
]
|
||||
[
|
||||
[0.752459 -0.615881 0.233445 ]
|
||||
]
|
||||
[
|
||||
[-0.92388 8.29581e-011 0.382683 ]
|
||||
]
|
||||
[
|
||||
[-0.382683 3.43624e-011 0.92388 ]
|
||||
]
|
||||
[
|
||||
[0.382683 0 0.92388 ]
|
||||
]
|
||||
[
|
||||
[0.92388 0 0.382683 ]
|
||||
]
|
||||
[
|
||||
[-0.752459 0.615881 0.233445 ]
|
||||
]
|
||||
[
|
||||
[-0.347712 0.703541 0.619779 ]
|
||||
]
|
||||
[
|
||||
[0.347712 0.703541 0.619779 ]
|
||||
]
|
||||
[
|
||||
[0.752459 0.615881 0.233445 ]
|
||||
]
|
||||
[
|
||||
[-0.704166 -0.504133 -0.5 ]
|
||||
]
|
||||
[
|
||||
[0.704166 -0.504133 -0.5 ]
|
||||
]
|
||||
[
|
||||
[-1.3469e-010 -1 4.48966e-011 ]
|
||||
]
|
||||
[
|
||||
[-1.24437e-010 -0.92388 0.382683 ]
|
||||
]
|
||||
[
|
||||
[-5.15435e-011 -0.382683 0.92388 ]
|
||||
]
|
||||
[
|
||||
[1.71812e-011 0.382683 0.92388 ]
|
||||
]
|
||||
[
|
||||
[4.1479e-011 0.92388 0.382683 ]
|
||||
]
|
||||
[
|
||||
[4.48966e-011 1 4.48966e-011 ]
|
||||
]
|
||||
[
|
||||
[-0.381509 0.35701 0.85264 ]
|
||||
]
|
||||
[
|
||||
[0.381509 0.35701 0.85264 ]
|
||||
]
|
||||
[
|
||||
[-0.381509 -0.35701 0.85264 ]
|
||||
]
|
||||
[
|
||||
[0.381509 -0.35701 0.85264 ]
|
||||
]
|
||||
[
|
||||
[-0.719739 0.323464 0.614285 ]
|
||||
]
|
||||
[
|
||||
[0.719739 0.323464 0.614285 ]
|
||||
]
|
||||
[
|
||||
[-0.719739 -0.323464 0.614285 ]
|
||||
]
|
||||
[
|
||||
[0.719739 -0.323464 0.614285 ]
|
||||
]
|
||||
[
|
||||
[-0.908423 0.336036 0.24869 ]
|
||||
]
|
||||
[
|
||||
[0.908423 0.336036 0.24869 ]
|
||||
]
|
||||
[
|
||||
[-0.908423 -0.336036 0.24869 ]
|
||||
]
|
||||
[
|
||||
[0.908423 -0.336036 0.24869 ]
|
||||
]
|
||||
[
|
||||
[-0.378421 -0.691201 0.615661 ]
|
||||
]
|
||||
[
|
||||
[0.378421 -0.691201 0.615661 ]
|
||||
]
|
||||
[
|
||||
[4.1479e-011 0.92388 -0.382683 ]
|
||||
]
|
||||
[
|
||||
[-0.504133 -0.704166 -0.5 ]
|
||||
]
|
||||
[
|
||||
[-1.24437e-010 -0.92388 -0.382683 ]
|
||||
]
|
||||
[
|
||||
[0.504133 -0.704166 -0.5 ]
|
||||
]
|
||||
[
|
||||
[-0.391219 0.38311 0.836764 ]
|
||||
]
|
||||
[
|
||||
[-0.854997 -0.331631 0.398749 ]
|
||||
]
|
||||
[
|
||||
[-0.46117 -0.860079 0.218143 ]
|
||||
]
|
||||
[
|
||||
[-0.46117 -0.860079 -0.218143 ]
|
||||
]
|
||||
[
|
||||
[0.46117 -0.860079 -0.218143 ]
|
||||
]
|
||||
[
|
||||
[-0.390388 -0.919697 0.0418757 ]
|
||||
]
|
||||
[
|
||||
[-1.32125e-010 -0.980955 0.194234 ]
|
||||
]
|
||||
[
|
||||
[0.390388 -0.919697 0.0418757 ]
|
||||
]
|
||||
[
|
||||
[-0.887454 -0.376702 -0.265556 ]
|
||||
]
|
||||
[
|
||||
[0.887454 -0.376702 -0.265556 ]
|
||||
]
|
||||
[
|
||||
[-0.951057 -0.309017 4.48966e-011 ]
|
||||
]
|
||||
[
|
||||
[0.951057 -0.309017 4.48966e-011 ]
|
||||
]
|
||||
[
|
||||
[3.96045e-011 0.882127 -0.471012 ]
|
||||
]
|
||||
[
|
||||
[-0.349374 0.823073 0.447759 ]
|
||||
]
|
||||
[
|
||||
[0.349374 0.823073 0.447759 ]
|
||||
]
|
||||
[
|
||||
[-0.37559 0.88485 0.27564 ]
|
||||
]
|
||||
[
|
||||
[0.37559 0.88485 0.27564 ]
|
||||
]
|
||||
[
|
||||
[-0.87203 0.33729 0.35467 ]
|
||||
]
|
||||
[
|
||||
[0.87203 0.33729 0.35467 ]
|
||||
]
|
||||
+232
@@ -0,0 +1,232 @@
|
||||
[
|
||||
[ "O1" "O2" "T5" "P7" "P3" "Pz" "P4" "T6" "P8" "T3" "T7" "C3" "Cz" "C4" "T4" "T8" "F7" "F3" "Fz" "F4" "F8" "Fp1" "Fp2" "P5" "P1" "P2" "P6" "C5" "C1" "C2" "C6" "F5" "F1" "F2" "F6" "M1" "M2" "Oz" "POz" "CPz" "FCz" "FFz" "Fpz" "FC1" "FC2" "CP1" "CP2" "FC3" "FC4" "CP3" "CP4" "FT3" "FT4" "TP3" "TP4" "P'1" "P'2" "Nz" "I1" "Iz" "I2" "FF3" "TP5" "OT5" "IT1" "IT2" "IP1" "IPz" "IP2" "M'1" "M'2" "TP7" "TP8" "Nez" "F3z" "F4z" ]
|
||||
["theta" "phi" ]
|
||||
]
|
||||
[
|
||||
[90 252 ]
|
||||
]
|
||||
[
|
||||
[90 288 ]
|
||||
]
|
||||
[
|
||||
[90 216 ]
|
||||
]
|
||||
[
|
||||
[63.1 223.1 ]
|
||||
]
|
||||
[
|
||||
[63.1 223.1 ]
|
||||
]
|
||||
[
|
||||
[45 270 ]
|
||||
]
|
||||
[
|
||||
[63.1 316.9 ]
|
||||
]
|
||||
[
|
||||
[90 324 ]
|
||||
]
|
||||
[
|
||||
[90 324 ]
|
||||
]
|
||||
[
|
||||
[90 180 ]
|
||||
]
|
||||
[
|
||||
[90 180 ]
|
||||
]
|
||||
[
|
||||
[45 180 ]
|
||||
]
|
||||
[
|
||||
[0 0 ]
|
||||
]
|
||||
[
|
||||
[45 0 ]
|
||||
]
|
||||
[
|
||||
[90 0 ]
|
||||
]
|
||||
[
|
||||
[90 0 ]
|
||||
]
|
||||
[
|
||||
[90 144 ]
|
||||
]
|
||||
[
|
||||
[63.1 136.9 ]
|
||||
]
|
||||
[
|
||||
[45 90 ]
|
||||
]
|
||||
[
|
||||
[63.1 43.1 ]
|
||||
]
|
||||
[
|
||||
[90 36 ]
|
||||
]
|
||||
[
|
||||
[90 108 ]
|
||||
]
|
||||
[
|
||||
[90 72 ]
|
||||
]
|
||||
[
|
||||
[76.5 219.3 ]
|
||||
]
|
||||
[
|
||||
[51.7 243.7 ]
|
||||
]
|
||||
[
|
||||
[51.7 296.3 ]
|
||||
]
|
||||
[
|
||||
[76.5 320.7 ]
|
||||
]
|
||||
[
|
||||
[67.5 180 ]
|
||||
]
|
||||
[
|
||||
[22.5 180 ]
|
||||
]
|
||||
[
|
||||
[22.5 0 ]
|
||||
]
|
||||
[
|
||||
[67.5 0 ]
|
||||
]
|
||||
[
|
||||
[76.5 140.7 ]
|
||||
]
|
||||
[
|
||||
[51.7 116.3 ]
|
||||
]
|
||||
[
|
||||
[51.7 63.7 ]
|
||||
]
|
||||
[
|
||||
[76.5 39.3 ]
|
||||
]
|
||||
[
|
||||
[120 215.6 ]
|
||||
]
|
||||
[
|
||||
[120 324.4 ]
|
||||
]
|
||||
[
|
||||
[90 270 ]
|
||||
]
|
||||
[
|
||||
[67.5 270 ]
|
||||
]
|
||||
[
|
||||
[22.5 270 ]
|
||||
]
|
||||
[
|
||||
[22.5 90 ]
|
||||
]
|
||||
[
|
||||
[67.5 90 ]
|
||||
]
|
||||
[
|
||||
[90 90 ]
|
||||
]
|
||||
[
|
||||
[31.5 136.9 ]
|
||||
]
|
||||
[
|
||||
[31.5 43.1 ]
|
||||
]
|
||||
[
|
||||
[31.5 223.1 ]
|
||||
]
|
||||
[
|
||||
[31.5 316.9 ]
|
||||
]
|
||||
[
|
||||
[52.1 155.8 ]
|
||||
]
|
||||
[
|
||||
[52.1 24.2 ]
|
||||
]
|
||||
[
|
||||
[52.1 204.2 ]
|
||||
]
|
||||
[
|
||||
[52.1 335.8 ]
|
||||
]
|
||||
[
|
||||
[75.6 159.7 ]
|
||||
]
|
||||
[
|
||||
[75.6 20.3 ]
|
||||
]
|
||||
[
|
||||
[75.6 200.3 ]
|
||||
]
|
||||
[
|
||||
[75.6 339.7 ]
|
||||
]
|
||||
[
|
||||
[52 241.3 ]
|
||||
]
|
||||
[
|
||||
[52 298.7 ]
|
||||
]
|
||||
[
|
||||
[112.5 90 ]
|
||||
]
|
||||
[
|
||||
[120 234.4 ]
|
||||
]
|
||||
[
|
||||
[112.5 270 ]
|
||||
]
|
||||
[
|
||||
[120 305.6 ]
|
||||
]
|
||||
[
|
||||
[33.2 135.6 ]
|
||||
]
|
||||
[
|
||||
[66.5 201.2 ]
|
||||
]
|
||||
[
|
||||
[77.4 241.8 ]
|
||||
]
|
||||
[
|
||||
[102.6 241.8 ]
|
||||
]
|
||||
[
|
||||
[102.6 298.2 ]
|
||||
]
|
||||
[
|
||||
[87.6 247 ]
|
||||
]
|
||||
[
|
||||
[78.8 270 ]
|
||||
]
|
||||
[
|
||||
[87.6 293 ]
|
||||
]
|
||||
[
|
||||
[105.4 203 ]
|
||||
]
|
||||
[
|
||||
[105.4 337 ]
|
||||
]
|
||||
[
|
||||
[90 198 ]
|
||||
]
|
||||
[
|
||||
[90 342 ]
|
||||
]
|
||||
[
|
||||
[118.1 90 ]
|
||||
]
|
||||
[
|
||||
[63.4 113 ]
|
||||
]
|
||||
[
|
||||
[63.4 67 ]
|
||||
]
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
+440
@@ -0,0 +1,440 @@
|
||||
#include "ovpCAlgorithmBrainampFileReader.h"
|
||||
|
||||
#include <system/ovCMemory.h>
|
||||
#include <sstream>
|
||||
#include <cstdlib>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace FileIO {
|
||||
|
||||
//
|
||||
bool CAlgorithmBrainampFileReader::initialize()
|
||||
{
|
||||
ip_filename.initialize(getInputParameter(OVP_Algorithm_BrainampFileReader_InputParameterId_Filename));
|
||||
ip_epochDuration.initialize(getInputParameter(OVP_Algorithm_BrainampFileReader_InputParameterId_EpochDuration));
|
||||
ip_seekTime.initialize(getInputParameter(OVP_Algorithm_BrainampFileReader_InputParameterId_SeekTime));
|
||||
ip_convertStimuli.initialize(getInputParameter(OVP_Algorithm_BrainampFileReader_InputParameterId_ConvertStimuli));
|
||||
|
||||
op_startTime.initialize(getOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_CurrentStartTime));
|
||||
op_endTime.initialize(getOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_CurrentEndTime));
|
||||
op_sampling.initialize(getOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_Sampling));
|
||||
op_signalMatrix.initialize(getOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_SignalMatrix));
|
||||
op_stimulations.initialize(getOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_Stimulations));
|
||||
|
||||
// Default value
|
||||
ip_convertStimuli = true;
|
||||
|
||||
m_buffer = nullptr;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CAlgorithmBrainampFileReader::uninitialize()
|
||||
{
|
||||
if (m_dataFile.is_open()) { m_dataFile.close(); }
|
||||
|
||||
op_stimulations.uninitialize();
|
||||
op_signalMatrix.uninitialize();
|
||||
op_sampling.uninitialize();
|
||||
op_endTime.uninitialize();
|
||||
op_startTime.uninitialize();
|
||||
|
||||
ip_convertStimuli.uninitialize();
|
||||
ip_seekTime.uninitialize();
|
||||
ip_epochDuration.uninitialize();
|
||||
ip_filename.uninitialize();
|
||||
|
||||
delete [] m_buffer;
|
||||
m_buffer = nullptr;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CAlgorithmBrainampFileReader::process()
|
||||
{
|
||||
if (this->isInputTriggerActive(OVP_Algorithm_BrainampFileReader_InputTriggerId_Open))
|
||||
{
|
||||
std::string markerFilename;
|
||||
std::string dataFilename;
|
||||
|
||||
m_binaryFormat = EBinaryFormat::Integer16;
|
||||
m_nChannel = 0;
|
||||
m_startSampleIdx = 0;
|
||||
m_endSampleIdx = 0;
|
||||
m_sampleCountPerBuffer = 0;
|
||||
m_channelScales.clear();
|
||||
delete [] m_buffer;
|
||||
m_buffer = nullptr;
|
||||
m_endianness = EEndianness::LittleEndian;
|
||||
|
||||
m_headerFile.open(ip_filename->toASCIIString(), std::ios::binary);
|
||||
if (!m_headerFile.good())
|
||||
{
|
||||
getLogManager() << Kernel::LogLevel_Error << "Could not open file [" << *ip_filename << "]\n";
|
||||
return false;
|
||||
}
|
||||
getLogManager() << Kernel::LogLevel_Trace << "Opening " << *ip_filename << " succeeded\n";
|
||||
|
||||
op_signalMatrix->setDimensionCount(2);
|
||||
|
||||
size_t channelIdx = 0;
|
||||
EStatus status = EStatus::Nothing;
|
||||
do
|
||||
{
|
||||
std::string what;
|
||||
std::getline(m_headerFile, what, '\n');
|
||||
getLogManager() << Kernel::LogLevel_Debug << what << "\n";
|
||||
|
||||
// optionally removes ending carriage return for windows / linux compatibility
|
||||
if (what.length() != 0) { if (what[what.length() - 1] == '\r') { what.erase(what.length() - 1, 1); } }
|
||||
|
||||
if (what.length() != 0)
|
||||
{
|
||||
std::string::size_type equalPos;
|
||||
if (what[0] == ';') // comments
|
||||
{ }
|
||||
else if (what.length() > 2 && what[0] == '[') // section start
|
||||
{
|
||||
std::string name;
|
||||
name.assign(what, 1, what.length() - 2);
|
||||
if (name == "Common Infos")
|
||||
{
|
||||
getLogManager() << Kernel::LogLevel_Trace << "Found section " << what << "\n";
|
||||
status = EStatus::CommonInfos;
|
||||
}
|
||||
else if (name == "Binary Infos")
|
||||
{
|
||||
getLogManager() << Kernel::LogLevel_Trace << "Found section " << what << "\n";
|
||||
status = EStatus::BinrayInfos;
|
||||
}
|
||||
else if (name == "Channel Infos")
|
||||
{
|
||||
getLogManager() << Kernel::LogLevel_Trace << "Found section " << what << "\n";
|
||||
status = EStatus::ChannelInfos;
|
||||
}
|
||||
else if (name == "Comment")
|
||||
{
|
||||
getLogManager() << Kernel::LogLevel_Trace << "Found section " << what << "\n";
|
||||
status = EStatus::Comment;
|
||||
}
|
||||
else
|
||||
{
|
||||
getLogManager() << Kernel::LogLevel_Warning << "{" << what <<
|
||||
"} looked like a new section in the header file but is not know of this parser. Therefore anything after this line will be skipped until a new section is found\n";
|
||||
status = EStatus::Nothing;
|
||||
}
|
||||
}
|
||||
else if ((equalPos = what.find('=')) != std::string::npos && status != EStatus::Comment) // Option value
|
||||
{
|
||||
std::string name;
|
||||
std::string value;
|
||||
name.assign(what, 0, equalPos);
|
||||
value.assign(what, equalPos + 1, what.length() - equalPos - 1);
|
||||
|
||||
getLogManager() << Kernel::LogLevel_Trace << "| Found option " << name << " with value " << CString(
|
||||
value.c_str()) << "\n";
|
||||
|
||||
switch (status)
|
||||
{
|
||||
case EStatus::CommonInfos:
|
||||
if (name == "DataFormat")
|
||||
{
|
||||
if (value != "BINARY") { getLogManager() << Kernel::LogLevel_ImportantWarning << "Only binary data is supported\n"; }
|
||||
}
|
||||
else if (name == "DataOrientation")
|
||||
{
|
||||
if (value != "MULTIPLEXED") { getLogManager() << Kernel::LogLevel_ImportantWarning << "Only multiplexed data is supported\n"; }
|
||||
}
|
||||
else if (name == "DataType")
|
||||
{
|
||||
if (value != "TIMEDOMAIN") { getLogManager() << Kernel::LogLevel_ImportantWarning << "Only time domain data is supported\n"; }
|
||||
}
|
||||
else if (name == "Codepage")
|
||||
{
|
||||
if (value != "ANSI")
|
||||
{
|
||||
getLogManager() << Kernel::LogLevel_Warning << "Header specifies code page as " << value
|
||||
<< " but it will be forced back to " << CString("ANSI") << "\n";
|
||||
}
|
||||
}
|
||||
else if (name == "DataFile") { dataFilename = value; }
|
||||
else if (name == "MarkerFile") { markerFilename = value; }
|
||||
else if (name == "NumberOfChannels")
|
||||
{
|
||||
m_nChannel = atoi(value.c_str());
|
||||
m_channelScales.clear();
|
||||
m_channelScales.resize(m_nChannel, 1);
|
||||
op_signalMatrix->setDimensionSize(0, m_nChannel);
|
||||
}
|
||||
else if (name == "SamplingInterval")
|
||||
{
|
||||
double samplingInterval = atof(value.c_str());
|
||||
|
||||
op_sampling = uint64_t(0.5 + 1000000.0 / samplingInterval); // +0.5 for rounding
|
||||
|
||||
m_sampleCountPerBuffer = int64_t(ip_epochDuration * op_sampling); // $$$ Casted in (int64_t) because of Ubuntu 7.10 crash !
|
||||
op_signalMatrix->setDimensionSize(1, uint32_t(m_sampleCountPerBuffer));
|
||||
|
||||
// TODO warn if approximated sampling rate
|
||||
getLogManager() << Kernel::LogLevel_Trace << "| -> Calculated sampling frequency " << op_sampling << "Hz\n";
|
||||
}
|
||||
else { getLogManager() << Kernel::LogLevel_Warning << "Skipped option " << name << " with value " << value << "\n"; }
|
||||
break;
|
||||
|
||||
case EStatus::BinrayInfos:
|
||||
if (name == "BinaryFormat")
|
||||
{
|
||||
if (value == "INT_16") { m_binaryFormat = EBinaryFormat::Integer16; }
|
||||
else if (value == "UINT_16") { m_binaryFormat = EBinaryFormat::UnsignedInteger16; }
|
||||
else if (value == "FLOAT_32" || value == "IEEE_FLOAT_32") { m_binaryFormat = EBinaryFormat::Float32; }
|
||||
else
|
||||
{
|
||||
m_binaryFormat = EBinaryFormat::Integer16;
|
||||
getLogManager() << Kernel::LogLevel_ImportantWarning << "Unsupported binary format option value \""
|
||||
<< value << "\"... Switched back to 16 bits integer (default)\n";
|
||||
}
|
||||
}
|
||||
else if (name == "UseBigEndianOrder")
|
||||
{
|
||||
if (value == "YES") { m_endianness = EEndianness::BigEndian; }
|
||||
else if (value == "NO") { m_endianness = EEndianness::LittleEndian; }
|
||||
else
|
||||
{
|
||||
m_endianness = EEndianness::LittleEndian;
|
||||
getLogManager() << Kernel::LogLevel_ImportantWarning << "Unsupported use big endian order option value \""
|
||||
<< value << "\"... Switched back to little endian (default)\n";
|
||||
}
|
||||
}
|
||||
else { getLogManager() << Kernel::LogLevel_Warning << "Skipped option " << name << " with value " << value << "\n"; }
|
||||
break;
|
||||
|
||||
case EStatus::ChannelInfos:
|
||||
{
|
||||
std::stringstream ss(value);
|
||||
std::string channelName, referenceChannelName, resolutionInUnit, unitName;
|
||||
|
||||
std::getline(ss, channelName, ',');
|
||||
std::getline(ss, referenceChannelName, ',');
|
||||
std::getline(ss, resolutionInUnit, ',');
|
||||
std::getline(ss, unitName, ',');
|
||||
|
||||
op_signalMatrix->setDimensionLabel(0, channelIdx, channelName.c_str());
|
||||
m_channelScales[channelIdx] = atof(resolutionInUnit.c_str());
|
||||
channelIdx++;
|
||||
}
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} while (m_headerFile.good());
|
||||
|
||||
// Changing file location
|
||||
std::string fullPath = ip_filename->toASCIIString();
|
||||
std::string path;
|
||||
std::string::size_type slashPos = fullPath.rfind('/');
|
||||
if (slashPos != std::string::npos)
|
||||
{
|
||||
path.assign(fullPath, 0, slashPos + 1);
|
||||
markerFilename = path + markerFilename;
|
||||
dataFilename = path + dataFilename;
|
||||
}
|
||||
|
||||
// Opens data file
|
||||
m_dataFile.open(dataFilename.c_str(), std::ios::binary);
|
||||
if (!m_dataFile.good()) { getLogManager() << Kernel::LogLevel_Error << "Could not open file [" << dataFilename << "]\n"; }
|
||||
else { getLogManager() << Kernel::LogLevel_Trace << "Opening " << dataFilename << " succeeded\n"; }
|
||||
|
||||
// Opens marker file
|
||||
m_markerFile.open(markerFilename.c_str(), std::ios::binary);
|
||||
if (!m_markerFile.good()) { getLogManager() << Kernel::LogLevel_Error << "Could not open file [" << markerFilename << "]\n"; }
|
||||
else
|
||||
{
|
||||
getLogManager() << Kernel::LogLevel_Trace << "Opening " << markerFilename << " succeeded\n";
|
||||
|
||||
status = EStatus::Nothing;
|
||||
do
|
||||
{
|
||||
std::string what;
|
||||
std::getline(m_markerFile, what, '\n');
|
||||
getLogManager() << Kernel::LogLevel_Debug << what << "\n";
|
||||
|
||||
// optionally removes ending carriage return for windows / linux compatibility
|
||||
if (what.length() != 0) { if (what[what.length() - 1] == '\r') { what.erase(what.length() - 1, 1); } }
|
||||
|
||||
if (what.length() != 0)
|
||||
{
|
||||
std::string::size_type equalPos;
|
||||
if (what[0] == ';') // comments
|
||||
{ }
|
||||
else if (what.length() > 2 && what[0] == '[') // section start
|
||||
{
|
||||
std::string name;
|
||||
name.assign(what, 1, what.length() - 2);
|
||||
if (name == "Common Infos")
|
||||
{
|
||||
getLogManager() << Kernel::LogLevel_Trace << "Found section " << what << "\n";
|
||||
status = EStatus::CommonInfos;
|
||||
}
|
||||
else if (name == "Marker Infos")
|
||||
{
|
||||
getLogManager() << Kernel::LogLevel_Trace << "Found section " << what << "\n";
|
||||
status = EStatus::MarkerInfos;
|
||||
}
|
||||
else
|
||||
{
|
||||
getLogManager() << Kernel::LogLevel_Warning << "{" << what <<
|
||||
"} looked like a new section in the marker file but is not know of this parser. Therefore anything after this line will be skipped until a new section is found\n";
|
||||
status = EStatus::Nothing;
|
||||
}
|
||||
}
|
||||
else if ((equalPos = what.find('=')) != std::string::npos && status != EStatus::Comment) // Option value
|
||||
{
|
||||
std::string name, value;
|
||||
name.assign(what, 0, equalPos);
|
||||
value.assign(what, equalPos + 1, what.length() - equalPos - 1);
|
||||
|
||||
getLogManager() << Kernel::LogLevel_Trace << "| Found option " << name << " with value " << value << "\n";
|
||||
|
||||
switch (status)
|
||||
{
|
||||
case EStatus::CommonInfos:
|
||||
break;
|
||||
|
||||
case EStatus::MarkerInfos:
|
||||
{
|
||||
std::stringstream ss(value);
|
||||
std::string type, desc, pos, duration, idx, date;
|
||||
|
||||
std::getline(ss, type, ',');
|
||||
std::getline(ss, desc, ',');
|
||||
std::getline(ss, pos, ',');
|
||||
std::getline(ss, duration, ',');
|
||||
std::getline(ss, idx, ',');
|
||||
std::getline(ss, date, ',');
|
||||
|
||||
getLogManager() << Kernel::LogLevel_Trace << "| -> Found marker " << type << "," << desc << "," << pos << "," << duration << ","
|
||||
<< idx << "," << date << "\n";
|
||||
|
||||
if (type == "Stimulus" && desc.length() > 0)
|
||||
{
|
||||
if (idx != "0")
|
||||
{
|
||||
getLogManager() << Kernel::LogLevel_Warning << "Marker [" << type << ":" << desc <<
|
||||
"] is not marked on channel 0 and OpenViBE only supports global scope stimulations. Therefore this marker will be considered as global\n";
|
||||
}
|
||||
|
||||
uint64_t id;
|
||||
if (desc[0] == 'S') { id = atoi(desc.substr(1, std::string::npos).c_str()); }
|
||||
else { id = atoi(desc.c_str()); }
|
||||
|
||||
if (ip_convertStimuli)
|
||||
{
|
||||
getLogManager() << Kernel::LogLevel_Trace << "Pre-conversion stimulation is " << desc <<
|
||||
" at sample index [" << pos << "]\n";
|
||||
id = OVTK_StimulationId_Label(id);
|
||||
}
|
||||
|
||||
stimulation_t stim;
|
||||
stim.id = id;
|
||||
stim.startIdx = atoi(pos.c_str());
|
||||
stim.duration = atoi(duration.c_str());
|
||||
stim.name = desc;
|
||||
m_stimulations.push_back(stim);
|
||||
|
||||
getLogManager() << Kernel::LogLevel_Trace << "Found stimulation " << stim.id << " at sample index [" << stim.startIdx << ":"
|
||||
<< stim.duration << "]\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
getLogManager() << Kernel::LogLevel_Warning << "Marker [" << type << ":" << desc <<
|
||||
"] is not supported. Therefore it will be ignored\n";
|
||||
}
|
||||
}
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} while (m_markerFile.good());
|
||||
}
|
||||
}
|
||||
|
||||
if (this->isInputTriggerActive(OVP_Algorithm_BrainampFileReader_InputTriggerId_Seek))
|
||||
{
|
||||
getLogManager() << Kernel::LogLevel_ImportantWarning << "This has not been implemented yet\n";
|
||||
}
|
||||
|
||||
if (this->isInputTriggerActive(OVP_Algorithm_BrainampFileReader_InputTriggerId_Next))
|
||||
{
|
||||
double* buffer = op_signalMatrix->getBuffer();
|
||||
|
||||
#define DO_IT_WITH_TYPE(T) \
|
||||
{ \
|
||||
if (!m_buffer) { m_buffer = new uint8_t[op_signalMatrix->getBufferElementCount() * sizeof(T)]; } \
|
||||
uint8_t* fileBuffer = m_buffer; \
|
||||
T tValue; \
|
||||
m_dataFile.read((char*)fileBuffer, op_signalMatrix->getBufferElementCount() * sizeof(T)); \
|
||||
if (m_dataFile.eof()) { memset(fileBuffer, 0, op_signalMatrix->getBufferElementCount() * sizeof(T)); } \
|
||||
bool (*fiileToHost)(const uint8_t*, T*); \
|
||||
if (m_endianness == EEndianness::LittleEndian) { fiileToHost = System::Memory::littleEndianToHost; } \
|
||||
else { fiileToHost = System::Memory::bigEndianToHost; } \
|
||||
for (uint32_t j = 0; j < m_sampleCountPerBuffer; ++j) \
|
||||
{ \
|
||||
for (uint32_t i = 0; i < m_nChannel; i++, fileBuffer += sizeof(T)) \
|
||||
{ \
|
||||
(*fiileToHost)(fileBuffer, &tValue); \
|
||||
buffer[i * m_sampleCountPerBuffer + j] = m_channelScales[i] * tValue; \
|
||||
} \
|
||||
} \
|
||||
}
|
||||
|
||||
if (m_binaryFormat == EBinaryFormat::Integer16) { DO_IT_WITH_TYPE(int16_t); }
|
||||
if (m_binaryFormat == EBinaryFormat::UnsignedInteger16) { DO_IT_WITH_TYPE(uint16_t); }
|
||||
if (m_binaryFormat == EBinaryFormat::Float32) { DO_IT_WITH_TYPE(float); }
|
||||
|
||||
m_startSampleIdx = m_endSampleIdx;
|
||||
m_endSampleIdx += m_sampleCountPerBuffer;
|
||||
|
||||
op_startTime = CTime(op_sampling, m_startSampleIdx).time();
|
||||
op_endTime = CTime(op_sampling, m_endSampleIdx).time();
|
||||
|
||||
// find stimulations in this range
|
||||
uint64_t nStim = 0;
|
||||
for (const auto& s : m_stimulations) { if (m_startSampleIdx <= s.startIdx && s.startIdx < m_endSampleIdx) { nStim++; } }
|
||||
|
||||
op_stimulations->setStimulationCount(nStim);
|
||||
nStim = 0;
|
||||
for (const auto& s : m_stimulations)
|
||||
{
|
||||
if (m_startSampleIdx <= s.startIdx && s.startIdx < m_endSampleIdx)
|
||||
{
|
||||
uint64_t date = CTime(op_sampling, s.startIdx).time();
|
||||
uint64_t duration = CTime(op_sampling, s.duration).time();
|
||||
|
||||
op_stimulations->setStimulationIdentifier(nStim, s.id);
|
||||
op_stimulations->setStimulationDate(nStim, date);
|
||||
op_stimulations->setStimulationDuration(nStim, duration);
|
||||
nStim++;
|
||||
}
|
||||
}
|
||||
|
||||
this->activateOutputTrigger(OVP_Algorithm_BrainampFileReader_OutputTriggerId_DataProduced, true);
|
||||
}
|
||||
|
||||
if (this->isInputTriggerActive(OVP_Algorithm_BrainampFileReader_InputTriggerId_Close))
|
||||
{
|
||||
delete [] m_buffer;
|
||||
m_buffer = nullptr;
|
||||
|
||||
m_markerFile.close();
|
||||
m_dataFile.close();
|
||||
m_headerFile.close();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
} // namespace FileIO
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+111
@@ -0,0 +1,111 @@
|
||||
#pragma once
|
||||
|
||||
#include "../../ovp_defines.h"
|
||||
#include <openvibe/ov_all.h>
|
||||
#include <toolkit/ovtk_all.h>
|
||||
|
||||
#include <fstream>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace FileIO {
|
||||
class CAlgorithmBrainampFileReader final : public Toolkit::TAlgorithm<IAlgorithm>
|
||||
{
|
||||
public:
|
||||
|
||||
void release() override { delete this; }
|
||||
|
||||
bool initialize() override;
|
||||
bool uninitialize() override;
|
||||
bool process() override;
|
||||
|
||||
_IsDerivedFromClass_Final_(Toolkit::TAlgorithm<IAlgorithm>, OVP_ClassId_Algorithm_BrainampFileReader)
|
||||
|
||||
protected:
|
||||
|
||||
enum class EStatus { Nothing, CommonInfos, BinrayInfos, ChannelInfos, MarkerInfos, Comment };
|
||||
|
||||
enum class EBinaryFormat { Integer16, UnsignedInteger16, Float32 };
|
||||
|
||||
enum class EEndianness { LittleEndian, BigEndian };
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint64_t id;
|
||||
uint64_t startIdx;
|
||||
uint64_t duration;
|
||||
std::string name;
|
||||
} stimulation_t;
|
||||
|
||||
Kernel::TParameterHandler<CString*> ip_filename;
|
||||
Kernel::TParameterHandler<double> ip_epochDuration;
|
||||
Kernel::TParameterHandler<uint64_t> ip_seekTime;
|
||||
Kernel::TParameterHandler<bool> ip_convertStimuli;
|
||||
|
||||
Kernel::TParameterHandler<uint64_t> op_startTime;
|
||||
Kernel::TParameterHandler<uint64_t> op_endTime;
|
||||
Kernel::TParameterHandler<uint64_t> op_sampling;
|
||||
Kernel::TParameterHandler<CMatrix*> op_signalMatrix;
|
||||
Kernel::TParameterHandler<IStimulationSet*> op_stimulations;
|
||||
|
||||
CString m_filename;
|
||||
|
||||
EBinaryFormat m_binaryFormat = EBinaryFormat::Integer16;
|
||||
EEndianness m_endianness = EEndianness::LittleEndian;
|
||||
uint32_t m_nChannel = 0;
|
||||
uint64_t m_startSampleIdx = 0;
|
||||
uint64_t m_endSampleIdx = 0;
|
||||
uint64_t m_sampleCountPerBuffer = 0;
|
||||
|
||||
uint8_t* m_buffer = nullptr;
|
||||
std::vector<double> m_channelScales;
|
||||
std::vector<stimulation_t> m_stimulations;
|
||||
|
||||
std::ifstream m_headerFile;
|
||||
std::ifstream m_dataFile;
|
||||
std::ifstream m_markerFile;
|
||||
};
|
||||
|
||||
class CAlgorithmBrainampFileReaderDesc final : public IAlgorithmDesc
|
||||
{
|
||||
public:
|
||||
|
||||
void release() override { }
|
||||
|
||||
CString getName() const override { return CString("Brainamp file reader"); }
|
||||
CString getAuthorName() const override { return CString("Yann Renard"); }
|
||||
CString getAuthorCompanyName() const override { return CString("INRIA/IRISA"); }
|
||||
CString getShortDescription() const override { return CString("Reads input having the BrainAmp file format"); }
|
||||
CString getDetailedDescription() const override { return CString(""); }
|
||||
CString getCategory() const override { return CString("File reading and writing/Brainamp"); }
|
||||
CString getVersion() const override { return CString("1.1"); }
|
||||
|
||||
CIdentifier getCreatedClass() const override { return OVP_ClassId_Algorithm_BrainampFileReader; }
|
||||
IPluginObject* create() override { return new CAlgorithmBrainampFileReader; }
|
||||
|
||||
bool getAlgorithmPrototype(Kernel::IAlgorithmProto& prototype) const override
|
||||
{
|
||||
prototype.addInputParameter(OVP_Algorithm_BrainampFileReader_InputParameterId_Filename, "Filename", Kernel::ParameterType_String);
|
||||
prototype.addInputParameter(OVP_Algorithm_BrainampFileReader_InputParameterId_EpochDuration, "Epoch duration", Kernel::ParameterType_Float);
|
||||
prototype.addInputParameter(OVP_Algorithm_BrainampFileReader_InputParameterId_SeekTime, "Seek time", Kernel::ParameterType_Integer);
|
||||
prototype.addInputParameter(OVP_Algorithm_BrainampFileReader_InputParameterId_ConvertStimuli, "Convert stimuli", Kernel::ParameterType_Boolean);
|
||||
prototype.addOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_CurrentStartTime, "Current start time", Kernel::ParameterType_Integer);
|
||||
prototype.addOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_CurrentEndTime, "Current end time", Kernel::ParameterType_Integer);
|
||||
prototype.addOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_Sampling, "Sampling rate", Kernel::ParameterType_Integer);
|
||||
prototype.addOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_SignalMatrix, "Signal samples", Kernel::ParameterType_Matrix);
|
||||
prototype.addOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_Stimulations, "Stimulations", Kernel::ParameterType_StimulationSet);
|
||||
prototype.addInputTrigger(OVP_Algorithm_BrainampFileReader_InputTriggerId_Open, "Open");
|
||||
prototype.addInputTrigger(OVP_Algorithm_BrainampFileReader_InputTriggerId_Seek, "Seek");
|
||||
prototype.addInputTrigger(OVP_Algorithm_BrainampFileReader_InputTriggerId_Next, "Next");
|
||||
prototype.addInputTrigger(OVP_Algorithm_BrainampFileReader_InputTriggerId_Close, "Close");
|
||||
prototype.addOutputTrigger(OVP_Algorithm_BrainampFileReader_OutputTriggerId_Error, "Error");
|
||||
prototype.addOutputTrigger(OVP_Algorithm_BrainampFileReader_OutputTriggerId_DataProduced, "Data produced");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
_IsDerivedFromClass_Final_(IAlgorithmDesc, OVP_ClassId_Algorithm_BrainampFileReaderDesc)
|
||||
};
|
||||
} // namespace FileIO
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+256
@@ -0,0 +1,256 @@
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <cstdlib>
|
||||
#include <boost/regex.hpp>
|
||||
#include <boost/detail/endian.hpp>
|
||||
|
||||
#include "ovpCBCI2000ReaderHelper.h"
|
||||
|
||||
namespace BCI2000 {
|
||||
|
||||
void CBCI2000ReaderHelper::printInfo(std::ostream& os) const
|
||||
{
|
||||
if (m_good)
|
||||
{
|
||||
os << "version: " << m_bci2000Version << std::endl;
|
||||
os << "header length: " << m_headerLength << std::endl;
|
||||
os << "source channels: " << m_nSrcChannel << std::endl;
|
||||
os << "state vector length: " << m_stateVectorLength << std::endl;
|
||||
os << "data format: " << m_dataFormat << std::endl;
|
||||
os << "samples: " << m_nSamples << std::endl;
|
||||
os << "samples left: " << m_samplesLeft << std::endl;
|
||||
os << "sample size: " << m_sampleSize << std::endl;
|
||||
os << "rate: " << getRate() << std::endl;
|
||||
}
|
||||
else { os << "bad file (unreadable or bad header)" << std::endl; }
|
||||
}
|
||||
|
||||
bool CBCI2000ReaderHelper::parseMeta(OpenViBE::CString& meta)
|
||||
{
|
||||
static const boost::regex RE_META("BCI2000V= ([0-9.]+) HeaderLen= ([0-9]+) SourceCh= ([0-9]+) StateVectorLen(gth)?= ([0-9]+) DataFormat= ([a-z0-9]+)\r?$",
|
||||
boost::regex::perl | boost::regex::icase);
|
||||
static const boost::regex RE_OLD_META("HeaderLen= +([0-9]+) SourceCh= +([0-9]+) StatevectorLen= +([0-9]+)\r$", boost::regex::perl | boost::regex::icase);
|
||||
|
||||
boost::smatch match;
|
||||
|
||||
if (regex_match(std::string(meta), match, RE_META))
|
||||
{
|
||||
m_bci2000Version = float(atof(match.str(1).c_str()));
|
||||
m_headerLength = int(atoi(match.str(2).c_str()));
|
||||
m_nSrcChannel = int(atoi(match.str(3).c_str()));
|
||||
// 4 is dropped (could be used for len/length syntax check)
|
||||
m_stateVectorLength = int(atoi(match.str(5).c_str()));
|
||||
m_dataFormat = match.str(6).c_str();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (regex_match(std::string(meta), match, RE_OLD_META))
|
||||
{
|
||||
m_bci2000Version = 1.0;
|
||||
m_headerLength = int(atoi(match.str(1).c_str()));
|
||||
m_nSrcChannel = int(atoi(match.str(2).c_str()));
|
||||
m_stateVectorLength = int(atoi(match.str(3).c_str()));
|
||||
m_dataFormat = "int16_t";
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << " *** bci2000helper error: cannot parse meta information header" << std::endl;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool CBCI2000ReaderHelper::parseHeader(std::istream& is)
|
||||
{
|
||||
static const boost::regex REGEXP_SECTION("\\[ *(.*[^ ]) *\\].*");
|
||||
static const boost::regex REGEXP_PARAMETER("([^ ]+ [^ ]+ [^ ]+)= (.*)$"); // (section) (type) (name)= (value)
|
||||
static const boost::regex REGEXP_FIELD("([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)$"); // Name Length Value ByteLocation BitLocation
|
||||
std::string section = "NONAME";
|
||||
std::string line;
|
||||
boost::smatch match;
|
||||
std::getline(is, line);
|
||||
while (line.length() > 2)
|
||||
{
|
||||
// is it a section name ?
|
||||
if (regex_match(line, match, REGEXP_SECTION)) { section = match[1]; }
|
||||
else // not section, parse if interesting
|
||||
{
|
||||
if (section == "Parameter Definition")
|
||||
{
|
||||
if (regex_match(line, match, REGEXP_PARAMETER))
|
||||
{
|
||||
m_parameters[match[1].str().c_str()] = match[2].str().c_str();
|
||||
//std::cout << "parameter added : \n\t\t" << match[1].str() << " \n\t\t" << match[2].str() << "\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
// should never happen: malformed file
|
||||
std::cerr << " *** bci2000helper error: cannot parse Parameters" << std::endl;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (section == "State Vector Definition")
|
||||
{
|
||||
if (regex_match(line, match, REGEXP_FIELD))
|
||||
{
|
||||
const int length = atoi(match.str(2).c_str());
|
||||
const int value = atoi(match.str(3).c_str());
|
||||
const int bytePos = atoi(match.str(4).c_str());
|
||||
const int bitPos = atoi(match.str(5).c_str());
|
||||
m_bitfield.addField(bytePos, bitPos, length, match.str(1).c_str(), value);
|
||||
}
|
||||
else
|
||||
{
|
||||
// should never happen: malformed file
|
||||
std::cerr << " *** bci2000helper error: cannot parse Parameters" << std::endl;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
std::getline(is, line);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
float CBCI2000ReaderHelper::getRate() const
|
||||
{
|
||||
// Warning: the SamplingRate field is not clearly defined
|
||||
// in the BCI2000 doc; it could be an int, or a float;
|
||||
// it should be in Section Source, but Source:Garbage:Stuff is possible
|
||||
// in some case, there is a pending "Hz" after the numbers
|
||||
// Conclusion: we should not fix this until it's clear...
|
||||
|
||||
OpenViBE::CString key = "Source int SamplingRate";
|
||||
if (m_parameters.count(key) == 1)
|
||||
{
|
||||
std::istringstream is(m_parameters.find(key)->second.toASCIIString());
|
||||
float rate;
|
||||
is >> rate;
|
||||
return rate;
|
||||
}
|
||||
key = "Source:Signal%20Properties:DataIOFilter int SamplingRate";
|
||||
if (m_parameters.count(key) == 1)
|
||||
{
|
||||
std::istringstream is(m_parameters.find(key)->second.toASCIIString());
|
||||
float rate;
|
||||
is >> rate;
|
||||
return rate;
|
||||
}
|
||||
return -1.0; // not found :-(
|
||||
}
|
||||
|
||||
OpenViBE::CString CBCI2000ReaderHelper::getChannelName(const size_t index) const
|
||||
{
|
||||
// To be checked on the different version of format.
|
||||
|
||||
const OpenViBE::CString key = "Source:Signal%20Properties:DataIOFilter list ChannelNames";
|
||||
if (m_parameters.count(key) == 1)
|
||||
{
|
||||
std::istringstream is(static_cast<const char*>(m_parameters.find(key)->second));
|
||||
std::string token;
|
||||
for (size_t i = 0; i <= index + 1; ++i) //+1 because the channel count is in the parameter on first position (parameter:list)
|
||||
{
|
||||
token.clear();
|
||||
is >> token;
|
||||
}
|
||||
return token.c_str();
|
||||
}
|
||||
|
||||
return ("Channel " + std::to_string(index + 1)).c_str();
|
||||
}
|
||||
|
||||
|
||||
CBCI2000ReaderHelper::CBCI2000ReaderHelper(const char* filename)
|
||||
{
|
||||
m_file.open(filename, std::ios::binary);
|
||||
if (!m_file.good())
|
||||
{
|
||||
m_good = false;
|
||||
return;
|
||||
}
|
||||
|
||||
std::stringbuf buffer;
|
||||
m_file.get(buffer);
|
||||
OpenViBE::CString meta = buffer.str().c_str();
|
||||
|
||||
m_file.seekg(0, std::ios::end);
|
||||
const int fileSize = int(m_file.tellg());
|
||||
m_file.seekg(0, std::ios::beg);
|
||||
|
||||
m_good = parseMeta(meta);
|
||||
if (!m_good) { return; }
|
||||
|
||||
std::map<OpenViBE::CString, int> sizesOfMap;
|
||||
sizesOfMap["float"] = 4;
|
||||
sizesOfMap["int"] = 4;
|
||||
sizesOfMap["int16_t"] = 2;
|
||||
m_nSamples = (fileSize - m_headerLength) / (sizesOfMap[m_dataFormat] * m_nSrcChannel + m_stateVectorLength);
|
||||
m_sampleSize = sizesOfMap[m_dataFormat] * m_nSrcChannel + m_stateVectorLength;
|
||||
m_samplesLeft = m_nSamples;
|
||||
m_good = parseHeader(m_file);
|
||||
}
|
||||
|
||||
|
||||
std::vector<float> CBCI2000ReaderHelper::readSample()
|
||||
{
|
||||
std::vector<float> samples;
|
||||
if (m_samplesLeft < 1)
|
||||
{
|
||||
return samples; // nothing to read, empty vector returned
|
||||
}
|
||||
char* data = new char[m_sampleSize];
|
||||
m_file.read(data, m_sampleSize);
|
||||
float* dataAsFloat = reinterpret_cast<float*>(data);
|
||||
for (int i = 0; i < m_nSrcChannel; ++i) { samples.push_back(dataAsFloat[i]); }
|
||||
delete[] data;
|
||||
m_samplesLeft--;
|
||||
return samples;
|
||||
}
|
||||
|
||||
template <class TFrom, class TTo>
|
||||
int CBCI2000ReaderHelper::readSamplesInternal(TTo* samples, uint32_t* states, int n)
|
||||
{
|
||||
if (n > m_samplesLeft) { n = m_samplesLeft; }
|
||||
if (n < 1) { return 0; }
|
||||
char* data = new char[m_sampleSize * n];
|
||||
m_file.read(data, m_sampleSize * n);
|
||||
for (int i = 0; i < n; ++i)
|
||||
{
|
||||
if (samples != nullptr)
|
||||
{
|
||||
for (int j = 0; j < m_nSrcChannel; ++j)
|
||||
{
|
||||
TFrom sample = *reinterpret_cast<TFrom*>(data + i * m_sampleSize + j * sizeof(TFrom));
|
||||
samples[i * m_nSrcChannel + j] = sample;
|
||||
// check endianess ?
|
||||
}
|
||||
}
|
||||
if (states != nullptr)
|
||||
{
|
||||
unsigned char* state = reinterpret_cast<unsigned char*>(data) + i * m_sampleSize + m_nSrcChannel * sizeof(TFrom);
|
||||
m_bitfield.getFields(state, states + i * m_bitfield.size());
|
||||
}
|
||||
//std::copy(l_pData+i*m_i32SampleSize,l_pData+i*m_i32SampleSize+m_nSrcChannel*sizeof(T),samples+i*m_nSrcChannel);
|
||||
}
|
||||
delete[] data;
|
||||
m_samplesLeft -= n;
|
||||
return n;
|
||||
}
|
||||
|
||||
int CBCI2000ReaderHelper::readSamples(double* samples, uint32_t* states, const int n)
|
||||
{
|
||||
if (m_dataFormat == OpenViBE::CString("float")) { return readSamplesInternal<float, double>(samples, states, n); }
|
||||
#if defined(BOOST_LITTLE_ENDIAN)
|
||||
if (m_dataFormat == OpenViBE::CString("int")) { return readSamplesInternal<int, double>(samples, states, n); }
|
||||
if (m_dataFormat == OpenViBE::CString("int16_t")) { return readSamplesInternal<int16_t, double>(samples, states, n); }
|
||||
#else
|
||||
std::cerr << "*** bci2000helper error: read_samples from int16_t or int is not implemented yet on bigendian machines" << std::endl;
|
||||
exit(EXIT_FAILURE);
|
||||
#endif
|
||||
return -1; // should never happen... TODO: error checking
|
||||
}
|
||||
|
||||
} // namespace BCI2000
|
||||
+70
@@ -0,0 +1,70 @@
|
||||
#pragma once
|
||||
#include <fstream>
|
||||
#include <ostream>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
|
||||
#include "ovpCBitfield.h"
|
||||
|
||||
namespace BCI2000 {
|
||||
/**
|
||||
* \class CBCI2000ReaderHelper
|
||||
* \author Olivier Rochel (INRIA)
|
||||
* \brief BCI2000 file format parser and utilities. Uses the m_oBitfield utility class.
|
||||
**/
|
||||
class CBCI2000ReaderHelper
|
||||
{
|
||||
protected:
|
||||
std::ifstream m_file;
|
||||
|
||||
float m_bci2000Version = 0; // file version.
|
||||
int m_headerLength = 0; // header size (inc. meta)
|
||||
int m_nSrcChannel = 0; // number of channels
|
||||
int m_stateVectorLength = 0; // size of state field
|
||||
OpenViBE::CString m_dataFormat; // data format (float, int16_t...)
|
||||
|
||||
std::vector<OpenViBE::CString> m_channelNames;
|
||||
|
||||
int m_nSamples = 0;
|
||||
int m_sampleSize = 0;
|
||||
int m_samplesLeft = 0;
|
||||
|
||||
bool m_good = false; // m_bGood is true if file open, header looks m_bGood (may
|
||||
// still be truncated or broken in a silly way)
|
||||
|
||||
std::map<OpenViBE::CString, OpenViBE::CString> m_parameters;
|
||||
// state vector
|
||||
CBitfield m_bitfield;
|
||||
// helpers
|
||||
bool parseMeta(OpenViBE::CString& meta);
|
||||
bool parseHeader(std::istream& is);
|
||||
|
||||
private:
|
||||
template <class TFrom, class TTo>
|
||||
int readSamplesInternal(TTo* samples, uint32_t* states, int n);
|
||||
|
||||
public:
|
||||
/**
|
||||
* Constructor from a BCI2000 file.
|
||||
* \param filename BCI2000 file name.
|
||||
**/
|
||||
explicit CBCI2000ReaderHelper(const char* filename);
|
||||
~CBCI2000ReaderHelper() { if (m_file) { m_file.close(); } }
|
||||
|
||||
void printInfo(std::ostream& os) const;
|
||||
float getRate() const;
|
||||
OpenViBE::CString getChannelName(size_t index) const;
|
||||
|
||||
std::vector<float> readSample();
|
||||
int readSamples(double* samples, uint32_t* states, int n);
|
||||
|
||||
// getters
|
||||
int getNbSamples() const { return m_nSamples; }
|
||||
int getSampleSize() const { return m_sampleSize; }
|
||||
int getChannels() const { return m_nSrcChannel; }
|
||||
int getSamplesLeft() const { return m_samplesLeft; }
|
||||
bool isGood() const { return m_good; }
|
||||
size_t getStateVectorSize() const { return m_bitfield.size(); }
|
||||
const OpenViBE::CString& getStateName(const int i) const { return m_bitfield.getFieldName(i); }
|
||||
};
|
||||
} // namespace BCI2000
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
#include "ovpCBitfield.h"
|
||||
|
||||
namespace BCI2000 {
|
||||
|
||||
uint32_t* CBitfield::getFields(unsigned char* data)
|
||||
{
|
||||
const size_t nFields = m_fields.size();
|
||||
uint32_t* fields = new uint32_t[nFields];
|
||||
getFields(data, fields);
|
||||
return fields;
|
||||
}
|
||||
|
||||
void CBitfield::getFields(unsigned char* data, uint32_t* fields)
|
||||
{
|
||||
const size_t nFields = m_fields.size();
|
||||
for (uint32_t i = 0; i < nFields; ++i)
|
||||
{
|
||||
const int space = (m_fields[i].m_Length - 1 + m_fields[i].m_BitPos) / 8 + 1;
|
||||
unsigned char* p = data + m_fields[i].m_BytePos;
|
||||
uint32_t field = (*p) >> m_fields[i].m_BitPos;
|
||||
|
||||
for (uint32_t j = 1; j < uint32_t(space); ++j)
|
||||
{
|
||||
p++;
|
||||
field += uint32_t(*p) << (j * 8 - m_fields[i].m_BitPos);
|
||||
}
|
||||
|
||||
field &= 0xFFFFFFFF >> (32 - m_fields[i].m_Length);
|
||||
fields[i] = field;
|
||||
}
|
||||
}
|
||||
|
||||
bool CBitfield::addField(const int bytePosition, const int bitPosition, const int length, const OpenViBE::CString& name, const int value)
|
||||
{
|
||||
if (length > 32) { return false; } // doc says len is 32 bits max
|
||||
if (bitPosition > 7) { return false; }
|
||||
m_fields.push_back(CField(bytePosition, bitPosition, length, name, value));
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace BCI2000
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
#pragma once
|
||||
|
||||
#include <openvibe/ov_all.h>
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace BCI2000 {
|
||||
class CBitfield
|
||||
{
|
||||
protected:
|
||||
class CField
|
||||
{
|
||||
public:
|
||||
int m_BytePos = 0; // starting byte
|
||||
int m_BitPos = 0; // starting bit within starting byte
|
||||
int m_Length = 0; // field length (in bits)
|
||||
OpenViBE::CString m_Name;
|
||||
int m_InitialValue = 0; // initial value. Not updated when reading files
|
||||
CField(const int bytePos, const int bitPos, const int length, const OpenViBE::CString& name, const int initialValue)
|
||||
: m_BytePos(bytePos), m_BitPos(bitPos), m_Length(length), m_Name(name), m_InitialValue(initialValue) {}
|
||||
};
|
||||
|
||||
std::vector<CField> m_fields;
|
||||
public:
|
||||
// extract values from compressed data; returned array of size this->size() to
|
||||
// be deleted[] by the user.
|
||||
uint32_t* getFields(unsigned char* data);
|
||||
|
||||
// extract values from compressed data
|
||||
// extractedFields must be allocated and of size this->size()
|
||||
void getFields(unsigned char* data, uint32_t* fields);
|
||||
|
||||
// add a new field. Returns false when invalid paramaters entered, true otherwise.
|
||||
bool addField(const int bytePosition, const int bitPosition, const int length, const OpenViBE::CString& name, const int value);
|
||||
|
||||
// returns the number of m_fields in the structure
|
||||
// (not to be confused with the actual memory footprint)
|
||||
uint32_t size() const { return m_fields.size(); }
|
||||
|
||||
const OpenViBE::CString& getFieldName(const size_t index) const { return m_fields[index].m_Name; }
|
||||
int getInitialValue(const size_t index) const { return m_fields[index].m_InitialValue; }
|
||||
};
|
||||
} // namespace BCI2000
|
||||
+155
@@ -0,0 +1,155 @@
|
||||
#include "ovpCBoxAlgorithmBCI2000Reader.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace FileIO {
|
||||
|
||||
bool CBoxAlgorithmBCI2000Reader::initialize()
|
||||
{
|
||||
const CString filename = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 0);
|
||||
m_helper = new BCI2000::CBCI2000ReaderHelper(filename);
|
||||
if (!m_helper->isGood())
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_ImportantWarning << "Could not open file [" << filename << "]\n";
|
||||
m_helper = nullptr;
|
||||
return false;
|
||||
}
|
||||
std::stringstream ss;
|
||||
m_helper->printInfo(ss);
|
||||
this->getLogManager() << Kernel::LogLevel_Trace << "Metadata from [" << filename << "] :\n" << ss.str() << "\n";
|
||||
|
||||
m_headerSent = false;
|
||||
m_nChannel = m_helper->getChannels();
|
||||
m_nSamplePerBuffer = size_t(uint64_t(FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 1)));
|
||||
m_samplesSent = 0;
|
||||
|
||||
if (m_nSamplePerBuffer == 0)
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Error << "SampleCountPerBuffer is 0, this will not work\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
m_buffer.resize(m_nChannel * m_nSamplePerBuffer);
|
||||
m_states.resize(m_helper->getStateVectorSize() * m_nSamplePerBuffer);
|
||||
m_rate = size_t(m_helper->getRate());
|
||||
if (int(m_rate) == -1)
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Error << "Sampling rate could not be extracted from the file.\n";
|
||||
return false;
|
||||
}
|
||||
if (m_rate == 0)
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Error << "Sampling rate of 0 is not supported.\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
m_signalEncoder.initialize(*this, 0);
|
||||
m_oSignalMatrix = m_signalEncoder.getInputMatrix();
|
||||
m_oSignalMatrix->resize(m_nChannel, m_nSamplePerBuffer);
|
||||
for (size_t i = 0; i < m_nChannel; ++i) { m_oSignalMatrix->setDimensionLabel(0, i, m_helper->getChannelName(i)); }
|
||||
|
||||
m_stateEncoder.initialize(*this, 1);
|
||||
m_oStateMatrix = m_stateEncoder.getInputMatrix();
|
||||
m_oStateMatrix->resize(m_helper->getStateVectorSize(), m_nSamplePerBuffer);
|
||||
for (size_t i = 0; i < m_helper->getStateVectorSize(); ++i) { m_oStateMatrix->setDimensionLabel(0, i, m_helper->getStateName(i)); }
|
||||
m_signalEncoder.getInputSamplingRate() = m_rate;
|
||||
m_stateEncoder.getInputSamplingRate() = m_rate;
|
||||
for (size_t i = 0; i < m_helper->getStateVectorSize(); ++i)
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Trace << "BCI2000 state var " << i << " is : " << m_helper->getStateName(i) << "\n";
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CBoxAlgorithmBCI2000Reader::uninitialize()
|
||||
{
|
||||
delete m_helper;
|
||||
m_buffer.clear();
|
||||
m_states.clear();
|
||||
m_signalEncoder.uninitialize();
|
||||
m_stateEncoder.uninitialize();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CBoxAlgorithmBCI2000Reader::processClock(Kernel::CMessageClock& /*msg*/)
|
||||
{
|
||||
if (m_helper->getSamplesLeft() > 0)
|
||||
{
|
||||
getBoxAlgorithmContext()->markAlgorithmAsReadyToProcess();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
uint64_t CBoxAlgorithmBCI2000Reader::getClockFrequency()
|
||||
{
|
||||
// Intentional parameter swap to get the frequency
|
||||
return CTime(m_nSamplePerBuffer, m_rate).time();
|
||||
}
|
||||
|
||||
void CBoxAlgorithmBCI2000Reader::sendHeader()
|
||||
{
|
||||
m_signalEncoder.encodeHeader();
|
||||
m_stateEncoder.encodeHeader();
|
||||
m_headerSent = true;
|
||||
getDynamicBoxContext().markOutputAsReadyToSend(0, 0, 0);
|
||||
getDynamicBoxContext().markOutputAsReadyToSend(1, 0, 0);
|
||||
}
|
||||
|
||||
bool CBoxAlgorithmBCI2000Reader::process()
|
||||
{
|
||||
if (!m_headerSent) { sendHeader(); }
|
||||
|
||||
//prepare data
|
||||
const int nRead = m_helper->readSamples(m_buffer.data(), m_states.data(), m_nSamplePerBuffer);
|
||||
if (nRead > 0)
|
||||
{
|
||||
// padding. TODO: is it necessary ? or even dangerous ?
|
||||
for (uint32_t i = nRead; i < m_nSamplePerBuffer; ++i) { for (uint32_t j = 0; j < m_nChannel; ++j) { m_buffer[i * m_nChannel + j] = 0.0; } }
|
||||
// transpose (yeah, I know... ugly)
|
||||
for (uint32_t i = 0; i < m_nSamplePerBuffer; ++i)
|
||||
{
|
||||
for (uint32_t j = 0; j < m_nChannel; ++j) { m_oSignalMatrix->getBuffer()[j * m_nSamplePerBuffer + i] = m_buffer[i * m_nChannel + j]; }
|
||||
}
|
||||
m_signalEncoder.encodeBuffer();
|
||||
const uint64_t start = CTime(m_rate, m_samplesSent).time();
|
||||
const uint64_t end = CTime(m_rate, m_samplesSent + m_nSamplePerBuffer).time();
|
||||
m_samplesSent += nRead;
|
||||
if (m_helper->getSamplesLeft() == 0) { m_signalEncoder.encodeEnd(); }
|
||||
|
||||
getDynamicBoxContext().markOutputAsReadyToSend(0, start, end);
|
||||
|
||||
// padding. TODO: is it necessary ? or even dangerous ?
|
||||
for (size_t i = nRead; i < m_nSamplePerBuffer; ++i)
|
||||
{
|
||||
for (size_t j = 0; j < m_helper->getStateVectorSize(); ++j) { m_states[i * m_helper->getStateVectorSize() + j] = 0; }
|
||||
}
|
||||
// transpose (yeah, I know... ugly)
|
||||
for (size_t i = 0; i < m_nSamplePerBuffer; ++i)
|
||||
{
|
||||
for (size_t j = 0; j < m_helper->getStateVectorSize(); ++j)
|
||||
{
|
||||
m_oStateMatrix->getBuffer()[j * m_nSamplePerBuffer + i] = m_states[i * m_helper->getStateVectorSize() + j];
|
||||
}
|
||||
}
|
||||
m_stateEncoder.encodeBuffer();
|
||||
|
||||
if (m_helper->getSamplesLeft() == 0) { m_signalEncoder.encodeEnd(); }
|
||||
|
||||
getDynamicBoxContext().markOutputAsReadyToSend(1, start, end);
|
||||
}
|
||||
else
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Error << "An error occurred while trying to get new samples from file. The file may be corrupted.\n";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
} // namespace FileIO
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+103
@@ -0,0 +1,103 @@
|
||||
#pragma once
|
||||
|
||||
#include "ovpCBCI2000ReaderHelper.h"
|
||||
#include "../../ovp_defines.h"
|
||||
|
||||
#include <openvibe/ov_all.h>
|
||||
#include <toolkit/ovtk_all.h>
|
||||
|
||||
#define OVP_ClassId_BoxAlgorithm_BCI2000Reader OpenViBE::CIdentifier(0xFF78DAF4, 0xC41544B8)
|
||||
#define OVP_ClassId_BoxAlgorithm_BCI2000ReaderDesc OpenViBE::CIdentifier(0xFF53D107, 0xC31144B8)
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace FileIO {
|
||||
/**
|
||||
* \class CBoxAlgorithmBCI2000Reader
|
||||
* \author Olivier Rochel (INRIA)
|
||||
* \date Tue Jun 21 11:11:04 2011
|
||||
* \brief The class CBoxAlgorithmBCI2000Reader describes the box BCI2000 Reader.
|
||||
*
|
||||
*/
|
||||
class CBoxAlgorithmBCI2000Reader final : virtual public Toolkit::TBoxAlgorithm<IBoxAlgorithm>
|
||||
{
|
||||
public:
|
||||
void release() override { delete this; }
|
||||
|
||||
bool initialize() override;
|
||||
bool uninitialize() override;
|
||||
|
||||
bool processClock(Kernel::CMessageClock& msg) override;
|
||||
uint64_t getClockFrequency() override;
|
||||
|
||||
bool process() override;
|
||||
|
||||
_IsDerivedFromClass_Final_(Toolkit::TBoxAlgorithm<IBoxAlgorithm>, OVP_ClassId_BoxAlgorithm_BCI2000Reader)
|
||||
|
||||
protected:
|
||||
|
||||
bool m_headerSent = false;
|
||||
|
||||
Toolkit::TSignalEncoder<CBoxAlgorithmBCI2000Reader> m_signalEncoder;
|
||||
Toolkit::TSignalEncoder<CBoxAlgorithmBCI2000Reader> m_stateEncoder;
|
||||
|
||||
// These 2 were from the time the matrices were built, not given by the encoders.
|
||||
// They could be removed, but for now make the code a bit easier to read - that's
|
||||
// why they're still there.
|
||||
CMatrix* m_oSignalMatrix = nullptr;
|
||||
CMatrix* m_oStateMatrix = nullptr;
|
||||
|
||||
size_t m_rate = 0;
|
||||
size_t m_nChannel = 0;
|
||||
size_t m_nSamplePerBuffer = 0;
|
||||
std::vector<double> m_buffer; // temporary buffer as we'll have to transpose data for signal_out
|
||||
std::vector<uint32_t> m_states; // state variables, to be converted too;
|
||||
uint64_t m_samplesSent = 0;
|
||||
BCI2000::CBCI2000ReaderHelper* m_helper = nullptr;
|
||||
// helpers
|
||||
void sendHeader();
|
||||
};
|
||||
|
||||
/**
|
||||
* \class CBoxAlgorithmBCI2000ReaderDesc
|
||||
* \author Olivier Rochel (INRIA)
|
||||
* \date Tue Jun 21 11:11:04 2011
|
||||
* \brief Descriptor of the box BCI2000 Reader.
|
||||
*
|
||||
*/
|
||||
class CBoxAlgorithmBCI2000ReaderDesc final : virtual public IBoxAlgorithmDesc
|
||||
{
|
||||
public:
|
||||
|
||||
void release() override { }
|
||||
|
||||
CString getName() const override { return CString("BCI2000 File Reader"); }
|
||||
CString getAuthorName() const override { return CString("Olivier Rochel"); }
|
||||
CString getAuthorCompanyName() const override { return CString("INRIA"); }
|
||||
CString getShortDescription() const override { return CString("Reads BCI2000 .dat files."); }
|
||||
|
||||
CString getDetailedDescription() const override { return CString("The box reads EEG/States signals from a BCI2000 file (.dat)"); }
|
||||
|
||||
CString getCategory() const override { return CString("File reading and writing/BCI2000"); }
|
||||
CString getVersion() const override { return CString("1.3"); }
|
||||
CString getStockItemName() const override { return CString("gtk-open"); }
|
||||
|
||||
CIdentifier getCreatedClass() const override { return OVP_ClassId_BoxAlgorithm_BCI2000Reader; }
|
||||
IPluginObject* create() override { return new CBoxAlgorithmBCI2000Reader; }
|
||||
|
||||
bool getBoxPrototype(Kernel::IBoxProto& prototype) const override
|
||||
{
|
||||
prototype.addOutput("Signal",OV_TypeId_Signal);
|
||||
prototype.addOutput("State",OV_TypeId_Signal);
|
||||
prototype.addSetting("File name",OV_TypeId_Filename, "");
|
||||
prototype.addSetting("Samples per buffer",OV_TypeId_Integer, "16");
|
||||
prototype.addFlag(OV_AttributeId_Box_FlagIsUnstable); // meuh non !
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
_IsDerivedFromClass_Final_(IBoxAlgorithmDesc, OVP_ClassId_BoxAlgorithm_BCI2000ReaderDesc)
|
||||
};
|
||||
} // namespace FileIO
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+163
@@ -0,0 +1,163 @@
|
||||
#include "ovpCBoxAlgorithmBrainampFileReader.h"
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace FileIO {
|
||||
|
||||
uint64_t CBoxAlgorithmBrainampFileReader::getClockFrequency()
|
||||
{
|
||||
// Brainamp file reader parameters
|
||||
Kernel::TParameterHandler<CString*> ip_filename(m_reader->getInputParameter(OVP_Algorithm_BrainampFileReader_InputParameterId_Filename));
|
||||
Kernel::TParameterHandler<double> ip_epochDuration(m_reader->getInputParameter(OVP_Algorithm_BrainampFileReader_InputParameterId_EpochDuration));
|
||||
Kernel::TParameterHandler<uint64_t> ip_seekTime(m_reader->getInputParameter(OVP_Algorithm_BrainampFileReader_InputParameterId_SeekTime));
|
||||
Kernel::TParameterHandler<uint64_t> op_startTime(m_reader->getOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_CurrentStartTime));
|
||||
Kernel::TParameterHandler<uint64_t> op_endTime(m_reader->getOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_CurrentEndTime));
|
||||
Kernel::TParameterHandler<uint64_t> op_sampling(m_reader->getOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_Sampling));
|
||||
Kernel::TParameterHandler<CMatrix*> op_signalMatrix(m_reader->getOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_SignalMatrix));
|
||||
Kernel::TParameterHandler<IStimulationSet*> op_stimulations(m_reader->getOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_Stimulations));
|
||||
|
||||
return uint64_t((1LL << 32) / ip_epochDuration);
|
||||
}
|
||||
|
||||
bool CBoxAlgorithmBrainampFileReader::initialize()
|
||||
{
|
||||
// Creates algorithms
|
||||
m_reader = &getAlgorithmManager().
|
||||
getAlgorithm(getAlgorithmManager().createAlgorithm(OVP_ClassId_Algorithm_BrainampFileReader));
|
||||
m_experimentInfoEncoder = &getAlgorithmManager().getAlgorithm(
|
||||
getAlgorithmManager().createAlgorithm(OVP_GD_ClassId_Algorithm_ExperimentInfoEncoder));
|
||||
m_signalEncoder = &getAlgorithmManager().getAlgorithm(getAlgorithmManager().createAlgorithm(OVP_GD_ClassId_Algorithm_SignalEncoder));
|
||||
m_stimEncoder = &getAlgorithmManager().getAlgorithm(getAlgorithmManager().createAlgorithm(OVP_GD_ClassId_Algorithm_StimulationEncoder));
|
||||
|
||||
m_reader->initialize();
|
||||
m_experimentInfoEncoder->initialize();
|
||||
m_signalEncoder->initialize();
|
||||
m_stimEncoder->initialize();
|
||||
|
||||
// Brainamp file reader parameters
|
||||
Kernel::TParameterHandler<CString*> ip_filename(m_reader->getInputParameter(OVP_Algorithm_BrainampFileReader_InputParameterId_Filename));
|
||||
Kernel::TParameterHandler<double> ip_epochDuration(m_reader->getInputParameter(OVP_Algorithm_BrainampFileReader_InputParameterId_EpochDuration));
|
||||
Kernel::TParameterHandler<uint64_t> ip_seekTime(m_reader->getInputParameter(OVP_Algorithm_BrainampFileReader_InputParameterId_SeekTime));
|
||||
Kernel::TParameterHandler<bool> ip_convertStimuli(m_reader->getInputParameter(OVP_Algorithm_BrainampFileReader_InputParameterId_ConvertStimuli));
|
||||
Kernel::TParameterHandler<uint64_t> op_startTime(m_reader->getOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_CurrentStartTime));
|
||||
Kernel::TParameterHandler<uint64_t> op_endTime(m_reader->getOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_CurrentEndTime));
|
||||
Kernel::TParameterHandler<uint64_t> op_sampling(m_reader->getOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_Sampling));
|
||||
Kernel::TParameterHandler<CMatrix*> op_signalMatrix(m_reader->getOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_SignalMatrix));
|
||||
Kernel::TParameterHandler<IStimulationSet*> op_stimulations(m_reader->getOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_Stimulations));
|
||||
|
||||
// Signal stream encoder parameters
|
||||
Kernel::TParameterHandler<uint64_t> ip_sampling(m_signalEncoder->getInputParameter(OVP_GD_Algorithm_SignalEncoder_InputParameterId_Sampling));
|
||||
Kernel::TParameterHandler<CMatrix*> ip_signalMatrix(m_signalEncoder->getInputParameter(OVP_GD_Algorithm_SignalEncoder_InputParameterId_Matrix));
|
||||
|
||||
// Stimulation stream encoder parameters
|
||||
Kernel::TParameterHandler<IStimulationSet*> ip_stimulations(
|
||||
m_stimEncoder->getInputParameter(OVP_GD_Algorithm_StimulationEncoder_InputParameterId_StimulationSet));
|
||||
|
||||
// Connect parameters together
|
||||
ip_sampling.setReferenceTarget(op_sampling);
|
||||
ip_signalMatrix.setReferenceTarget(op_signalMatrix);
|
||||
ip_stimulations.setReferenceTarget(op_stimulations);
|
||||
|
||||
// Configures settings according to box
|
||||
*ip_filename = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 0);
|
||||
ip_epochDuration = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 1);
|
||||
ip_convertStimuli = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 2);
|
||||
|
||||
m_headerSent = false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CBoxAlgorithmBrainampFileReader::uninitialize()
|
||||
{
|
||||
m_reader->process(OVP_Algorithm_BrainampFileReader_InputTriggerId_Close);
|
||||
|
||||
m_reader->uninitialize();
|
||||
m_stimEncoder->uninitialize();
|
||||
m_signalEncoder->uninitialize();
|
||||
m_experimentInfoEncoder->uninitialize();
|
||||
|
||||
getAlgorithmManager().releaseAlgorithm(*m_reader);
|
||||
getAlgorithmManager().releaseAlgorithm(*m_stimEncoder);
|
||||
getAlgorithmManager().releaseAlgorithm(*m_signalEncoder);
|
||||
getAlgorithmManager().releaseAlgorithm(*m_experimentInfoEncoder);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CBoxAlgorithmBrainampFileReader::processClock(Kernel::CMessageClock& /*msg*/)
|
||||
{
|
||||
getBoxAlgorithmContext()->markAlgorithmAsReadyToProcess();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CBoxAlgorithmBrainampFileReader::process()
|
||||
{
|
||||
Kernel::IBoxIO& boxContext = this->getDynamicBoxContext();
|
||||
|
||||
// Brainamp file reader parameters
|
||||
Kernel::TParameterHandler<CString*> ip_filename(m_reader->getInputParameter(OVP_Algorithm_BrainampFileReader_InputParameterId_Filename));
|
||||
Kernel::TParameterHandler<double> ip_epochDuration(m_reader->getInputParameter(OVP_Algorithm_BrainampFileReader_InputParameterId_EpochDuration));
|
||||
Kernel::TParameterHandler<uint64_t> ip_seekTime(m_reader->getInputParameter(OVP_Algorithm_BrainampFileReader_InputParameterId_SeekTime));
|
||||
Kernel::TParameterHandler<uint64_t> op_startTime(m_reader->getOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_CurrentStartTime));
|
||||
Kernel::TParameterHandler<uint64_t> op_endTime(m_reader->getOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_CurrentEndTime));
|
||||
Kernel::TParameterHandler<uint64_t> op_sampling(m_reader->getOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_Sampling));
|
||||
Kernel::TParameterHandler<CMatrix*> op_signalMatrix(m_reader->getOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_SignalMatrix));
|
||||
Kernel::TParameterHandler<IStimulationSet*> op_stimulations(m_reader->getOutputParameter(OVP_Algorithm_BrainampFileReader_OutputParameterId_Stimulations));
|
||||
|
||||
// Signal stream encoder parameters
|
||||
Kernel::TParameterHandler<IMemoryBuffer*>
|
||||
op_signalBuffer(m_signalEncoder->getOutputParameter(OVP_GD_Algorithm_SignalEncoder_OutputParameterId_EncodedMemoryBuffer));
|
||||
|
||||
// Stimulation stream encoder parameters
|
||||
Kernel::TParameterHandler<IMemoryBuffer*> op_stimulationBuffer(
|
||||
m_stimEncoder->getOutputParameter(OVP_GD_Algorithm_StimulationEncoder_OutputParameterId_EncodedMemoryBuffer));
|
||||
|
||||
// Experiment information
|
||||
Kernel::TParameterHandler<IMemoryBuffer*> op_experimentInfoBuffer(
|
||||
m_experimentInfoEncoder->getOutputParameter(OVP_GD_Algorithm_ExperimentInfoEncoder_OutputParameterId_EncodedMemoryBuffer));
|
||||
|
||||
// Connects parameters to memory buffer
|
||||
op_experimentInfoBuffer = boxContext.getOutputChunk(0);
|
||||
op_signalBuffer = boxContext.getOutputChunk(1);
|
||||
op_stimulationBuffer = boxContext.getOutputChunk(2);
|
||||
|
||||
if (!m_headerSent)
|
||||
{
|
||||
// Opens file
|
||||
if (!m_reader->process(OVP_Algorithm_BrainampFileReader_InputTriggerId_Open)) { return false; }
|
||||
|
||||
// Produces header
|
||||
m_experimentInfoEncoder->process(OVP_GD_Algorithm_ExperimentInfoEncoder_InputTriggerId_EncodeHeader);
|
||||
m_stimEncoder->process(OVP_GD_Algorithm_StimulationEncoder_InputTriggerId_EncodeHeader);
|
||||
m_signalEncoder->process(OVP_GD_Algorithm_SignalEncoder_InputTriggerId_EncodeHeader);
|
||||
|
||||
// Sends header
|
||||
boxContext.markOutputAsReadyToSend(0, 0, 0);
|
||||
boxContext.markOutputAsReadyToSend(1, 0, 0);
|
||||
boxContext.markOutputAsReadyToSend(2, 0, 0);
|
||||
|
||||
// Turn flag off
|
||||
m_headerSent = true;
|
||||
}
|
||||
|
||||
if (!m_reader->process(OVP_Algorithm_BrainampFileReader_InputTriggerId_Next)) { return false; }
|
||||
|
||||
if (m_reader->isOutputTriggerActive(OVP_Algorithm_BrainampFileReader_OutputTriggerId_DataProduced))
|
||||
{
|
||||
// Produces buffer
|
||||
m_experimentInfoEncoder->process(OVP_GD_Algorithm_ExperimentInfoEncoder_InputTriggerId_EncodeBuffer);
|
||||
m_stimEncoder->process(OVP_GD_Algorithm_StimulationEncoder_InputTriggerId_EncodeBuffer);
|
||||
m_signalEncoder->process(OVP_GD_Algorithm_SignalEncoder_InputTriggerId_EncodeBuffer);
|
||||
|
||||
// Sends buffer
|
||||
boxContext.markOutputAsReadyToSend(0, op_startTime, op_endTime);
|
||||
boxContext.markOutputAsReadyToSend(1, op_startTime, op_endTime);
|
||||
boxContext.markOutputAsReadyToSend(2, op_startTime, op_endTime);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
} // namespace FileIO
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
#pragma once
|
||||
|
||||
#include "../../ovp_defines.h"
|
||||
#include <openvibe/ov_all.h>
|
||||
#include <toolkit/ovtk_all.h>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace FileIO {
|
||||
class CBoxAlgorithmBrainampFileReader final : public Toolkit::TBoxAlgorithm<IBoxAlgorithm>
|
||||
{
|
||||
public:
|
||||
|
||||
void release() override { delete this; }
|
||||
|
||||
uint64_t getClockFrequency() override;
|
||||
bool initialize() override;
|
||||
bool uninitialize() override;
|
||||
bool processClock(Kernel::CMessageClock& msg) override;
|
||||
bool process() override;
|
||||
|
||||
_IsDerivedFromClass_Final_(Toolkit::TBoxAlgorithm<IBoxAlgorithm>, OVP_ClassId_BoxAlgorithm_BrainampFileReader)
|
||||
|
||||
protected:
|
||||
|
||||
Kernel::IAlgorithmProxy* m_reader = nullptr;
|
||||
Kernel::IAlgorithmProxy* m_experimentInfoEncoder = nullptr;
|
||||
Kernel::IAlgorithmProxy* m_signalEncoder = nullptr;
|
||||
Kernel::IAlgorithmProxy* m_stimEncoder = nullptr;
|
||||
|
||||
bool m_headerSent = false;
|
||||
};
|
||||
|
||||
class CBoxAlgorithmBrainampFileReaderDesc final : public IBoxAlgorithmDesc
|
||||
{
|
||||
public:
|
||||
|
||||
void release() override { }
|
||||
|
||||
CString getName() const override { return CString("BrainVision Format file reader"); }
|
||||
CString getAuthorName() const override { return CString("Yann Renard"); }
|
||||
CString getAuthorCompanyName() const override { return CString("INRIA/IRISA"); }
|
||||
CString getShortDescription() const override { return CString("Reads input having the BrainAmp file format"); }
|
||||
CString getDetailedDescription() const override { return CString(""); }
|
||||
CString getCategory() const override { return CString("File reading and writing/BrainVision Format"); }
|
||||
CString getVersion() const override { return CString("1.1"); }
|
||||
CString getStockItemName() const override { return CString("gtk-open"); }
|
||||
|
||||
CIdentifier getCreatedClass() const override { return OVP_ClassId_BoxAlgorithm_BrainampFileReader; }
|
||||
IPluginObject* create() override { return new CBoxAlgorithmBrainampFileReader; }
|
||||
|
||||
bool getBoxPrototype(Kernel::IBoxProto& prototype) const override
|
||||
{
|
||||
// Adds box outputs
|
||||
prototype.addOutput("Experiment information", OV_TypeId_ExperimentInfo);
|
||||
prototype.addOutput("EEG stream", OV_TypeId_Signal);
|
||||
prototype.addOutput("Stimulations", OV_TypeId_Stimulations);
|
||||
|
||||
// Adds settings
|
||||
prototype.addSetting("Filename (header)", OV_TypeId_Filename, "");
|
||||
prototype.addSetting("Epoch size (in sec)", OV_TypeId_Float, "0.0625");
|
||||
prototype.addSetting("Convert stimuli to OpenViBE labels", OV_TypeId_Boolean, "true");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
_IsDerivedFromClass_Final_(IBoxAlgorithmDesc, OVP_ClassId_BoxAlgorithm_BrainampFileReaderDesc)
|
||||
};
|
||||
} // namespace FileIO
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+310
@@ -0,0 +1,310 @@
|
||||
#include "ovpCBoxAlgorithmBrainampFileWriter.h"
|
||||
#include <fs/Files.h>
|
||||
|
||||
#include <cstring>
|
||||
#include <iomanip>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
|
||||
#if defined TARGET_OS_Linux || defined TARGET_OS_MacOS
|
||||
#include <strings.h>
|
||||
#define _strcmpi strcasecmp
|
||||
#endif
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace FileIO {
|
||||
|
||||
bool CBoxAlgorithmBrainampFileWriter::initialize()
|
||||
{
|
||||
// Creates algorithms
|
||||
m_signalDecoder = &getAlgorithmManager().getAlgorithm(getAlgorithmManager().createAlgorithm(OVP_GD_ClassId_Algorithm_SignalDecoder));
|
||||
m_stimulationDecoder = &getAlgorithmManager().getAlgorithm(getAlgorithmManager().createAlgorithm(OVP_GD_ClassId_Algorithm_StimulationDecoder));
|
||||
|
||||
m_signalDecoder->initialize();
|
||||
m_stimulationDecoder->initialize();
|
||||
|
||||
// Signal stream encoder parameters
|
||||
op_sampling.initialize(m_signalDecoder->getOutputParameter(OVP_GD_Algorithm_SignalDecoder_OutputParameterId_Sampling));
|
||||
|
||||
|
||||
// Connect parameters together
|
||||
ip_signalBuffer.initialize(m_signalDecoder->getInputParameter(OVP_GD_Algorithm_StreamedMatrixDecoder_InputParameterId_MemoryBufferToDecode));
|
||||
ip_stimulationsBuffer.initialize(m_stimulationDecoder->getInputParameter(OVP_GD_Algorithm_StimulationDecoder_InputParameterId_MemoryBufferToDecode));
|
||||
op_matrix.initialize(m_signalDecoder->getOutputParameter(OVP_GD_Algorithm_StreamedMatrixDecoder_OutputParameterId_Matrix));
|
||||
op_stimSet.initialize(m_stimulationDecoder->getOutputParameter(OVP_GD_Algorithm_StimulationDecoder_OutputParameterId_StimulationSet));
|
||||
|
||||
// Configures settings according to box
|
||||
m_filePath = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 0);
|
||||
m_dictionaryFilename = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 1);
|
||||
m_transformStimulations = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 2);
|
||||
m_shouldWriteFullFilenames = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 3);
|
||||
|
||||
// Markers inside the output file are numbered, we need to keep trace of how many of them we have already written
|
||||
m_markersWritten = 0;
|
||||
m_wasMarkerHeaderWritten = false;
|
||||
|
||||
// Create header, EEG and marker files
|
||||
char parentPath[1024];
|
||||
|
||||
// Add the extension if it wasn't done
|
||||
#if defined TARGET_OS_Linux || defined TARGET_OS_MacOS
|
||||
if((m_filePath.length() < 5) || (strcasecmp(m_filePath.toASCIIString() + m_filePath.length() - 5, ".vhdr") != 0))
|
||||
#else
|
||||
if ((m_filePath.length() < 5) || (_strcmpi(m_filePath.toASCIIString() + m_filePath.length() - 5, ".vhdr") != 0))
|
||||
#endif
|
||||
{
|
||||
m_filePath = m_filePath + ".vhdr";
|
||||
}
|
||||
if (!FS::Files::getParentPath(m_filePath.toASCIIString(), parentPath))
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Error << "Cannot access " << m_filePath << "\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!FS::Files::directoryExists(parentPath) && !FS::Files::createParentPath(m_filePath))
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Error << "Directory [" << parentPath << "] cannot be created\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
// Create header file
|
||||
char filenameWithoutExtension[1024];
|
||||
FS::Files::getFilenameWithoutExtension(m_filePath.toASCIIString(), filenameWithoutExtension);
|
||||
|
||||
FS::Files::openOFStream(m_headerFStream, m_filePath.toASCIIString());
|
||||
if (m_headerFStream.fail())
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Error << "Cannot open " << m_filePath << " : " << strerror(errno) << "\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
// Create EEG file
|
||||
std::string eegFilePath = std::string(parentPath) + "/" + std::string(filenameWithoutExtension) + ".eeg";
|
||||
FS::Files::openOFStream(m_eegFStream, eegFilePath.c_str(), std::ios::out | std::ios::binary);
|
||||
if (m_eegFStream.fail())
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Error << "Cannot open " << eegFilePath << " : " << strerror(errno) << "\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
// Create Markers file
|
||||
std::string markerFilePath = std::string(parentPath) + "/" + std::string(filenameWithoutExtension) + ".vmrk";
|
||||
FS::Files::openOFStream(m_markerFStream, markerFilePath.c_str());
|
||||
if (m_markerFStream.fail())
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Error << "Cannot open " << markerFilePath << " : " << strerror(errno) << "\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
// Opens Marker to OpenViBE Stimulation dictionary file
|
||||
if (m_dictionaryFilename != CString(""))
|
||||
{
|
||||
std::ifstream ifs;
|
||||
FS::Files::openIFStream(ifs, m_dictionaryFilename.toASCIIString());
|
||||
if (!ifs.good()) { getLogManager() << Kernel::LogLevel_Error << "Could not open dictionary file [" << m_dictionaryFilename << "]\n"; }
|
||||
else
|
||||
{
|
||||
getLogManager() << Kernel::LogLevel_Trace << "Opening " << m_dictionaryFilename << " succeeded\n";
|
||||
|
||||
// read the values from the dictionar, they are specified in format
|
||||
// <Marker Type> , <Marker Name> , <OpenViBE Stimulation>
|
||||
// Stimulations can be either written as decimal numbers, or as strings
|
||||
do
|
||||
{
|
||||
std::string line;
|
||||
std::getline(ifs, line, '\n');
|
||||
|
||||
// optionally removes ending carriage return for windows / linux compatibility
|
||||
if (line.length() != 0) { if (line[line.length() - 1] == '\r') { line.erase(line.length() - 1, 1); } }
|
||||
|
||||
if (line.length() != 0)
|
||||
{
|
||||
if (line[0] == ';') // comments
|
||||
{ }
|
||||
else
|
||||
{
|
||||
std::string type, name, stimulationID;
|
||||
std::stringstream ss(line);
|
||||
|
||||
std::getline(ss, type, ',');
|
||||
std::getline(ss, name, ',');
|
||||
std::getline(ss, stimulationID);
|
||||
|
||||
uint64_t id = this->getTypeManager().getEnumerationEntryValueFromName(OVTK_TypeId_Stimulation, stimulationID.c_str());
|
||||
m_stimulationToMarkers[id] = type + "," + name;
|
||||
}
|
||||
}
|
||||
} while (ifs.good());
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CBoxAlgorithmBrainampFileWriter::uninitialize()
|
||||
{
|
||||
m_stimulationDecoder->uninitialize();
|
||||
m_signalDecoder->uninitialize();
|
||||
|
||||
this->getAlgorithmManager().releaseAlgorithm(*m_stimulationDecoder);
|
||||
this->getAlgorithmManager().releaseAlgorithm(*m_signalDecoder);
|
||||
|
||||
if (m_eegFStream.is_open()) { m_eegFStream.close(); }
|
||||
|
||||
if (m_markerFStream.is_open()) { m_markerFStream.close(); }
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CBoxAlgorithmBrainampFileWriter::processInput(const size_t /*index*/)
|
||||
{
|
||||
this->getBoxAlgorithmContext()->markAlgorithmAsReadyToProcess();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CBoxAlgorithmBrainampFileWriter::process()
|
||||
{
|
||||
Kernel::IBoxIO& boxContext = this->getDynamicBoxContext();
|
||||
|
||||
// Signal
|
||||
for (size_t i = 0; i < boxContext.getInputChunkCount(0); i++)
|
||||
{
|
||||
ip_signalBuffer = boxContext.getInputChunk(0, i);
|
||||
m_signalDecoder->process();
|
||||
if (m_signalDecoder->isOutputTriggerActive(OVP_GD_Algorithm_SignalDecoder_OutputTriggerId_ReceivedHeader))
|
||||
{
|
||||
// BrainAmp format uses sampling interval (between two samples) in microseconds
|
||||
const size_t samplingInterval = 1000000 / size_t(op_sampling);
|
||||
const size_t nChannels = op_matrix->getDimensionSize(0);
|
||||
|
||||
if (m_headerFStream.is_open())
|
||||
{
|
||||
std::string auxFilename = "$b";
|
||||
if (m_shouldWriteFullFilenames)
|
||||
{
|
||||
char filenameWithoutExtension[1024];
|
||||
FS::Files::getFilenameWithoutExtension(m_filePath.toASCIIString(), filenameWithoutExtension);
|
||||
auxFilename = filenameWithoutExtension;
|
||||
}
|
||||
|
||||
m_headerFStream << "Brain Vision Data Exchange Header File Version 1.0" << std::endl;
|
||||
m_headerFStream << "[Common Infos]" << std::endl;
|
||||
m_headerFStream << "DataFile=" << auxFilename << ".eeg" << std::endl;
|
||||
m_headerFStream << "MarkerFile=" << auxFilename << ".vmrk" << std::endl;
|
||||
m_headerFStream << "DataFormat=BINARY" << std::endl;
|
||||
m_headerFStream << "DataOrientation=MULTIPLEXED" << std::endl;
|
||||
m_headerFStream << "NumberOfChannels=" << nChannels << std::endl;
|
||||
m_headerFStream << "SamplingInterval=" << samplingInterval << std::endl;
|
||||
m_headerFStream << "[Binary Infos]" << std::endl;
|
||||
m_headerFStream << "BinaryFormat=IEEE_FLOAT_32" << std::endl; // TODO_JL extend this to more formats
|
||||
m_headerFStream << "[Channel Infos]" << std::endl;
|
||||
|
||||
for (size_t c = 0; c < nChannels; c++)
|
||||
{
|
||||
// OpenViBE format does not specify any units
|
||||
m_headerFStream << "Ch" << (c + 1) << "=" << op_matrix->getDimensionLabel(0, c) << ",,1" << std::endl;
|
||||
}
|
||||
m_headerFStream.close();
|
||||
}
|
||||
else
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Error << "Cannot open " << m_filePath << "\n";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_signalDecoder->isOutputTriggerActive(OVP_GD_Algorithm_SignalDecoder_OutputTriggerId_ReceivedBuffer))
|
||||
{
|
||||
if (m_eegFStream.good())
|
||||
{
|
||||
for (uint32_t j = 0; j < op_matrix->getDimensionSize(1); ++j)
|
||||
{
|
||||
for (uint32_t c = 0; c < op_matrix->getDimensionSize(0); c++)
|
||||
{
|
||||
float value = float(op_matrix->getBuffer()[c * op_matrix->getDimensionSize(1) + j]);
|
||||
m_eegFStream.write(reinterpret_cast<char*>(&value), sizeof(float));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
boxContext.markInputAsDeprecated(0, i);
|
||||
}
|
||||
|
||||
// Stimulations
|
||||
for (uint32_t i = 0; i < boxContext.getInputChunkCount(1); i++)
|
||||
{
|
||||
ip_stimulationsBuffer = boxContext.getInputChunk(1, i);
|
||||
|
||||
m_stimulationDecoder->process();
|
||||
|
||||
// Handle Header
|
||||
if (!m_wasMarkerHeaderWritten && m_stimulationDecoder->isOutputTriggerActive(
|
||||
OVP_GD_Algorithm_StimulationDecoder_OutputTriggerId_ReceivedHeader))
|
||||
{
|
||||
std::string auxFilename = "$b";
|
||||
if (m_shouldWriteFullFilenames)
|
||||
{
|
||||
char filenameWithoutExtension[1024];
|
||||
FS::Files::getFilenameWithoutExtension(m_filePath.toASCIIString(), filenameWithoutExtension);
|
||||
auxFilename = filenameWithoutExtension;
|
||||
}
|
||||
|
||||
m_markerFStream << "Brain Vision Data Exchange Marker File, Version 1.0" << std::endl;
|
||||
m_markerFStream << "[Common Infos]" << std::endl;
|
||||
m_markerFStream << "DataFile=" << auxFilename << ".eeg" << std::endl;
|
||||
m_markerFStream << "[Marker Infos]" << std::endl;
|
||||
m_wasMarkerHeaderWritten = true;
|
||||
}
|
||||
|
||||
if (m_stimulationDecoder->isOutputTriggerActive(OVP_GD_Algorithm_StimulationDecoder_OutputTriggerId_ReceivedBuffer))
|
||||
{
|
||||
for (uint32_t j = 0; j < op_stimSet->getStimulationCount(); j++)
|
||||
{
|
||||
const uint64_t id = op_stimSet->getStimulationIdentifier(j);
|
||||
const uint64_t date = op_stimSet->getStimulationDate(j);
|
||||
const uint64_t duration = op_stimSet->getStimulationDuration(j);
|
||||
|
||||
std::string writtenMarker;
|
||||
bool writeStimulation = false;
|
||||
|
||||
if (m_stimulationToMarkers.count(id))
|
||||
{
|
||||
writtenMarker = m_stimulationToMarkers[id];
|
||||
writeStimulation = true;
|
||||
}
|
||||
else if (m_transformStimulations)
|
||||
{
|
||||
std::string str = this->getTypeManager().getEnumerationEntryNameFromValue(OVTK_TypeId_Stimulation, id).toASCIIString();
|
||||
writtenMarker = "Stimulus," + (str.empty() ? std::to_string(id) : str);
|
||||
writeStimulation = true;
|
||||
}
|
||||
|
||||
if (writeStimulation && m_markerFStream.good())
|
||||
{
|
||||
m_markersWritten++;
|
||||
m_markerFStream << "Mk" << m_markersWritten << "=" << writtenMarker << ",";
|
||||
|
||||
// Calclulate the index of the sample to which the marker is attached
|
||||
const uint64_t sampleIdx = CTime(date).toSampleCount(op_sampling);
|
||||
m_markerFStream << sampleIdx << ",";
|
||||
|
||||
// Minimal duration of markers inside BrainAmp format seems to be 1 sample
|
||||
const uint64_t durationInSamples = CTime(duration).toSampleCount(op_sampling) + 1;
|
||||
m_markerFStream << durationInSamples << ",";
|
||||
|
||||
// 0 means that the stimulation is attached to all channels
|
||||
m_markerFStream << "0" << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
boxContext.markInputAsDeprecated(1, i);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
} // namespace FileIO
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
#pragma once
|
||||
|
||||
#include "../../ovp_defines.h"
|
||||
#include <openvibe/ov_all.h>
|
||||
#include <toolkit/ovtk_all.h>
|
||||
|
||||
#include <fstream>
|
||||
#include <map>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace FileIO {
|
||||
class CBoxAlgorithmBrainampFileWriter final : 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>, OVP_ClassId_BoxAlgorithm_BrainampFileWriter)
|
||||
|
||||
protected:
|
||||
|
||||
Kernel::IAlgorithmProxy* m_signalDecoder = nullptr;
|
||||
Kernel::IAlgorithmProxy* m_stimulationDecoder = nullptr;
|
||||
|
||||
Kernel::TParameterHandler<const IMemoryBuffer*> ip_signalBuffer;
|
||||
Kernel::TParameterHandler<const IMemoryBuffer*> ip_stimulationsBuffer;
|
||||
Kernel::TParameterHandler<CMatrix*> op_matrix;
|
||||
Kernel::TParameterHandler<IStimulationSet*> op_stimSet;
|
||||
Kernel::TParameterHandler<uint64_t> op_sampling;
|
||||
|
||||
CString m_filePath;
|
||||
CString m_dictionaryFilename;
|
||||
bool m_transformStimulations = false;
|
||||
bool m_shouldWriteFullFilenames = false;
|
||||
|
||||
private:
|
||||
std::ofstream m_headerFStream;
|
||||
std::ofstream m_eegFStream;
|
||||
std::ofstream m_markerFStream;
|
||||
|
||||
std::map<uint64_t, std::string> m_stimulationToMarkers;
|
||||
|
||||
uint64_t m_markersWritten = 0;
|
||||
bool m_wasMarkerHeaderWritten = false;
|
||||
};
|
||||
|
||||
class CBoxAlgorithmBrainampFileWriterDesc final : public IBoxAlgorithmDesc
|
||||
{
|
||||
public:
|
||||
|
||||
void release() override { }
|
||||
|
||||
CString getName() const override { return CString("BrainVision Format File Writer"); }
|
||||
CString getAuthorName() const override { return CString("Jozef Legeny"); }
|
||||
CString getAuthorCompanyName() const override { return CString("Mensia Technologies"); }
|
||||
CString getShortDescription() const override { return CString("Writes its input into a BrainVision format file"); }
|
||||
|
||||
CString getDetailedDescription() const override { return CString("This box allows to write the input signal under BrainVision file format."); }
|
||||
|
||||
CString getCategory() const override { return CString("File reading and writing/BrainVision Format"); }
|
||||
CString getVersion() const override { return CString("1.1"); }
|
||||
CString getStockItemName() const override { return CString("gtk-save"); }
|
||||
|
||||
CIdentifier getCreatedClass() const override { return OVP_ClassId_BoxAlgorithm_BrainampFileWriter; }
|
||||
IPluginObject* create() override { return new CBoxAlgorithmBrainampFileWriter; }
|
||||
|
||||
bool getBoxPrototype(Kernel::IBoxProto& prototype) const override
|
||||
{
|
||||
// Adds box outputs
|
||||
prototype.addInput("EEG stream", OV_TypeId_Signal);
|
||||
prototype.addInput("Stimulations", OV_TypeId_Stimulations);
|
||||
|
||||
// Adds settings
|
||||
prototype.addSetting("Filename (header in vhdr format)", OV_TypeId_Filename, "record-[$core{date}-$core{time}].vhdr");
|
||||
prototype.addSetting("Marker to OV Stimulation dictionary", OV_TypeId_Filename, "");
|
||||
prototype.addSetting("Convert OpenViBE Stimulations to markers", OV_TypeId_Boolean, "true");
|
||||
prototype.addSetting("Use full data and marker file names in header", OV_TypeId_Boolean, "false");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
_IsDerivedFromClass_Final_(IBoxAlgorithmDesc, OVP_ClassId_BoxAlgorithm_BrainampFileWriterDesc)
|
||||
};
|
||||
} // namespace FileIO
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+336
@@ -0,0 +1,336 @@
|
||||
#include "ovpCBCICompetitionIIIbReader.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <cmath>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace FileIO {
|
||||
|
||||
#define BCICompetitionIIIbReader_UndefinedClass 0xFFFFFFFFFFLL
|
||||
|
||||
bool CBCICompetitionIIIbReader::initialize()
|
||||
{
|
||||
m_signalEncoder.initialize(*this, 0);
|
||||
m_stimEncoder.initialize(*this, 1);
|
||||
|
||||
// Parses box settings to find filename
|
||||
const CString file = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 0);
|
||||
|
||||
//opens the file
|
||||
if (file) { m_file.open(file); }
|
||||
if (!m_file.good())
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_ImportantWarning << "Could not open file [" << file << "]\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
m_file.seekg(0, std::ios::end);
|
||||
m_fileSize = size_t(m_file.tellg());
|
||||
m_file.seekg(0, std::ios::beg);
|
||||
|
||||
m_trialLength = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 10);
|
||||
m_cueDisplayStart = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 11);
|
||||
m_feedbackStart = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 12);
|
||||
|
||||
readTriggers();
|
||||
readLabels();
|
||||
readArtifacts();
|
||||
readTrueLabels();
|
||||
|
||||
// Gets the size of output buffers
|
||||
m_samplesPerBuffer = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 5);
|
||||
|
||||
//Offline/Online
|
||||
const bool offline = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 6);
|
||||
if (!offline)
|
||||
{
|
||||
//computes clock frequency
|
||||
if (m_samplesPerBuffer <= m_sampling)
|
||||
{
|
||||
if (m_sampling % m_samplesPerBuffer != 0)
|
||||
{
|
||||
getBoxAlgorithmContext()->getPlayerContext()->getLogManager() << Kernel::LogLevel_Warning <<
|
||||
"The sampling rate isn't a multiple of the buffer size\n" <<
|
||||
"Please consider adjusting the BCI Competition IIIb reader settings to correct this!\n";
|
||||
}
|
||||
|
||||
if (m_samplesPerBuffer == 0)
|
||||
{
|
||||
getBoxAlgorithmContext()->getPlayerContext()->getLogManager() << Kernel::LogLevel_Error <<
|
||||
"SamplesPerBuffer is 0, this will not work\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
// Intentional parameter swap to get the frequency
|
||||
m_clockFrequency = CTime(m_samplesPerBuffer, m_sampling).time();
|
||||
}
|
||||
}
|
||||
|
||||
//Test/Training
|
||||
m_keepTrainingSamples = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 7);
|
||||
m_keepTestSamples = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 8);
|
||||
m_keepArtifactSamples = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 9);
|
||||
|
||||
writeSignalInformation();
|
||||
|
||||
m_signalEncoder.encodeHeader();
|
||||
m_stimEncoder.encodeHeader();
|
||||
|
||||
getBoxAlgorithmContext()->getDynamicBoxContext()->markOutputAsReadyToSend(0, 0, 0);
|
||||
getBoxAlgorithmContext()->getDynamicBoxContext()->markOutputAsReadyToSend(1, 0, 0);
|
||||
|
||||
m_buffer = m_signalEncoder.getInputMatrix();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CBCICompetitionIIIbReader::uninitialize()
|
||||
{
|
||||
m_stimEncoder.uninitialize();
|
||||
m_signalEncoder.uninitialize();
|
||||
if (m_file) { m_file.close(); }
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CBCICompetitionIIIbReader::processClock(Kernel::CMessageClock& /*msg*/)
|
||||
{
|
||||
if (!m_endOfFile) { getBoxAlgorithmContext()->markAlgorithmAsReadyToProcess(); }
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CBCICompetitionIIIbReader::process()
|
||||
{
|
||||
if (m_errorOccurred) { return false; }
|
||||
|
||||
Kernel::IBoxIO* boxIO = getBoxAlgorithmContext()->getDynamicBoxContext();
|
||||
|
||||
//reading signal
|
||||
//reset vector
|
||||
double* buffer = m_buffer->getBuffer();
|
||||
for (uint32_t i = 0; i < m_buffer->getBufferElementCount(); ++i) { buffer[i] = 0; }
|
||||
|
||||
std::istringstream ss;
|
||||
std::string line;
|
||||
double sample;
|
||||
|
||||
uint32_t count = 0;
|
||||
for (; count < m_samplesPerBuffer && !m_endOfFile; ++count)
|
||||
{
|
||||
if (!getline(m_file, line)) { m_endOfFile = true; }
|
||||
|
||||
ss.clear();
|
||||
ss.str(line);
|
||||
|
||||
ss >> sample;
|
||||
if (std::isnan(sample)) { buffer[count] = (count != 0) ? buffer[count - 1] : 0.0; }
|
||||
else { buffer[count] = sample; }
|
||||
|
||||
ss >> sample;
|
||||
if (std::isnan(sample)) { buffer[count + m_samplesPerBuffer] = (count != 0) ? buffer[count + m_samplesPerBuffer - 1] : 0.0; }
|
||||
else { buffer[count + m_samplesPerBuffer] = sample; }
|
||||
}
|
||||
|
||||
m_nSentSample += count;
|
||||
|
||||
//A signal matrix is ready to be output
|
||||
m_signalEncoder.encodeBuffer();
|
||||
|
||||
const uint64_t start = CTime(m_sampling, uint64_t(m_nSentSample - count)).time();
|
||||
const uint64_t end = CTime(m_sampling, uint64_t(m_nSentSample)).time();
|
||||
|
||||
boxIO->markOutputAsReadyToSend(0, start, end);
|
||||
//////
|
||||
|
||||
//Stimulations
|
||||
std::vector<std::pair<uint64_t, uint64_t>> events;
|
||||
bool changed = true;
|
||||
|
||||
while (changed)
|
||||
{
|
||||
changed = false;
|
||||
|
||||
const bool keepCurrentTrial =
|
||||
((m_artifacts[m_currentTrial] && m_keepArtifactSamples) || !m_artifacts[m_currentTrial]) &&
|
||||
((m_classLabels[m_currentTrial] == BCICompetitionIIIbReader_UndefinedClass && m_keepTestSamples) ||
|
||||
(m_classLabels[m_currentTrial] != BCICompetitionIIIbReader_UndefinedClass && m_keepTrainingSamples));
|
||||
|
||||
if (m_triggerTimes[m_currentTrial] > (m_nSentSample - count) &&
|
||||
m_triggerTimes[m_currentTrial] <= m_nSentSample
|
||||
)
|
||||
{
|
||||
if (keepCurrentTrial)
|
||||
{
|
||||
//start of trial
|
||||
events.push_back(std::pair<uint64_t, uint64_t>(0x300, m_triggerTimes[m_currentTrial]));
|
||||
//display cross
|
||||
events.push_back(std::pair<uint64_t, uint64_t>(0x312, m_triggerTimes[m_currentTrial]));
|
||||
}
|
||||
}
|
||||
|
||||
//send CUE stimulation
|
||||
if (m_cueDisplayStarts[m_currentTrial] > (m_nSentSample - count) &&
|
||||
m_cueDisplayStarts[m_currentTrial] <= m_nSentSample
|
||||
)
|
||||
{
|
||||
if (keepCurrentTrial)
|
||||
{
|
||||
if (m_classLabels[m_currentTrial] != BCICompetitionIIIbReader_UndefinedClass)
|
||||
{
|
||||
//send class label
|
||||
events.push_back(std::pair<uint64_t, uint64_t>(0x300 + m_classLabels[m_currentTrial], m_cueDisplayStarts[m_currentTrial]));
|
||||
}
|
||||
else
|
||||
{
|
||||
//send true label
|
||||
events.push_back(std::pair<uint64_t, uint64_t>(0x300 + m_trueLabels[m_currentTrial], m_cueDisplayStarts[m_currentTrial]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//send feedback start stimulation
|
||||
if (m_feedbackStarts[m_currentTrial] > (m_nSentSample - count) && m_feedbackStarts[m_currentTrial] <= m_nSentSample)
|
||||
{
|
||||
if (keepCurrentTrial) { events.push_back(std::pair<uint64_t, uint64_t>(0x30D, m_feedbackStarts[m_currentTrial])); }
|
||||
}
|
||||
|
||||
//send end of trial stimulation
|
||||
if (m_endOfTrials[m_currentTrial] > (m_nSentSample - count) && m_endOfTrials[m_currentTrial] <= m_nSentSample
|
||||
)
|
||||
{
|
||||
if (keepCurrentTrial) { events.push_back(std::pair<uint64_t, uint64_t>(0x320, m_endOfTrials[m_currentTrial])); }
|
||||
m_currentTrial++;
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!events.empty() || m_endOfFile)
|
||||
{
|
||||
IStimulationSet* stimSet = m_stimEncoder.getInputStimulationSet();
|
||||
|
||||
stimSet->setStimulationCount(events.size() + ((m_endOfFile) ? 1 : 0));
|
||||
|
||||
|
||||
for (size_t j = 0; j < events.size(); ++j)
|
||||
{
|
||||
//compute date
|
||||
const uint64_t date = CTime(m_sampling, events[j].second).time();
|
||||
stimSet->insertStimulation(j, events[j].first, date, 0);
|
||||
}
|
||||
|
||||
//add the ending stim
|
||||
if (m_endOfFile)
|
||||
{
|
||||
//compute date
|
||||
const uint64_t date = CTime(m_sampling, m_nSentSample).time();
|
||||
stimSet->insertStimulation(events.size(), 0x3FF, date, 0);
|
||||
}
|
||||
|
||||
m_stimEncoder.encodeBuffer();
|
||||
|
||||
boxIO->markOutputAsReadyToSend(1, start, end);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CBCICompetitionIIIbReader::writeSignalInformation()
|
||||
{
|
||||
m_signalEncoder.getInputSamplingRate() = 125;
|
||||
m_signalEncoder.getInputMatrix()->resize(2, m_samplesPerBuffer);
|
||||
m_signalEncoder.getInputMatrix()->setDimensionLabel(0, 0, "+C3a-C3p");
|
||||
m_signalEncoder.getInputMatrix()->setDimensionLabel(0, 1, "+C4a-C4p");
|
||||
}
|
||||
|
||||
|
||||
void CBCICompetitionIIIbReader::readTriggers()
|
||||
{
|
||||
const CString str = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 1);
|
||||
|
||||
std::ifstream file;
|
||||
if (str) { file.open(str); }
|
||||
|
||||
std::string line;
|
||||
std::istringstream ss;
|
||||
uint64_t value;
|
||||
while (getline(file, line))
|
||||
{
|
||||
ss.clear();
|
||||
ss.str(line);
|
||||
ss >> value;
|
||||
|
||||
m_triggerTimes.push_back(value);
|
||||
m_cueDisplayStarts.push_back(value + uint64_t(floor(m_sampling * m_cueDisplayStart)));
|
||||
m_feedbackStarts.push_back(value + uint64_t(floor(m_sampling * m_feedbackStart)));
|
||||
m_endOfTrials.push_back(value + uint64_t(floor(m_sampling * m_trialLength)));
|
||||
}
|
||||
file.close();
|
||||
}
|
||||
|
||||
void CBCICompetitionIIIbReader::readLabels()
|
||||
{
|
||||
const CString str = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 2);
|
||||
|
||||
std::ifstream file;
|
||||
if (str) { file.open(str); }
|
||||
|
||||
std::string line;
|
||||
std::istringstream ss;
|
||||
uint64_t value;
|
||||
while (getline(file, line))
|
||||
{
|
||||
if (line.compare(0, 3, "NaN", 0, 3) == 0) { m_classLabels.push_back(BCICompetitionIIIbReader_UndefinedClass); }
|
||||
else
|
||||
{
|
||||
ss.clear();
|
||||
ss.str(line);
|
||||
ss >> value;
|
||||
m_classLabels.push_back(value);
|
||||
}
|
||||
}
|
||||
file.close();
|
||||
}
|
||||
|
||||
void CBCICompetitionIIIbReader::readArtifacts()
|
||||
{
|
||||
const CString str = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 3);
|
||||
|
||||
std::ifstream file;
|
||||
if (str) { file.open(str); }
|
||||
|
||||
std::string line;
|
||||
std::istringstream ss;
|
||||
uint64_t value;
|
||||
while (getline(file, line))
|
||||
{
|
||||
ss.clear();
|
||||
ss.str(line);
|
||||
ss >> value;
|
||||
m_artifacts.push_back(value == 1);
|
||||
}
|
||||
file.close();
|
||||
}
|
||||
|
||||
void CBCICompetitionIIIbReader::readTrueLabels()
|
||||
{
|
||||
const CString str = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 4);
|
||||
|
||||
std::ifstream file;
|
||||
if (str) { file.open(str); }
|
||||
|
||||
std::string line;
|
||||
std::istringstream ss;
|
||||
uint64_t value;
|
||||
while (getline(file, line))
|
||||
{
|
||||
ss.clear();
|
||||
ss.str(line);
|
||||
ss >> value;
|
||||
m_trueLabels.push_back(value);
|
||||
}
|
||||
file.close();
|
||||
}
|
||||
|
||||
} // namespace FileIO
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+127
@@ -0,0 +1,127 @@
|
||||
#pragma once
|
||||
|
||||
#include "../ovp_defines.h"
|
||||
#include <openvibe/ov_all.h>
|
||||
#include <toolkit/ovtk_all.h>
|
||||
|
||||
#include <vector>
|
||||
#include <fstream>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace FileIO {
|
||||
class CBCICompetitionIIIbReader final : public Toolkit::TBoxAlgorithm<IBoxAlgorithm>
|
||||
{
|
||||
public:
|
||||
|
||||
CBCICompetitionIIIbReader() { } //TODO
|
||||
|
||||
void release() override { delete this; }
|
||||
bool initialize() override;
|
||||
bool uninitialize() override;
|
||||
bool process() override;
|
||||
bool processClock(Kernel::CMessageClock& msg) override;
|
||||
|
||||
uint64_t getClockFrequency() override { return m_clockFrequency; }
|
||||
|
||||
_IsDerivedFromClass_Final_(IBoxAlgorithm, OVP_ClassId_BCICompetitionIIIbReader)
|
||||
|
||||
protected:
|
||||
void writeSignalInformation();
|
||||
void readTriggers();
|
||||
void readLabels();
|
||||
void readArtifacts();
|
||||
void readTrueLabels();
|
||||
|
||||
bool m_errorOccurred = false; //true if an error has occurred while reading the GDF file
|
||||
|
||||
//The filename and handle
|
||||
std::ifstream m_file;
|
||||
size_t m_fileSize = 0;
|
||||
|
||||
Toolkit::TSignalEncoder<CBCICompetitionIIIbReader> m_signalEncoder;
|
||||
Toolkit::TStimulationEncoder<CBCICompetitionIIIbReader> m_stimEncoder;
|
||||
|
||||
uint64_t m_clockFrequency = 100LL << 32;
|
||||
|
||||
std::vector<uint64_t> m_triggerTimes;
|
||||
std::vector<uint64_t> m_endOfTrials;
|
||||
std::vector<uint64_t> m_cueDisplayStarts;
|
||||
std::vector<uint64_t> m_feedbackStarts;
|
||||
std::vector<size_t> m_classLabels;
|
||||
std::vector<bool> m_artifacts;
|
||||
std::vector<size_t> m_trueLabels;
|
||||
|
||||
size_t m_samplesPerBuffer = 0;
|
||||
size_t m_sampling = 125;
|
||||
size_t m_nSentSample = 0;
|
||||
|
||||
CMatrix* m_buffer = nullptr;
|
||||
bool m_endOfFile = false;
|
||||
|
||||
size_t m_currentTrial = 0;
|
||||
|
||||
bool m_keepTrainingSamples = false;
|
||||
bool m_keepTestSamples = false;
|
||||
bool m_keepArtifactSamples = false;
|
||||
|
||||
double m_trialLength = 0;
|
||||
double m_cueDisplayStart = 0;
|
||||
double m_feedbackStart = 0;
|
||||
};
|
||||
|
||||
|
||||
class CBCICompetitionIIIbReaderDesc final : public IBoxAlgorithmDesc
|
||||
{
|
||||
public:
|
||||
CString getName() const override { return CString("BCI competition IIIb reader"); }
|
||||
CString getAuthorName() const override { return CString("Bruno Renier"); }
|
||||
CString getAuthorCompanyName() const override { return CString("INRIA/IRISA"); }
|
||||
CString getShortDescription() const override { return CString("Reads ASCII version of BCI competition IIIb datasets."); }
|
||||
|
||||
CString getDetailedDescription() const override
|
||||
{
|
||||
return CString("Reads signal samples, stimulations and class labels from the BCI competition IIIb ASCII datasets.");
|
||||
}
|
||||
|
||||
CString getCategory() const override { return CString("File reading and writing/BCI Competition"); }
|
||||
CString getVersion() const override { return CString("0.7"); }
|
||||
CString getStockItemName() const override { return CString("gtk-open"); }
|
||||
|
||||
void release() override { }
|
||||
CIdentifier getCreatedClass() const override { return OVP_ClassId_BCICompetitionIIIbReader; }
|
||||
IPluginObject* create() override { return new CBCICompetitionIIIbReader(); }
|
||||
|
||||
bool getBoxPrototype(Kernel::IBoxProto& prototype) const override
|
||||
{
|
||||
// Adds box outputs
|
||||
prototype.addOutput("Signal", OV_TypeId_Signal);
|
||||
prototype.addOutput("Stimulations", OV_TypeId_Stimulations);
|
||||
|
||||
// Adds settings
|
||||
prototype.addSetting("Signal file", OV_TypeId_Filename, "");
|
||||
prototype.addSetting("Triggers file", OV_TypeId_Filename, "");
|
||||
prototype.addSetting("Labels file", OV_TypeId_Filename, "");
|
||||
prototype.addSetting("Artifact file", OV_TypeId_Filename, "");
|
||||
prototype.addSetting("True labels file", OV_TypeId_Filename, "");
|
||||
|
||||
prototype.addSetting("Samples per buffer", OV_TypeId_Integer, "32");
|
||||
|
||||
prototype.addSetting("Offline", OV_TypeId_Boolean, "false");
|
||||
prototype.addSetting("Train?", OV_TypeId_Boolean, "true");
|
||||
prototype.addSetting("Test?", OV_TypeId_Boolean, "false");
|
||||
prototype.addSetting("Keep artifacts?", OV_TypeId_Boolean, "false");
|
||||
|
||||
prototype.addSetting("Trial length", OV_TypeId_Float, "8.0");
|
||||
prototype.addSetting("CUE display Start", OV_TypeId_Float, "3.0");
|
||||
prototype.addSetting("Feedback start", OV_TypeId_Float, "4.0");
|
||||
|
||||
prototype.addFlag(OV_AttributeId_Box_FlagIsUnstable);
|
||||
return true;
|
||||
}
|
||||
|
||||
_IsDerivedFromClass_Final_(IBoxAlgorithmDesc, OVP_ClassId_BCICompetitionIIIbReaderDesc)
|
||||
};
|
||||
} // namespace FileIO
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+525
@@ -0,0 +1,525 @@
|
||||
#include "ovpCBoxAlgorithmSignalConcatenation.h"
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace FileIO {
|
||||
|
||||
|
||||
bool CBoxAlgorithmSignalConcatenation::initialize()
|
||||
{
|
||||
m_signalChunkBuffers.resize(this->getStaticBoxContext().getInputCount() >> 1);
|
||||
m_stimulationChunkBuffers.resize(this->getStaticBoxContext().getInputCount() >> 1);
|
||||
|
||||
m_timeOut = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 0);
|
||||
m_timeOut = m_timeOut << 32;
|
||||
this->getLogManager() << Kernel::LogLevel_Info << "Timeout set to " << CTime(m_timeOut) << ".\n";
|
||||
for (uint32_t i = 0; i < this->getStaticBoxContext().getInputCount(); i += 2)
|
||||
{
|
||||
m_eofStimulations.push_back(FSettingValueAutoCast(*this->getBoxAlgorithmContext(), (i >> 2) + 1));
|
||||
m_eofReached.push_back(false);
|
||||
m_fileEndTimes.push_back(0);
|
||||
}
|
||||
|
||||
for (uint32_t i = 0; i < this->getStaticBoxContext().getInputCount(); i += 2)
|
||||
{
|
||||
auto* signalDecoder = new Toolkit::TSignalDecoder<CBoxAlgorithmSignalConcatenation>(*this, i);
|
||||
auto* stimDecoder = new Toolkit::TStimulationDecoder<CBoxAlgorithmSignalConcatenation>(*this, i + 1);
|
||||
|
||||
m_signalDecoders.push_back(signalDecoder);
|
||||
m_stimulationDecoders.push_back(stimDecoder);
|
||||
auto* stimSet = new CStimulationSet();
|
||||
m_stimulationSets.push_back(stimSet);
|
||||
}
|
||||
|
||||
m_stimulationEncoder.initialize(*this, 1);
|
||||
m_stimulationEncoder.getInputStimulationSet().setReferenceTarget(m_stimulationDecoders[0]->getOutputStimulationSet());
|
||||
|
||||
m_signalEncoder.initialize(*this, 0);
|
||||
|
||||
m_triggerEncoder.initialize(*this, 2);
|
||||
m_triggerEncoder.getInputStimulationSet().setReferenceTarget(m_stimulationDecoders[0]->getOutputStimulationSet());
|
||||
|
||||
m_headerReceivedCount = 0;
|
||||
m_endReceivedCount = 0;
|
||||
|
||||
m_headerSent = false;
|
||||
m_endSent = false;
|
||||
m_stimHeaderSent = false;
|
||||
m_finished = false;
|
||||
m_resynchroDone = false;
|
||||
m_statsPrinted = false;
|
||||
|
||||
m_state.m_CurrentFileIdx = 0;
|
||||
m_state.m_CurrentChunkIdx = 0;
|
||||
m_state.m_CurrentStimulationIdx = 0;
|
||||
|
||||
m_triggerDate = 0;
|
||||
m_lastChunkStartTime = 0;
|
||||
m_lastChunkEndTime = 0;
|
||||
|
||||
return true;
|
||||
}
|
||||
/*******************************************************************************/
|
||||
|
||||
bool CBoxAlgorithmSignalConcatenation::uninitialize()
|
||||
{
|
||||
m_stimulationEncoder.uninitialize();
|
||||
m_signalEncoder.uninitialize();
|
||||
m_triggerEncoder.uninitialize();
|
||||
|
||||
for (uint32_t i = 0; i < m_signalDecoders.size(); ++i)
|
||||
{
|
||||
m_signalDecoders[i]->uninitialize();
|
||||
m_stimulationDecoders[i]->uninitialize();
|
||||
delete m_signalDecoders[i];
|
||||
delete m_stimulationDecoders[i];
|
||||
}
|
||||
|
||||
for (auto& signalChunkBuffer : m_signalChunkBuffers) { for (auto& signalChunk : signalChunkBuffer) { delete signalChunk.m_Buffer; } }
|
||||
|
||||
for (auto& stimulationChunkBuffer : m_stimulationChunkBuffers)
|
||||
{
|
||||
for (auto& stimulationChunk : stimulationChunkBuffer) { delete stimulationChunk.m_StimulationSet; }
|
||||
}
|
||||
|
||||
for (auto& stimulationSet : m_stimulationSets) { delete stimulationSet; }
|
||||
|
||||
return true;
|
||||
}
|
||||
/*******************************************************************************/
|
||||
|
||||
bool CBoxAlgorithmSignalConcatenation::processInput(const size_t /*index*/)
|
||||
{
|
||||
getBoxAlgorithmContext()->markAlgorithmAsReadyToProcess();
|
||||
return true;
|
||||
}
|
||||
/*******************************************************************************/
|
||||
|
||||
bool CBoxAlgorithmSignalConcatenation::processClock(Kernel::CMessageClock& /*msg*/)
|
||||
{
|
||||
if (!m_headerSent || m_finished) { return true; }
|
||||
|
||||
const uint64_t currentTime = this->getPlayerContext().getCurrentTime();
|
||||
|
||||
for (uint32_t i = 0; i < m_fileEndTimes.size(); ++i)
|
||||
{
|
||||
if (!m_eofReached[i] && currentTime > m_fileEndTimes[i] + m_timeOut)
|
||||
{
|
||||
m_eofReached[i] = true;
|
||||
this->getLogManager() << Kernel::LogLevel_Info << "File #" << i + 1 << "/" << (this->getStaticBoxContext().getInputCount() / 2) <<
|
||||
" has timed out (effective end time: " << CTime(m_fileEndTimes[i]) << ").\n";
|
||||
}
|
||||
}
|
||||
|
||||
getBoxAlgorithmContext()->markAlgorithmAsReadyToProcess();
|
||||
|
||||
return true;
|
||||
}
|
||||
/*******************************************************************************/
|
||||
|
||||
bool CBoxAlgorithmSignalConcatenation::process()
|
||||
{
|
||||
const Kernel::IBox& staticBoxContext = this->getStaticBoxContext();
|
||||
Kernel::IBoxIO& boxCtx = this->getDynamicBoxContext();
|
||||
|
||||
//SIGNAL INPUTS
|
||||
for (uint32_t i = 0; i < staticBoxContext.getInputCount(); i += 2)
|
||||
{
|
||||
const uint32_t idx = i >> 1;
|
||||
|
||||
for (uint32_t j = 0; j < boxCtx.getInputChunkCount(i); ++j)
|
||||
{
|
||||
m_signalDecoders[idx]->decode(j, true);
|
||||
|
||||
if (m_signalDecoders[idx]->isHeaderReceived())
|
||||
{
|
||||
// Not received all headers we expect? Decode and test ...
|
||||
if (m_headerReceivedCount < staticBoxContext.getInputCount() / 2)
|
||||
{
|
||||
const uint64_t samplingFrequency = m_signalDecoders[idx]->getOutputSamplingRate();
|
||||
const uint32_t nChannel = m_signalDecoders[idx]->getOutputMatrix()->getDimensionSize(0);
|
||||
const uint32_t sampleCountPerBuffer = m_signalDecoders[idx]->getOutputMatrix()->getDimensionSize(1);
|
||||
|
||||
// Note that the stream may be decoded in any order, hence e.g. stream 2 header may be received before stream 1 ...
|
||||
if (m_headerReceivedCount == 0)
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Info << "Common sampling rate is " << samplingFrequency << ", channel count is " << nChannel
|
||||
<< " and sample count per buffer is " << sampleCountPerBuffer << ".\n";
|
||||
|
||||
// Set the encoder to follow the parameters of this first received input
|
||||
m_signalEncoder.getInputSamplingRate().setReferenceTarget(m_signalDecoders[idx]->getOutputSamplingRate());
|
||||
m_signalEncoder.getInputMatrix().setReferenceTarget(m_signalDecoders[idx]->getOutputMatrix());
|
||||
|
||||
m_signalEncoder.encodeHeader();
|
||||
boxCtx.markOutputAsReadyToSend(0, boxCtx.getInputChunkStartTime(i, j), boxCtx.getInputChunkEndTime(i, j));
|
||||
m_headerSent = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_signalEncoder.getInputSamplingRate() != samplingFrequency)
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Error << "File #"
|
||||
<< idx + 1 << "/" << (staticBoxContext.getInputCount() / 2)
|
||||
<< " has a different sampling rate (" << samplingFrequency
|
||||
<< "Hz) than other file(s) (" << m_signalEncoder.getInputSamplingRate() << "Hz).\n";
|
||||
return false;
|
||||
}
|
||||
if (m_signalEncoder.getInputMatrix()->getDimensionSize(0) != nChannel)
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Error << "File #"
|
||||
<< idx + 1 << "/" << (staticBoxContext.getInputCount() / 2)
|
||||
<< " has a different channel count (" << nChannel
|
||||
<< ") than other file(s) (" << m_signalEncoder.getInputMatrix()->getDimensionSize(0) << ").\n";
|
||||
return false;
|
||||
}
|
||||
if (m_signalEncoder.getInputMatrix()->getDimensionSize(1) != sampleCountPerBuffer)
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Error << "File #"
|
||||
<< idx + 1 << "/" << (staticBoxContext.getInputCount() / 2)
|
||||
<< " has a different sample count per buffer (" << sampleCountPerBuffer
|
||||
<< ") than other file(s) (" << m_signalEncoder.getInputMatrix()->getDimensionSize(1) << ").\n";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
m_headerReceivedCount++;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_signalDecoders[idx]->isBufferReceived() && !m_eofReached[idx])
|
||||
{
|
||||
IMemoryBuffer* buffer = new CMemoryBuffer();
|
||||
buffer->setSize(boxCtx.getInputChunk(i, j)->getSize(), true);
|
||||
memcpy(buffer->getDirectPointer(), boxCtx.getInputChunk(i, j)->getDirectPointer(), buffer->getSize());
|
||||
SChunk val;
|
||||
val.m_Buffer = buffer;
|
||||
val.m_StartTime = boxCtx.getInputChunkStartTime(i, j);
|
||||
val.m_EndTime = boxCtx.getInputChunkEndTime(i, j);
|
||||
m_signalChunkBuffers[idx].push_back(val);
|
||||
|
||||
if (boxCtx.getInputChunkEndTime(i, j) < m_fileEndTimes[idx])
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Warning << "Oops, added extra chunk " << CTime(boxCtx.getInputChunkStartTime(i, j))
|
||||
<< " to " << CTime(boxCtx.getInputChunkEndTime(i, j)) << "\n";
|
||||
}
|
||||
|
||||
m_fileEndTimes[idx] = boxCtx.getInputChunkEndTime(i, j);
|
||||
}
|
||||
|
||||
if (m_signalDecoders[idx]->isEndReceived())
|
||||
{
|
||||
// we assume the signal chunks must be continuous, so the end time is the end of the last buffer, don't set here
|
||||
//just discard it (automatic by decoder)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//STIMULATION INPUTS
|
||||
for (uint32_t i = 1; i < staticBoxContext.getInputCount(); i += 2)
|
||||
{
|
||||
const uint32_t idx = i >> 1;
|
||||
|
||||
for (uint32_t j = 0; j < boxCtx.getInputChunkCount(i); ++j)
|
||||
{
|
||||
m_stimulationDecoders[idx]->decode(j, true);
|
||||
if (m_stimulationDecoders[idx]->isHeaderReceived() && !m_stimHeaderSent)
|
||||
{
|
||||
m_stimulationEncoder.encodeHeader();
|
||||
boxCtx.markOutputAsReadyToSend(1, boxCtx.getInputChunkStartTime(i, j), boxCtx.getInputChunkEndTime(i, j));
|
||||
m_triggerEncoder.encodeHeader();
|
||||
boxCtx.markOutputAsReadyToSend(2, boxCtx.getInputChunkStartTime(i, j), boxCtx.getInputChunkEndTime(i, j));
|
||||
m_stimHeaderSent = true;
|
||||
}
|
||||
if (m_stimulationDecoders[idx]->isBufferReceived() && !m_eofReached[idx])
|
||||
{
|
||||
const IStimulationSet* stimSet = m_stimulationDecoders[idx]->getOutputStimulationSet();
|
||||
|
||||
SStimulationChunk val;
|
||||
val.m_StartTime = boxCtx.getInputChunkStartTime(i, j);
|
||||
val.m_EndTime = boxCtx.getInputChunkEndTime(i, j);
|
||||
|
||||
if (stimSet->getStimulationCount() > 0) { val.m_StimulationSet = new CStimulationSet(); }
|
||||
else { val.m_StimulationSet = nullptr; }
|
||||
|
||||
m_stimulationChunkBuffers[idx].
|
||||
push_back(val); // we store even if empty to be able to retain the chunking structure of the stimulation input stream
|
||||
|
||||
for (size_t stim = 0; stim < stimSet->getStimulationCount(); ++stim)
|
||||
{
|
||||
val.m_StimulationSet->appendStimulation(stimSet->getStimulationIdentifier(stim), stimSet->getStimulationDate(stim),
|
||||
stimSet->getStimulationDuration(stim));
|
||||
|
||||
this->getLogManager() << Kernel::LogLevel_Trace << "Input " << i << ": Discovered stim " << stimSet->getStimulationIdentifier(stim)
|
||||
<< " at date [" << CTime(stimSet->getStimulationDate(stim)) << "] in chunk [" << CTime(val.m_StartTime)
|
||||
<< ", " << CTime(val.m_EndTime) << "]\n";
|
||||
|
||||
if (stimSet->getStimulationIdentifier(stim) == m_eofStimulations[idx])
|
||||
{
|
||||
m_eofReached[idx] = true;
|
||||
m_fileEndTimes[idx] = val.m_EndTime;
|
||||
this->getLogManager() << Kernel::LogLevel_Info << "File #" << idx + 1 << "/" << (staticBoxContext.getInputCount() / 2) <<
|
||||
" is finished (end time: " << CTime(m_fileEndTimes[idx]) << "). Later signal chunks will be discarded.\n";
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (m_stimulationDecoders[idx]->isEndReceived() && !m_endSent) { m_endReceivedCount++; }
|
||||
if (m_endReceivedCount == staticBoxContext.getInputCount() / 2 - 1) { m_endSent = true; }
|
||||
}
|
||||
}
|
||||
|
||||
bool shouldConcatenate = true;
|
||||
for (auto&& eof : m_eofReached) { shouldConcatenate &= eof; }
|
||||
|
||||
if (shouldConcatenate && !m_statsPrinted)
|
||||
{
|
||||
for (uint32_t i = 0; i < m_stimulationChunkBuffers.size(); ++i)
|
||||
{
|
||||
if (!m_signalChunkBuffers[i].empty())
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Trace << "File " << i
|
||||
<< " has 1st signal chunk at " << CTime(m_signalChunkBuffers[i][0].m_StartTime)
|
||||
<< " last at [" << CTime(m_signalChunkBuffers[i].back().m_EndTime)
|
||||
<< ", " << CTime(m_signalChunkBuffers[i].back().m_EndTime) << "].\n";
|
||||
}
|
||||
if (!m_stimulationChunkBuffers[i].empty())
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Trace << "File " << i
|
||||
<< " has 1st stim chunk at " << CTime(m_stimulationChunkBuffers[i][0].m_StartTime)
|
||||
<< " last at [" << CTime(m_stimulationChunkBuffers[i].back().m_EndTime)
|
||||
<< ", " << CTime(m_stimulationChunkBuffers[i].back().m_EndTime)
|
||||
<< "].\n";
|
||||
}
|
||||
this->getLogManager() << Kernel::LogLevel_Trace << "File " << i << " EOF is at " << CTime(m_fileEndTimes[i]) << "\n";
|
||||
}
|
||||
m_statsPrinted = true;
|
||||
}
|
||||
|
||||
if (shouldConcatenate && !m_finished)
|
||||
{
|
||||
if (!this->concate()) { return true; }
|
||||
m_stimulationEncoder.encodeEnd();
|
||||
boxCtx.markOutputAsReadyToSend(1, m_lastChunkEndTime, m_lastChunkEndTime);
|
||||
m_triggerEncoder.encodeEnd();
|
||||
boxCtx.markOutputAsReadyToSend(2, m_lastChunkEndTime, m_lastChunkEndTime);
|
||||
m_signalEncoder.encodeEnd();
|
||||
boxCtx.markOutputAsReadyToSend(0, m_lastChunkEndTime, m_lastChunkEndTime);
|
||||
|
||||
m_triggerEncoder.getInputStimulationSet()->appendStimulation(OVTK_StimulationId_EndOfFile, this->getPlayerContext().getCurrentTime(), 0);
|
||||
m_triggerEncoder.encodeBuffer();
|
||||
boxCtx.markOutputAsReadyToSend(2, this->getPlayerContext().getCurrentTime(), this->getPlayerContext().getCurrentTime());
|
||||
m_finished = true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool CBoxAlgorithmSignalConcatenation::concate()
|
||||
{
|
||||
Kernel::IBoxIO& boxContext = this->getDynamicBoxContext();
|
||||
if (!m_resynchroDone)
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Info << "Concatenation in progress...\n";
|
||||
this->getLogManager() << Kernel::LogLevel_Trace << "Resynchronizing Chunks ...\n";
|
||||
|
||||
// note: m_stimulationSets and m_signalChunkBuffers should have the same size (== number of files)
|
||||
|
||||
uint64_t offset = m_fileEndTimes[0];
|
||||
|
||||
for (uint32_t i = 1; i < m_stimulationChunkBuffers.size(); ++i)
|
||||
{
|
||||
for (auto& stimulationChunkBuffer : m_stimulationChunkBuffers[i])
|
||||
{
|
||||
IStimulationSet* stimSet = stimulationChunkBuffer.m_StimulationSet;
|
||||
if (stimSet)
|
||||
{
|
||||
for (size_t k = 0; k < stimSet->getStimulationCount(); ++k)
|
||||
{
|
||||
const uint64_t synchronizedDate = stimSet->getStimulationDate(k) + offset;
|
||||
stimSet->setStimulationDate(k, synchronizedDate);
|
||||
//this->getLogManager() << Kernel::LogLevel_Info << "Resynchronizing stim ["<<m_stimulations[i][j].first<<"] from time ["<<m_stimulations[i][j].second<<"] to ["<<synchronizedDate<<"]\n";
|
||||
}
|
||||
}
|
||||
stimulationChunkBuffer.m_StartTime += offset;
|
||||
stimulationChunkBuffer.m_EndTime += offset;
|
||||
}
|
||||
|
||||
for (auto& signalChunkBuffer : m_signalChunkBuffers[i])
|
||||
{
|
||||
signalChunkBuffer.m_StartTime += offset;
|
||||
signalChunkBuffer.m_EndTime += offset;
|
||||
}
|
||||
|
||||
offset = offset + m_fileEndTimes[i];
|
||||
}
|
||||
|
||||
this->getLogManager() << Kernel::LogLevel_Trace << "Resynchronization finished.\n";
|
||||
m_resynchroDone = true;
|
||||
}
|
||||
|
||||
// When we get here, resynchro has been done
|
||||
|
||||
// note that the iterators are references on purpose...
|
||||
|
||||
for (uint32_t& i = m_state.m_CurrentFileIdx; i < m_signalChunkBuffers.size(); ++i)
|
||||
{
|
||||
const std::vector<SChunk>& chunkVector = m_signalChunkBuffers[i];
|
||||
const std::vector<SStimulationChunk>& stimulusChunkVector = m_stimulationChunkBuffers[i];
|
||||
|
||||
// Send a signal chunk
|
||||
uint32_t& chunk = m_state.m_CurrentChunkIdx;
|
||||
if (chunk < chunkVector.size())
|
||||
{
|
||||
// we write the signal memory buffer
|
||||
const IMemoryBuffer* iBuffer = chunkVector[chunk].m_Buffer;
|
||||
IMemoryBuffer* oBuffer = boxContext.getOutputChunk(0);
|
||||
oBuffer->setSize(iBuffer->getSize(), true);
|
||||
memcpy(oBuffer->getDirectPointer(), iBuffer->getDirectPointer(), iBuffer->getSize());
|
||||
boxContext.markOutputAsReadyToSend(0, chunkVector[chunk].m_StartTime, chunkVector[chunk].m_EndTime);
|
||||
|
||||
/*
|
||||
if(CTime(chunkVector[chunk].m_StartTime).toSeconds()>236)
|
||||
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Info << "Adding signalchunk " << i << "," << chunk << " ["
|
||||
<< CTime(chunkVector[chunk].m_StartTime) << ", " << CTime(chunkVector[chunk].m_EndTime) << "\n";
|
||||
}
|
||||
*/
|
||||
|
||||
const uint64_t signalChunkEnd = chunkVector[chunk].m_EndTime;
|
||||
|
||||
// Write stimulations up to this point
|
||||
for (uint32_t& k = m_state.m_CurrentStimulationIdx; k < stimulusChunkVector.size() && stimulusChunkVector[k].m_EndTime <= signalChunkEnd; ++k)
|
||||
{
|
||||
const SStimulationChunk& stimChunk = stimulusChunkVector[k];
|
||||
const IStimulationSet* bufferedStimSet = stimChunk.m_StimulationSet;
|
||||
|
||||
IStimulationSet* stimSet = m_stimulationEncoder.getInputStimulationSet();
|
||||
stimSet->clear();
|
||||
|
||||
if (bufferedStimSet)
|
||||
{
|
||||
for (size_t s = 0; s < bufferedStimSet->getStimulationCount(); ++s)
|
||||
{
|
||||
stimSet->appendStimulation(bufferedStimSet->getStimulationIdentifier(s), bufferedStimSet->getStimulationDate(s),
|
||||
bufferedStimSet->getStimulationDuration(s));
|
||||
|
||||
this->getLogManager() << Kernel::LogLevel_Trace << "Adding stimulation " << bufferedStimSet->getStimulationIdentifier(s)
|
||||
<< " at date [" << CTime(stimSet->getStimulationDate(s))
|
||||
<< "] to chunk [" << CTime(stimChunk.m_StartTime)
|
||||
<< ", " << CTime(stimChunk.m_EndTime)
|
||||
<< "]\n";
|
||||
}
|
||||
}
|
||||
|
||||
// encode the stim memory buffer even if it is empty
|
||||
m_stimulationEncoder.encodeBuffer();
|
||||
boxContext.markOutputAsReadyToSend(1, stimChunk.m_StartTime, stimChunk.m_EndTime);
|
||||
/*
|
||||
if(CTime(stimChunk.m_StartTime).toSeconds()>238 &&
|
||||
CTime(stimChunk.m_StartTime).toSeconds()<242)
|
||||
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Info << "Adding stimchunk " << i << "," << k << " ["
|
||||
<< CTime(stimChunk.m_StartTime)
|
||||
<< ", " << CTime(stimChunk.m_EndTime)
|
||||
<< "\n";
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
// Let the kernel send blocks up to now, prevent freezing up sending everything at once
|
||||
chunk++;
|
||||
return false;
|
||||
}
|
||||
|
||||
// For now we don't support stimuli that don't correspond to signal data, these ones are after the last signal chunk
|
||||
for (uint32_t& k = m_state.m_CurrentStimulationIdx; k < stimulusChunkVector.size(); ++k)
|
||||
{
|
||||
const SStimulationChunk& stimChunk = stimulusChunkVector[k];
|
||||
const IStimulationSet* bufferedStimSet = stimChunk.m_StimulationSet;
|
||||
|
||||
if (i == m_signalChunkBuffers.size() - 1)
|
||||
{
|
||||
// last file, let pass
|
||||
|
||||
IStimulationSet* stimSet = m_stimulationEncoder.getInputStimulationSet();
|
||||
stimSet->clear();
|
||||
|
||||
if (bufferedStimSet)
|
||||
{
|
||||
for (size_t s = 0; s < bufferedStimSet->getStimulationCount(); ++s)
|
||||
{
|
||||
stimSet->appendStimulation(bufferedStimSet->getStimulationIdentifier(s), bufferedStimSet->getStimulationDate(s),
|
||||
bufferedStimSet->getStimulationDuration(s));
|
||||
|
||||
this->getLogManager() << Kernel::LogLevel_Warning << "Stimulation " << bufferedStimSet->getStimulationIdentifier(s)
|
||||
<< " at date [" << CTime(stimSet->getStimulationDate(s))
|
||||
<< "] in chunk [" << CTime(stimChunk.m_StartTime)
|
||||
<< ", " << CTime(stimChunk.m_EndTime)
|
||||
<< "] is after signal ended, but last file, so adding.\n";
|
||||
}
|
||||
}
|
||||
|
||||
// encode the stim memory buffer even if it is empty
|
||||
m_stimulationEncoder.encodeBuffer();
|
||||
boxContext.markOutputAsReadyToSend(1, stimChunk.m_StartTime, stimChunk.m_EndTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bufferedStimSet)
|
||||
{
|
||||
for (size_t s = 0; s < bufferedStimSet->getStimulationCount(); ++s)
|
||||
{
|
||||
if (!chunkVector.empty())
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Warning
|
||||
<< "Stimulation " << bufferedStimSet->getStimulationIdentifier(s)
|
||||
<< "'s chunk at [" << CTime(stimChunk.m_StartTime)
|
||||
<< ", " << CTime(stimChunk.m_EndTime)
|
||||
<< "] is after the last signal chunk end time " << CTime(chunkVector.back().m_EndTime)
|
||||
<< ", discarded.\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Finished with the file
|
||||
|
||||
// if(stimChunk.m_EndTime < chunkVector[m_CurrentChunkIdx].m_EndTime)
|
||||
// {
|
||||
// There is no corresponding signal anymore, skip the rest of the stimulations from this file
|
||||
//this->getLogManager() << Kernel::LogLevel_Info << "Stimulus time " << CTime(stimulusChunkVector[j].m_EndTime)
|
||||
// << " exceeds the last signal buffer end time " << CTime(chunkVector[chunkVector.size()-1].m_EndTime)
|
||||
// << "\n";
|
||||
//break;
|
||||
//}
|
||||
m_state.m_CurrentChunkIdx = 0;
|
||||
m_state.m_CurrentStimulationIdx = 0;
|
||||
|
||||
this->getLogManager() << Kernel::LogLevel_Info << "File #" << i + 1 << " Finished.\n";
|
||||
}
|
||||
|
||||
//We search for the last file with data.
|
||||
for (uint32_t lastFile = m_signalChunkBuffers.size(); lastFile > 0; lastFile--)
|
||||
{
|
||||
const uint32_t lastChunkOfLastFile = m_signalChunkBuffers[lastFile - 1].size();
|
||||
if (lastChunkOfLastFile != 0)
|
||||
{
|
||||
m_lastChunkEndTime = m_signalChunkBuffers[lastFile - 1][lastChunkOfLastFile - 1].m_EndTime;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
this->getLogManager() << Kernel::LogLevel_Info << "Concatenation finished !\n";
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
} // namespace FileIO
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+212
@@ -0,0 +1,212 @@
|
||||
#pragma once
|
||||
|
||||
#include <openvibe/ov_all.h>
|
||||
#include <toolkit/ovtk_all.h>
|
||||
|
||||
#include <vector>
|
||||
#include <list>
|
||||
// The unique identifiers for the box and its descriptor.
|
||||
// Identifier are randomly chosen by the skeleton-generator.
|
||||
#define OVP_ClassId_BoxAlgorithm_SignalConcatenation OpenViBE::CIdentifier(0x372F3A9D, 0x49E20CD2)
|
||||
#define OVP_ClassId_BoxAlgorithm_SignalConcatenationDesc OpenViBE::CIdentifier(0x372F3A9D, 0x49E20CD2)
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace FileIO {
|
||||
/**
|
||||
* \class CBoxAlgorithmSignalConcatenation
|
||||
* \author Laurent Bonnet (INRIA)
|
||||
* \date Tue Jun 28 09:52:48 2011
|
||||
* \brief The class CBoxAlgorithmSignalConcatenation describes the box Signal Concatenation.
|
||||
*
|
||||
*/
|
||||
class CBoxAlgorithmSignalConcatenation final : virtual public Toolkit::TBoxAlgorithm<IBoxAlgorithm>
|
||||
{
|
||||
public:
|
||||
void release() override { delete this; }
|
||||
|
||||
bool initialize() override;
|
||||
bool uninitialize() override;
|
||||
|
||||
bool processClock(Kernel::CMessageClock& msg) override;
|
||||
uint64_t getClockFrequency() override { return 8LL << 32; }
|
||||
|
||||
bool processInput(const size_t index) override;
|
||||
|
||||
|
||||
bool process() override;
|
||||
|
||||
_IsDerivedFromClass_Final_(Toolkit::TBoxAlgorithm<IBoxAlgorithm>, OVP_ClassId_BoxAlgorithm_SignalConcatenation)
|
||||
|
||||
protected:
|
||||
bool concate();
|
||||
bool m_finished = false;
|
||||
bool m_resynchroDone = false;
|
||||
uint64_t m_timeOut = 0;
|
||||
|
||||
bool m_headerSent = false;
|
||||
uint32_t m_headerReceivedCount = 0;
|
||||
uint32_t m_endReceivedCount = 0;
|
||||
bool m_stimHeaderSent = false;
|
||||
bool m_endSent = false;
|
||||
bool m_statsPrinted = false;
|
||||
|
||||
std::vector<uint64_t> m_eofStimulations;
|
||||
std::vector<bool> m_eofReached;
|
||||
|
||||
struct SChunk
|
||||
{
|
||||
IMemoryBuffer* m_Buffer;
|
||||
uint64_t m_StartTime;
|
||||
uint64_t m_EndTime;
|
||||
};
|
||||
|
||||
struct SStimulationChunk
|
||||
{
|
||||
IStimulationSet* m_StimulationSet;
|
||||
uint64_t m_StartTime;
|
||||
uint64_t m_EndTime;
|
||||
};
|
||||
|
||||
uint64_t m_stimChunkLength = 0;
|
||||
|
||||
// File end times
|
||||
std::vector<uint64_t> m_fileEndTimes;
|
||||
|
||||
// The signal buffers, one per file
|
||||
std::vector<std::vector<SChunk>> m_signalChunkBuffers;
|
||||
|
||||
std::vector<std::vector<SStimulationChunk>> m_stimulationChunkBuffers;
|
||||
|
||||
// The stimulations are stored in one stimulation set per file. The chunk are reconstructed.
|
||||
std::vector<IStimulationSet*> m_stimulationSets;
|
||||
|
||||
//The decoders, (1 signal/1 stim) per file
|
||||
std::vector<Toolkit::TStimulationDecoder<CBoxAlgorithmSignalConcatenation>*> m_stimulationDecoders;
|
||||
std::vector<Toolkit::TSignalDecoder<CBoxAlgorithmSignalConcatenation>*> m_signalDecoders;
|
||||
|
||||
// the encoders : signal, stim and trigger encoder.
|
||||
Toolkit::TSignalEncoder<CBoxAlgorithmSignalConcatenation> m_signalEncoder;
|
||||
Toolkit::TStimulationEncoder<CBoxAlgorithmSignalConcatenation> m_stimulationEncoder;
|
||||
Toolkit::TStimulationEncoder<CBoxAlgorithmSignalConcatenation> m_triggerEncoder;
|
||||
|
||||
uint64_t m_triggerDate = 0;
|
||||
uint64_t m_lastChunkStartTime = 0;
|
||||
uint64_t m_lastChunkEndTime = 0;
|
||||
|
||||
struct SConcatenationState
|
||||
{
|
||||
SConcatenationState() : m_CurrentFileIdx(0), m_CurrentChunkIdx(0), m_CurrentStimulationIdx(0) { }
|
||||
uint32_t m_CurrentFileIdx;
|
||||
uint32_t m_CurrentChunkIdx;
|
||||
uint32_t m_CurrentStimulationIdx;
|
||||
};
|
||||
|
||||
SConcatenationState m_state;
|
||||
};
|
||||
|
||||
|
||||
// The box listener can be used to call specific callbacks whenever the box structure changes : input added, name changed, etc.
|
||||
// Please uncomment below the callbacks you want to use.
|
||||
class CBoxAlgorithmSignalConcatenationListener final : public Toolkit::TBoxListener<IBoxListener>
|
||||
{
|
||||
public:
|
||||
|
||||
bool check(Kernel::IBox& box) const
|
||||
{
|
||||
for (uint32_t i = 0; i < box.getInputCount() >> 1; ++i)
|
||||
{
|
||||
box.setInputName(i * 2, ("Input signal " + std::to_string(i + 1)).c_str());
|
||||
box.setInputType(i * 2, OV_TypeId_Signal);
|
||||
|
||||
box.setInputName(i * 2 + 1, ("Input stimulations " + std::to_string(i + 1)).c_str());
|
||||
box.setInputType(i * 2 + 1, OV_TypeId_Stimulations);
|
||||
|
||||
box.setSettingName(i + 1, ("End-of-file stimulation for input " + std::to_string(i + 1)).c_str());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool onInputRemoved(Kernel::IBox& box, const size_t index) override
|
||||
{
|
||||
if (index & 1) { box.removeInput(index - 1); } // odd index
|
||||
else { box.removeInput(index); } // even index
|
||||
box.removeSetting(index >> 1);
|
||||
return this->check(box);
|
||||
}
|
||||
|
||||
bool onInputAdded(Kernel::IBox& box, const size_t /*index*/) override
|
||||
{
|
||||
box.addInput("", OV_TypeId_Stimulations);
|
||||
box.addSetting("",OV_TypeId_Stimulation, "OVTK_StimulationId_ExperimentStop");
|
||||
return this->check(box);
|
||||
}
|
||||
|
||||
_IsDerivedFromClass_Final_(Toolkit::TBoxListener<IBoxListener>, CIdentifier::undefined())
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* \class CBoxAlgorithmSignalConcatenationDesc
|
||||
* \author Laurent Bonnet (INRIA)
|
||||
* \date Tue Jun 28 09:52:48 2011
|
||||
* \brief Descriptor of the box Signal Concatenation.
|
||||
*
|
||||
*/
|
||||
class CBoxAlgorithmSignalConcatenationDesc final : virtual public IBoxAlgorithmDesc
|
||||
{
|
||||
public:
|
||||
|
||||
void release() override { }
|
||||
|
||||
CString getName() const override { return CString("Signal Concatenation"); }
|
||||
CString getAuthorName() const override { return CString("Laurent Bonnet"); }
|
||||
CString getAuthorCompanyName() const override { return CString("INRIA"); }
|
||||
CString getShortDescription() const override { return CString("Concatenates multiple signal streams"); }
|
||||
|
||||
CString getDetailedDescription() const override
|
||||
{
|
||||
return CString(
|
||||
"The signal stream concatenation box reads multiple streams in parallel, and produces a single stream that is the concatenation of all inputs.");
|
||||
}
|
||||
|
||||
CString getCategory() const override { return CString("File reading and writing"); }
|
||||
CString getVersion() const override { return CString("2.0"); }
|
||||
CString getStockItemName() const override { return CString("gtk-add"); }
|
||||
|
||||
CIdentifier getCreatedClass() const override { return OVP_ClassId_BoxAlgorithm_SignalConcatenation; }
|
||||
IPluginObject* create() override { return new CBoxAlgorithmSignalConcatenation; }
|
||||
|
||||
|
||||
IBoxListener* createBoxListener() const override { return new CBoxAlgorithmSignalConcatenationListener; }
|
||||
void releaseBoxListener(IBoxListener* listener) const override { delete listener; }
|
||||
|
||||
bool getBoxPrototype(Kernel::IBoxProto& prototype) const override
|
||||
{
|
||||
prototype.addInput("Input signal 1",OV_TypeId_Signal);
|
||||
prototype.addInput("Input stimulations 1",OV_TypeId_Stimulations);
|
||||
prototype.addInput("Input signal 2",OV_TypeId_Signal);
|
||||
prototype.addInput("Input stimulations 2",OV_TypeId_Stimulations);
|
||||
|
||||
prototype.addFlag(Kernel::BoxFlag_CanAddInput);
|
||||
|
||||
prototype.addOutput("Signal",OV_TypeId_Signal);
|
||||
prototype.addOutput("Stimulations",OV_TypeId_Stimulations);
|
||||
|
||||
prototype.addOutput("Status",OV_TypeId_Stimulations);
|
||||
|
||||
prototype.addSetting("Time out before assuming end-of-file (in sec)",OV_TypeId_Integer, "5");
|
||||
prototype.addSetting("End-of-file stimulation for input 1",OV_TypeId_Stimulation, "OVTK_StimulationId_ExperimentStop");
|
||||
prototype.addSetting("End-of-file stimulation for input 2",OV_TypeId_Stimulation, "OVTK_StimulationId_ExperimentStop");
|
||||
|
||||
//prototype.addFlag(OV_AttributeId_Box_FlagIsUnstable);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
_IsDerivedFromClass_Final_(IBoxAlgorithmDesc, OVP_ClassId_BoxAlgorithm_SignalConcatenationDesc)
|
||||
};
|
||||
} // namespace FileIO
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+824
@@ -0,0 +1,824 @@
|
||||
#include "ovpCGDFFileReader.h"
|
||||
|
||||
// @fixme memory leaks on errors
|
||||
|
||||
#include <iostream>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace FileIO {
|
||||
|
||||
// template<> double FileIO::CGDFFileReader::GDFTypeToFloat64<float>(float val, uint32_t channel) { std::cout << "specialized 1\n"; return val; }
|
||||
// template<> double FileIO::CGDFFileReader::GDFTypeToFloat64<double>(double val, uint32_t channel) { std::cout << "specialized 2\n"; return val; }
|
||||
|
||||
// #define DEBUG_FILE_POSITIONS 1
|
||||
|
||||
//Plugin Methods
|
||||
bool CGDFFileReader::initialize()
|
||||
{
|
||||
m_filename = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 0);
|
||||
m_samplesPerBuffer = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 1);
|
||||
m_translateByMinimum = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 2);
|
||||
|
||||
if (m_samplesPerBuffer == 0)
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Error <<
|
||||
"SamplesPerBuffer is 0, this will not work\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
m_xpInfoEncoder = new Toolkit::TExperimentInfoEncoder<CGDFFileReader>;
|
||||
m_xpInfoEncoder->initialize(*this, GDFReader_ExperimentInfoOutput);
|
||||
m_signalEncoder = new Toolkit::TSignalEncoder<CGDFFileReader>;
|
||||
m_signalEncoder->initialize(*this, GDFReader_SignalOutput);
|
||||
m_stimulationEncoder = new Toolkit::TStimulationEncoder<CGDFFileReader>;
|
||||
m_stimulationEncoder->initialize(*this, GDFReader_StimulationOutput);
|
||||
|
||||
|
||||
//allocate the structure used to store the experiment information
|
||||
m_xpInfoHeader = new CExperimentInfoHeader;
|
||||
|
||||
//opens the gdf file
|
||||
if (m_filename != CString(""))
|
||||
{
|
||||
m_file.open(m_filename.toASCIIString(), std::ios::binary);
|
||||
if (!m_file.good())
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Error << "Could not open file [" << m_filename << "]\n";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
m_file.seekg(0, std::ios::end);
|
||||
m_fileSize = size_t(m_file.tellg());
|
||||
m_file.seekg(0, std::ios::beg);
|
||||
|
||||
m_header3Length = 0;
|
||||
|
||||
// const char *filename = m_sFileName.toASCIIString();
|
||||
// this->getLogManager() << Kernel::LogLevel_Trace << "Opening [" << filename << "]\n";
|
||||
|
||||
//reads the gdf headers and sends the corresponding buffers
|
||||
const bool res = readFileHeader();
|
||||
|
||||
#ifdef DEBUG_FILE_POSITIONS
|
||||
this->getLogManager() << Kernel::LogLevel_Info << "After all headers, file is at " << m_file.tellg() << "\n";
|
||||
#endif
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
bool CGDFFileReader::uninitialize()
|
||||
{
|
||||
if (m_signalEncoder)
|
||||
{
|
||||
m_signalEncoder->uninitialize();
|
||||
delete m_signalEncoder;
|
||||
}
|
||||
if (m_xpInfoEncoder)
|
||||
{
|
||||
m_xpInfoEncoder->uninitialize();
|
||||
delete m_xpInfoEncoder;
|
||||
}
|
||||
if (m_stimulationEncoder)
|
||||
{
|
||||
m_stimulationEncoder->uninitialize();
|
||||
delete m_stimulationEncoder;
|
||||
}
|
||||
|
||||
|
||||
//desallocate all of the remaining buffers
|
||||
delete[] m_channelDataSize; //can be done before?
|
||||
delete[] m_channelType; //can be done before?
|
||||
delete[] m_channelScale;
|
||||
delete[] m_channelTranslate;
|
||||
delete[] m_dataRecordBuffer; //can be done before??
|
||||
delete[] m_channelDataInDataRecord;
|
||||
delete[] m_matrixBuffer; //can be done before?
|
||||
delete[] m_eventsPositionBuffer;
|
||||
delete[] m_eventsTypeBuffer;
|
||||
//Close the GDF file
|
||||
if (m_file) { m_file.close(); }
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGDFFileReader::processClock(Kernel::CMessageClock& msg)
|
||||
{
|
||||
if (m_signalDesc.m_Sampling == 0)
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Error << "Sampling rate is 0 - not supported.\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
const uint64_t time = CTime(m_signalDesc.m_Sampling, m_nSentSample + m_signalDesc.m_NSample).time();
|
||||
if (msg.getTime() > time) { getBoxAlgorithmContext()->markAlgorithmAsReadyToProcess(); }
|
||||
return true;
|
||||
}
|
||||
|
||||
void CGDFFileReader::gdfBufferToDoubleBuffer(double* out, void* in, const uint64_t size, const uint32_t channel)
|
||||
{
|
||||
switch (m_channelType[channel])
|
||||
{
|
||||
case GDF::ChannelType_int8_t:
|
||||
gdfTypeBufferToDoubleBuffer<int8_t>(out, reinterpret_cast<int8_t*>(in), size, channel);
|
||||
break;
|
||||
|
||||
case GDF::ChannelType_uint8_t:
|
||||
gdfTypeBufferToDoubleBuffer<uint8_t>(out, reinterpret_cast<uint8_t*>(in), size, channel);
|
||||
break;
|
||||
|
||||
case GDF::ChannelType_int16_t:
|
||||
gdfTypeBufferToDoubleBuffer<int16_t>(out, reinterpret_cast<int16_t*>(in), size, channel);
|
||||
break;
|
||||
|
||||
case GDF::ChannelType_uint16_t:
|
||||
gdfTypeBufferToDoubleBuffer<uint16_t>(out, reinterpret_cast<uint16_t*>(in), size, channel);
|
||||
break;
|
||||
|
||||
case GDF::ChannelType_int32_t:
|
||||
gdfTypeBufferToDoubleBuffer<int>(out, reinterpret_cast<int*>(in), size, channel);
|
||||
break;
|
||||
|
||||
case GDF::ChannelType_uint32_t:
|
||||
gdfTypeBufferToDoubleBuffer<uint32_t>(out, reinterpret_cast<uint32_t*>(in), size, channel);
|
||||
break;
|
||||
|
||||
case GDF::ChannelType_int64_t:
|
||||
gdfTypeBufferToDoubleBuffer<int64_t>(out, reinterpret_cast<int64_t*>(in), size, channel);
|
||||
break;
|
||||
|
||||
case GDF::ChannelType_uint64_t:
|
||||
gdfTypeBufferToDoubleBuffer<uint64_t>(out, reinterpret_cast<uint64_t*>(in), size, channel);
|
||||
break;
|
||||
|
||||
case GDF::ChannelType_float:
|
||||
gdfTypeBufferToDoubleBuffer<float>(out, reinterpret_cast<float*>(in), size, channel);
|
||||
break;
|
||||
|
||||
case GDF::ChannelType_double:
|
||||
gdfTypeBufferToDoubleBuffer<double>(out, reinterpret_cast<double*>(in), size, channel);
|
||||
break;
|
||||
|
||||
case GDF::ChannelType_float128:
|
||||
{
|
||||
//Not handled
|
||||
this->getLogManager() << Kernel::LogLevel_Warning << "This data type is currently not handled : float128.\n";
|
||||
m_errorOccurred = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case GDF::ChannelType_int24:
|
||||
{
|
||||
uint8_t* p = reinterpret_cast<uint8_t*>(in);
|
||||
|
||||
for (uint64_t i = 0; i < (size * 3); i += 3) { out[i] = gdfTypeToDouble(p[i] + (p[i + 1] << 8) + (p[i + 2] << 16), channel); }
|
||||
}
|
||||
break;
|
||||
|
||||
case GDF::ChannelType_uint24:
|
||||
{
|
||||
int8_t* p = reinterpret_cast<int8_t*>(in);
|
||||
|
||||
for (uint64_t i = 0; i < (size * 3); i += 3) { out[i] = gdfTypeToDouble(p[i] + (p[i + 1] << 8) + (p[i + 2] << 16), channel); }
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
//not handled
|
||||
this->getLogManager() << Kernel::LogLevel_Warning << "Invalid GDF data type!\n";
|
||||
m_errorOccurred = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool CGDFFileReader::readFileHeader()
|
||||
{
|
||||
Kernel::IBoxIO& boxIO = this->getDynamicBoxContext();
|
||||
|
||||
if (!m_xpInfoSent)
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Trace << "Reading experiment information\n";
|
||||
|
||||
//First reads the file type
|
||||
char type[3];
|
||||
char version[6]; // field has size 5, we add +1 for terminating NULL
|
||||
m_file.read(type, 3);
|
||||
|
||||
//if not a gdf file
|
||||
if (strncmp(type, "GDF", 3) != 0)
|
||||
{
|
||||
//Handle error
|
||||
this->getLogManager() << Kernel::LogLevel_Warning << "This is not a valid GDF File!\n";
|
||||
m_errorOccurred = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
m_file.read(version, 5);
|
||||
version[5] = 0; // The version is not NULL-terminated in the file, we terminate with NULL manually for atof.
|
||||
m_fileVersion = float(atof(&version[1]));
|
||||
|
||||
this->getLogManager() << Kernel::LogLevel_Debug << "File version parsed as " << m_fileVersion << "\n";
|
||||
|
||||
if (m_file.bad())
|
||||
{
|
||||
//Handle error
|
||||
this->getLogManager() << Kernel::LogLevel_Warning << "Error while reading file.\n";
|
||||
m_errorOccurred = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (m_fileVersion < 3)
|
||||
{
|
||||
GDF::CFixedGDFHeader* header;
|
||||
|
||||
if (m_fileVersion > 2.12) { header = new GDF::CFixedGDF251Header; }
|
||||
else if (m_fileVersion > 1.90) { header = new GDF::CFixedGDF2Header; }
|
||||
else { header = new GDF::CFixedGDF1Header; }
|
||||
|
||||
if (!header->read(m_file))
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Error <<
|
||||
"Failure to parse fixed header\n";
|
||||
m_errorOccurred = true;
|
||||
delete header;
|
||||
return false;
|
||||
}
|
||||
|
||||
// kludge: header should be 256 bytes long, make sure the file position is there now.
|
||||
if (m_fileVersion > 1.90) { m_file.seekg(256, std::ios_base::beg); }
|
||||
|
||||
m_xpInfoHeader->m_ExperimentID = header->getExperimentID();
|
||||
m_xpInfoHeader->m_ExperimentDate = header->getExperimentDate();
|
||||
m_xpInfoHeader->m_SubjectID = header->getSubjectID();
|
||||
m_xpInfoHeader->m_SubjectName = header->getSubjectName();
|
||||
m_xpInfoHeader->m_SubjectAge = header->getSubjectAge();
|
||||
m_xpInfoHeader->m_SubjectSex = header->getSubjectSex();
|
||||
|
||||
m_xpInfoHeader->m_LaboratoryID = header->getLaboratoryID();
|
||||
m_xpInfoHeader->m_LaboratoryName = header->getLaboratoryName();
|
||||
m_xpInfoHeader->m_TechnicianID = header->getTechnicianID();
|
||||
m_xpInfoHeader->m_TechnicianName = header->getTechnicianName();
|
||||
|
||||
//Experiment header ready to send now
|
||||
m_xpInfoHeader->m_ReadyToSend = true;
|
||||
|
||||
m_durationDataRecord = header->getDataRecordDuration();
|
||||
m_nDataRecords = header->getNDataRecords();
|
||||
|
||||
//this information is related to the signal
|
||||
m_nChannels = uint16_t(header->getChannelCount());
|
||||
m_signalDesc.m_NChannel = m_nChannels;
|
||||
|
||||
//Send the header
|
||||
writeExperimentInfo();
|
||||
|
||||
boxIO.markOutputAsReadyToSend(GDFReader_ExperimentInfoOutput, 0, 0);
|
||||
m_xpInfoSent = true;
|
||||
|
||||
|
||||
//not needed anymore
|
||||
delete header;
|
||||
delete m_xpInfoHeader;
|
||||
m_xpInfoHeader = nullptr;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Not a known GDF File version
|
||||
this->getLogManager() << Kernel::LogLevel_Error << "GDF file version " << m_fileVersion << " is not supported.\n";
|
||||
//Error handling
|
||||
m_errorOccurred = true;
|
||||
return false;
|
||||
}
|
||||
}//END of ExperimentHeader
|
||||
|
||||
if (!m_signalDescSent)
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Trace << "Reading signal description\n";
|
||||
|
||||
#ifdef DEBUG_FILE_POSITIONS
|
||||
this->getLogManager() << Kernel::LogLevel_Info << "Before variable header, file is at " << m_file.tellg() << "\n";
|
||||
#endif
|
||||
|
||||
//reads the whole variable header
|
||||
char* headerBuffer = new char[m_nChannels * 256];
|
||||
m_file.read(headerBuffer, m_nChannels * 256);
|
||||
|
||||
#ifdef DEBUG_FILE_POSITIONS
|
||||
this->getLogManager() << Kernel::LogLevel_Info << "After variable header, file is at " << m_file.tellg() << "\n";
|
||||
#endif
|
||||
|
||||
if (m_file.bad())
|
||||
{
|
||||
//Handle error
|
||||
this->getLogManager() << Kernel::LogLevel_Error << "Read error.\n";
|
||||
m_errorOccurred = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
m_signalDesc.m_ChannelNames.resize(m_nChannels);
|
||||
|
||||
//channel's signal gain/translation
|
||||
m_channelScale = new double[m_nChannels];
|
||||
m_channelTranslate = new double[m_nChannels];
|
||||
|
||||
double* physicalMin = reinterpret_cast<double*>(headerBuffer + (104 * m_nChannels));
|
||||
double* physicalMax = reinterpret_cast<double*>(headerBuffer + (112 * m_nChannels));
|
||||
int64_t* digitalMin = reinterpret_cast<int64_t*>(headerBuffer + (120 * m_nChannels)); // v1?
|
||||
int64_t* digitalMax = reinterpret_cast<int64_t*>(headerBuffer + (128 * m_nChannels));
|
||||
double* digitalMinD = reinterpret_cast<double*>(headerBuffer + (120 * m_nChannels)); // v2+
|
||||
double* digitalMaxD = reinterpret_cast<double*>(headerBuffer + (128 * m_nChannels));
|
||||
|
||||
for (uint16_t i = 0; i < m_nChannels; ++i)
|
||||
{
|
||||
if (m_fileVersion > 1.90) { m_channelScale[i] = (physicalMax[i] - physicalMin[i]) / (digitalMaxD[i] - digitalMinD[i]); }
|
||||
else { m_channelScale[i] = (physicalMax[i] - physicalMin[i]) / (digitalMax[i] - digitalMin[i]); }
|
||||
|
||||
if (m_translateByMinimum) { m_channelTranslate[i] = physicalMin[i]; }
|
||||
else { m_channelTranslate[i] = (physicalMax[i] + physicalMin[i]) / 2.0; }
|
||||
this->getLogManager() << Kernel::LogLevel_Debug << "Channel " << i << " physMin " << physicalMin[i] << " physMax " << physicalMax[i]
|
||||
<< " digMin " << digitalMin[i] << " digMax " << digitalMax[i]
|
||||
<< " digMinF " << digitalMinD[i] << " digMaxF " << digitalMaxD[i]
|
||||
<< " scale " << m_channelScale[i] << " trans " << m_channelTranslate[i] << "\n";
|
||||
}
|
||||
|
||||
//Check if all the channels have the same sampling rate
|
||||
uint32_t* nSamplesPerRecordArray = reinterpret_cast<uint32_t*>(headerBuffer + (216 * m_nChannels));
|
||||
|
||||
m_nSamplesPerRecord = nSamplesPerRecordArray[0];
|
||||
|
||||
for (uint16_t i = 1; i < m_nChannels; ++i)
|
||||
{
|
||||
//If all the channels don't have the same sampling rate
|
||||
if (m_nSamplesPerRecord != nSamplesPerRecordArray[i])
|
||||
{
|
||||
if (m_fileVersion > 1.90)
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Error <<
|
||||
"Interpreted GDF file to have channels with varying sampling rates, which is not supported.\n";
|
||||
this->getLogManager() << Kernel::LogLevel_Error << "This can be a misinterpretation of the newer GDF subformats. File claims to follow GDF "
|
||||
<< m_fileVersion << ".\n";
|
||||
}
|
||||
else { this->getLogManager() << Kernel::LogLevel_Error << "Can't handle GDF files with channels having different sampling rates!\n"; }
|
||||
m_errorOccurred = true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//type of the channels' data
|
||||
m_channelType = new uint32_t[m_nChannels];
|
||||
memcpy(m_channelType, headerBuffer + (220 * m_nChannels), m_nChannels * 4);
|
||||
|
||||
m_channelDataSize = new uint16_t[m_nChannels];
|
||||
|
||||
this->getLogManager() << Kernel::LogLevel_Debug << "Found " << m_nChannels << " channels...\n";
|
||||
for (uint16_t i = 0; i < m_nChannels; ++i)
|
||||
{
|
||||
//Find the data size for each channel
|
||||
//TODO use enum to specify each type's name
|
||||
m_channelDataSize[i] = GDF::GDFDataSize(m_channelType[i]);
|
||||
|
||||
//Here, we can compute the size of a data record, based on the type of each channel
|
||||
m_dataRecordSize += m_nSamplesPerRecord * m_channelDataSize[i];
|
||||
|
||||
//reads the channels names
|
||||
m_signalDesc.m_ChannelNames[i].assign(headerBuffer + (16 * i), 16);
|
||||
|
||||
this->getLogManager() << Kernel::LogLevel_Debug << " * Channel " << uint32_t(i + 1) << " : " << CString(
|
||||
m_signalDesc.m_ChannelNames[i].c_str()) << "\n";
|
||||
}
|
||||
|
||||
//This parameter is defined by the user of the plugin
|
||||
m_signalDesc.m_NSample = uint32_t(m_samplesPerBuffer);
|
||||
|
||||
//needs to be computed based on the duration of a data record and the number of samples in one of those data records
|
||||
m_signalDesc.m_Sampling = uint32_t(0.5 + (m_nSamplesPerRecord / m_durationDataRecord));
|
||||
|
||||
if (m_signalDesc.m_Sampling == 0)
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Error << "Sampling rate is 0 - not supported\n";
|
||||
m_errorOccurred = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
this->getLogManager() << Kernel::LogLevel_Debug << "Samples in file : " << m_nDataRecords * m_nSamplesPerRecord << " samples\n";
|
||||
this->getLogManager() << Kernel::LogLevel_Debug << "Sample count per buffer : " << m_samplesPerBuffer << "\n";
|
||||
this->getLogManager() << Kernel::LogLevel_Debug << "Sampling rate : " << m_signalDesc.m_Sampling << "\n";
|
||||
|
||||
//computes clock frequency
|
||||
if (m_samplesPerBuffer <= m_signalDesc.m_Sampling)
|
||||
{
|
||||
if (m_signalDesc.m_Sampling % m_samplesPerBuffer != 0)
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Warning << "The sampling rate isn't a multiple of the buffer size\n";
|
||||
this->getLogManager() << Kernel::LogLevel_Warning << "Please consider adjusting the GDFReader settings to correct this!\n";
|
||||
this->getLogManager() << Kernel::LogLevel_Warning << "Sampling rate was " << m_signalDesc.m_Sampling << "\n";
|
||||
this->getLogManager() << Kernel::LogLevel_Warning << "Buffer size was " << m_samplesPerBuffer << "\n";
|
||||
}
|
||||
|
||||
// Intentional parameter swap to get the frequency
|
||||
m_clockFrequency = CTime(m_samplesPerBuffer, m_signalDesc.m_Sampling).time();
|
||||
}
|
||||
|
||||
// We may need to skip header3 with its tags and take its size into account
|
||||
if (m_fileVersion >= 2.10)
|
||||
{
|
||||
#ifdef DEBUG_FILE_POSITIONS
|
||||
this->getLogManager() << Kernel::LogLevel_Info << "Before header3, file is at " << m_file.tellg() << "\n";
|
||||
#endif
|
||||
|
||||
m_header3Length = 0;
|
||||
|
||||
while (true)
|
||||
{
|
||||
char buffer[4];
|
||||
m_file.read((char*)&buffer, 4); // Curious Cast
|
||||
if (m_file.bad() || m_file.eof()) { break; }
|
||||
m_header3Length += 4;
|
||||
|
||||
uint32_t tag = buffer[0];
|
||||
uint32_t length = (uint32_t(buffer[1]) << 0) + (uint32_t(buffer[2]) << 8) + (uint32_t(buffer[3]) << 16); // src is uint24
|
||||
|
||||
this->getLogManager() << Kernel::LogLevel_Info << "Found tag " << tag << " at pos " << int64_t(m_file.tellg() - std::streamoff(4))
|
||||
<< " [length " << length << "], skipping content.\n";
|
||||
|
||||
if (tag == 0) { break; }
|
||||
m_file.seekg(std::streamoff(length), std::ios_base::cur);
|
||||
m_header3Length += length;
|
||||
}
|
||||
// Skip possible padding
|
||||
const uint64_t paddingRequired = (256 - m_header3Length) % 256;
|
||||
m_header3Length += paddingRequired;
|
||||
m_file.seekg(paddingRequired, std::ios::cur);
|
||||
|
||||
if (m_file.eof() || m_file.tellg() <= 0)
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Error << "File ended by trying to skip the header.\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifdef DEBUG_FILE_POSITIONS
|
||||
this->getLogManager() << Kernel::LogLevel_Info << "After header3, file is at " << m_file.tellg() << ". Header length: " << m_header3Length << ", padding was " << paddingRequired << "\n";
|
||||
#endif
|
||||
}
|
||||
|
||||
//Send the data to the output
|
||||
writeSignalInformation();
|
||||
boxIO.markOutputAsReadyToSend(GDFReader_SignalOutput, 0, 0);
|
||||
|
||||
delete[] headerBuffer;
|
||||
|
||||
m_signalDescSent = true;
|
||||
}//END of SignalHeader
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CGDFFileReader::writeExperimentInfo() const
|
||||
{
|
||||
// Here we have to declare some variables in the same scope as the encoding call, because otherwise they might be freed before the
|
||||
// encoder gets to process the data. The point of these is just to convert from std::string to CString as needed by the encoder.
|
||||
CString date(m_xpInfoHeader->m_ExperimentDate.c_str());
|
||||
CString name(m_xpInfoHeader->m_SubjectName.c_str());
|
||||
CString labName(m_xpInfoHeader->m_LaboratoryName.c_str());
|
||||
CString techName(m_xpInfoHeader->m_TechnicianName.c_str());
|
||||
|
||||
if (m_xpInfoHeader->m_ExperimentID != NO_VALUE_I) { m_xpInfoEncoder->getInputExperimentID() = m_xpInfoHeader->m_ExperimentID; }
|
||||
if (m_xpInfoHeader->m_ExperimentDate != NO_VALUE_S) { m_xpInfoEncoder->getInputExperimentDate() = &date; }
|
||||
if (m_xpInfoHeader->m_SubjectID != NO_VALUE_I) { m_xpInfoEncoder->getInputSubjectID() = m_xpInfoHeader->m_SubjectID; }
|
||||
if (m_xpInfoHeader->m_SubjectName != NO_VALUE_S) { m_xpInfoEncoder->getInputSubjectName() = &name; }
|
||||
if (m_xpInfoHeader->m_SubjectAge != NO_VALUE_I) { m_xpInfoEncoder->getInputSubjectAge() = m_xpInfoHeader->m_SubjectAge; }
|
||||
if (m_xpInfoHeader->m_SubjectSex != NO_VALUE_I) { m_xpInfoEncoder->getInputSubjectGender() = m_xpInfoHeader->m_SubjectSex; }
|
||||
if (m_xpInfoHeader->m_LaboratoryID != NO_VALUE_I) { m_xpInfoEncoder->getInputLaboratoryID() = m_xpInfoHeader->m_LaboratoryID; }
|
||||
if (m_xpInfoHeader->m_LaboratoryName != NO_VALUE_S) { m_xpInfoEncoder->getInputLaboratoryName() = &labName; }
|
||||
if (m_xpInfoHeader->m_TechnicianID != NO_VALUE_I) { m_xpInfoEncoder->getInputTechnicianID() = m_xpInfoHeader->m_TechnicianID; }
|
||||
if (m_xpInfoHeader->m_TechnicianName != NO_VALUE_S) { m_xpInfoEncoder->getInputTechnicianName() = &techName; }
|
||||
|
||||
m_xpInfoEncoder->encodeHeader();
|
||||
}
|
||||
|
||||
void CGDFFileReader::writeSignalInformation()
|
||||
{
|
||||
m_signalEncoder->getInputSamplingRate() = m_signalDesc.m_Sampling;
|
||||
|
||||
CMatrix* iMatrix = m_signalEncoder->getInputMatrix();
|
||||
iMatrix->resize(m_signalDesc.m_NChannel, m_signalDesc.m_NSample);
|
||||
|
||||
for (uint32_t i = 0; i < m_signalDesc.m_NChannel; ++i) { iMatrix->setDimensionLabel(0, i, m_signalDesc.m_ChannelNames[i].c_str()); }
|
||||
|
||||
m_signalEncoder->encodeHeader();
|
||||
}
|
||||
|
||||
void CGDFFileReader::writeEvents()
|
||||
{
|
||||
IStimulationSet* stimSet = m_stimulationEncoder->getInputStimulationSet();
|
||||
stimSet->clear();
|
||||
|
||||
for (size_t i = 0; i < m_events.size(); ++i)
|
||||
{
|
||||
//compute date
|
||||
const uint64_t date = CTime(m_signalDesc.m_Sampling, m_events[i].m_Position).time();
|
||||
stimSet->appendStimulation(m_events[i].m_Type, date, 0);
|
||||
}
|
||||
|
||||
m_stimulationEncoder->encodeBuffer();
|
||||
}
|
||||
|
||||
bool CGDFFileReader::process()
|
||||
{
|
||||
//Don't do anything if an error as occurred while reading the input file
|
||||
//for instance, if the file has channels with different sampling rates
|
||||
if (m_errorOccurred)
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Error << "Some error occurred, aborting.";
|
||||
return false;
|
||||
}
|
||||
|
||||
uint64_t start = 0;
|
||||
uint64_t end = 0;
|
||||
|
||||
Kernel::IBoxIO& boxIO = this->getDynamicBoxContext();
|
||||
|
||||
// Process Matrices
|
||||
if (m_signalDescSent && !m_matricesSent)
|
||||
{
|
||||
//If the matrix buffer is not allocated yet
|
||||
//"first time"
|
||||
if (!m_matrixBuffer)
|
||||
{
|
||||
//output matrix buffer
|
||||
m_matrixBufferSize = m_signalDesc.m_NSample * m_signalDesc.m_NChannel;
|
||||
m_matrixBuffer = new double[size_t(m_matrixBufferSize)];
|
||||
|
||||
//We also have to read the first data record
|
||||
m_dataRecordBuffer = new uint8_t[size_t(m_dataRecordSize)];
|
||||
m_file.read(reinterpret_cast<char*>(m_dataRecordBuffer), std::streamsize(m_dataRecordSize));
|
||||
|
||||
if (m_file.bad())
|
||||
{
|
||||
//Handle error
|
||||
this->getLogManager() << Kernel::LogLevel_Error <<
|
||||
"Read error\n";
|
||||
m_errorOccurred = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
//initialize subpointers
|
||||
m_channelDataInDataRecord = new uint8_t*[m_nChannels];
|
||||
|
||||
m_channelDataInDataRecord[0] = m_dataRecordBuffer;
|
||||
for (int i = 1; i < m_nChannels; ++i)
|
||||
{
|
||||
m_channelDataInDataRecord[i] = m_channelDataInDataRecord[i - 1] + m_channelDataSize[i - 1] * m_nSamplesPerRecord;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t nSample = 0;
|
||||
bool readyToSend = false;
|
||||
|
||||
while (!readyToSend)
|
||||
{
|
||||
//there is the same number of samples
|
||||
const uint64_t samplesRemainingInDataRecord = m_nSamplesPerRecord - m_currentSampleInDataRecord;
|
||||
|
||||
//If there is enough data in the current data record to read a matrix buffer
|
||||
if ((m_samplesPerBuffer - nSample) <= samplesRemainingInDataRecord)
|
||||
{
|
||||
for (int i = 0; i < m_nChannels; ++i)
|
||||
{
|
||||
//reads m_samplesPerBuffer samples and converts/writes them in output buffer
|
||||
gdfBufferToDoubleBuffer(m_matrixBuffer + (i * m_samplesPerBuffer) + nSample,
|
||||
m_channelDataInDataRecord[i] + (m_currentSampleInDataRecord * m_channelDataSize[i]),
|
||||
m_samplesPerBuffer - nSample, i);
|
||||
}
|
||||
|
||||
m_currentSampleInDataRecord += uint32_t(m_samplesPerBuffer - nSample);
|
||||
|
||||
//Prepares for the next matrix
|
||||
nSample = 0;
|
||||
|
||||
//We can send the matrix
|
||||
readyToSend = true;
|
||||
}
|
||||
//Not enough data in the current data record. Read the remaining samples, then load a new data record and read the rest
|
||||
else
|
||||
{
|
||||
//copy what is remaining in the current buffer
|
||||
for (int i = 0; i < m_nChannels; ++i)
|
||||
{
|
||||
gdfBufferToDoubleBuffer(m_matrixBuffer + (i * m_samplesPerBuffer) + nSample,
|
||||
m_channelDataInDataRecord[i] + (m_currentSampleInDataRecord * m_channelDataSize[i]),
|
||||
samplesRemainingInDataRecord, i);
|
||||
}
|
||||
|
||||
//Updates the index in the output matrix
|
||||
nSample += uint32_t(samplesRemainingInDataRecord);
|
||||
|
||||
//reads the next data record if there is one
|
||||
if (m_currentDataRecord < m_nDataRecords - 1)
|
||||
{
|
||||
//reads a data record
|
||||
m_file.read(reinterpret_cast<char*>(m_dataRecordBuffer), std::streamsize(m_dataRecordSize));
|
||||
|
||||
if (m_file.bad())
|
||||
{
|
||||
//Handle error
|
||||
this->getLogManager() << Kernel::LogLevel_Error <<
|
||||
"Read error\n";
|
||||
m_errorOccurred = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
m_currentSampleInDataRecord = 0;
|
||||
m_currentDataRecord++;
|
||||
}
|
||||
//if there are no more data records
|
||||
else
|
||||
{
|
||||
//we can (for instance) pad the rest of the matrix with 0s
|
||||
for (int i = 0; i < m_nChannels; ++i)
|
||||
{
|
||||
memset(m_matrixBuffer + (((i * m_samplesPerBuffer) + nSample)), 0, size_t(m_samplesPerBuffer - nSample) * sizeof(double));
|
||||
}
|
||||
|
||||
//We can send the matrix
|
||||
readyToSend = true;
|
||||
//No more data after that
|
||||
m_matricesSent = true;
|
||||
}
|
||||
}
|
||||
|
||||
//Check if we have finished the current data record
|
||||
if (m_currentSampleInDataRecord == m_nSamplesPerRecord)
|
||||
{
|
||||
m_currentSampleInDataRecord = 0;
|
||||
m_currentDataRecord++;
|
||||
|
||||
//if there are no more data records
|
||||
if (m_currentDataRecord >= m_nDataRecords - 1)
|
||||
{
|
||||
//We don't have to read data records anymore
|
||||
m_matricesSent = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
//reads a data record
|
||||
m_file.read(reinterpret_cast<char*>(m_dataRecordBuffer), std::streamsize(m_dataRecordSize));
|
||||
|
||||
if (m_file.bad())
|
||||
{
|
||||
//Handle error
|
||||
this->getLogManager() << Kernel::LogLevel_Error <<
|
||||
"Read error\n";
|
||||
m_errorOccurred = true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_nSentSample += m_signalDesc.m_NSample;
|
||||
|
||||
// this->getLogManager() << Kernel::LogLevel_Trace << "Sent " << m_nSentSample << " samples\n";
|
||||
|
||||
//A signal matrix is ready to be output
|
||||
|
||||
start = CTime(m_signalDesc.m_Sampling, uint64_t(m_nSentSample - m_signalDesc.m_NSample)).time();
|
||||
end = CTime(m_signalDesc.m_Sampling, uint64_t(m_nSentSample)).time();
|
||||
|
||||
CMatrix* iMatrix = m_signalEncoder->getInputMatrix();
|
||||
double* buffer = iMatrix->getBuffer();
|
||||
for (uint32_t i = 0; i < iMatrix->getBufferElementCount(); ++i) { buffer[i] = *(m_matrixBuffer + i); }
|
||||
m_signalEncoder->encodeBuffer();
|
||||
boxIO.markOutputAsReadyToSend(GDFReader_SignalOutput, start, end);
|
||||
}
|
||||
|
||||
//Events
|
||||
if (m_signalDescSent && !m_eventsSent)
|
||||
{
|
||||
//reads the events table header if it hasn't been done already
|
||||
if (!m_eventsPositionBuffer)
|
||||
{
|
||||
const std::streamoff backupPos = m_file.tellg();
|
||||
const std::streamoff eventDataPos = std::streamoff((256 * (m_nChannels + 1)) + m_header3Length + (m_nDataRecords * m_dataRecordSize));
|
||||
|
||||
//checks if there are event information
|
||||
if (size_t(eventDataPos) + 1 < m_fileSize)
|
||||
{
|
||||
m_file.seekg(eventDataPos);
|
||||
|
||||
//reads the event table mode
|
||||
m_file >> m_eventTableMode;
|
||||
}
|
||||
//no event information
|
||||
else
|
||||
{
|
||||
m_file.seekg(backupPos);
|
||||
|
||||
m_eventsSent = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
uint32_t eventTableHeaderMain[7];
|
||||
uint8_t* eventTableHeader = reinterpret_cast<uint8_t*>(eventTableHeaderMain);
|
||||
memset(eventTableHeaderMain, 0, sizeof(eventTableHeaderMain));
|
||||
m_file.read(reinterpret_cast<char*>(eventTableHeader), 7);
|
||||
|
||||
if (m_fileVersion > 1.90) { m_nEvents = *(reinterpret_cast<uint32_t*>(eventTableHeader + 0)); }
|
||||
else { m_nEvents = *(reinterpret_cast<uint32_t*>(eventTableHeader + 3)); }
|
||||
|
||||
this->getLogManager() << Kernel::LogLevel_Trace << "The file has " << m_nEvents << " events\n";
|
||||
|
||||
m_eventsPositionBuffer = new uint32_t[m_nEvents * 4];
|
||||
m_eventsTypeBuffer = new uint16_t[m_nEvents * 2];
|
||||
|
||||
//we have to read all the events' position and type
|
||||
m_file.read(reinterpret_cast<char*>(m_eventsPositionBuffer), m_nEvents * 4);
|
||||
m_file.read(reinterpret_cast<char*>(m_eventsTypeBuffer), m_nEvents * 2);
|
||||
|
||||
m_file.seekg(backupPos);
|
||||
|
||||
// Sanity check the events & shift -1 sample
|
||||
for (uint32_t i = 0; i < m_nEvents; ++i)
|
||||
{
|
||||
// GDF Spec v2.51, #33: sample indexing starts from 1, hence here we compensate with -1 as in OV the first sample is in index 0
|
||||
if (m_eventsPositionBuffer[i] > 0) { m_eventsPositionBuffer[i]--; }
|
||||
|
||||
if (m_eventsPositionBuffer[i] >= (m_nDataRecords * m_nSamplesPerRecord))
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Warning << "File has stimulation " << m_eventsTypeBuffer[i] << " at sample count "
|
||||
<< m_eventsPositionBuffer[i] << " but the file has only " << (m_nDataRecords * m_nSamplesPerRecord)
|
||||
<< " samples of signal. Stimulation will be dropped.\n";
|
||||
// Note that with the current design of this box its not possible to keep producing stimulation chunks after the signal has ended, and
|
||||
// it'd be an openvibe stream convention violation to append the stimulation at t to any chunk where t \notin [chunkStart,chunkEnd].
|
||||
// Hence drop.
|
||||
}
|
||||
}
|
||||
|
||||
m_stimulationEncoder->encodeHeader();
|
||||
boxIO.markOutputAsReadyToSend(GDFReader_StimulationOutput, 0, 0);
|
||||
}
|
||||
|
||||
GDF::CGDFEvent event;
|
||||
//todo check inclusive/exclusive conditions
|
||||
while ((m_currentEvent != m_nEvents)
|
||||
&& m_eventsPositionBuffer[m_currentEvent] >= m_nSentSample - m_signalDesc.m_NSample
|
||||
&& m_eventsPositionBuffer[m_currentEvent] < m_nSentSample) // In current chunk range
|
||||
{
|
||||
//reads an event
|
||||
event.m_Position = m_eventsPositionBuffer[m_currentEvent];
|
||||
event.m_Type = m_eventsTypeBuffer[m_currentEvent];
|
||||
|
||||
//adds it to the list of events
|
||||
m_events.push_back(event);
|
||||
|
||||
// If input already has an EOF marker, we don't add our own
|
||||
if (event.m_Type == OVTK_StimulationId_EndOfFile) { m_appendEOF = false; }
|
||||
|
||||
m_currentEvent++;
|
||||
}
|
||||
|
||||
//if we just read the last event
|
||||
if (m_currentEvent == m_nEvents)
|
||||
{
|
||||
m_eventsSent = true;
|
||||
delete[] m_eventsPositionBuffer;
|
||||
m_eventsPositionBuffer = nullptr;
|
||||
delete[] m_eventsTypeBuffer;
|
||||
m_eventsTypeBuffer = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
// Send out stims. Logic:
|
||||
// If we haven't yet sent out all matrices, or we have a pending EOF stim, send a stim chunk
|
||||
// If we have sent out all matrices and we have a pending EOF, append it
|
||||
if (!m_matricesSent || m_appendEOF)
|
||||
{
|
||||
if (m_matricesSent && m_appendEOF)
|
||||
{
|
||||
//creates an end of file event
|
||||
GDF::CGDFEvent event;
|
||||
event.m_Position = uint32_t(m_nDataRecords * m_nSamplesPerRecord);
|
||||
event.m_Type = OVTK_StimulationId_EndOfFile;
|
||||
|
||||
//adds it to the list of events
|
||||
m_events.push_back(event);
|
||||
|
||||
m_appendEOF = false;
|
||||
}
|
||||
|
||||
// In OpenViBE, we should always send a stimulus chunk even if it was empty
|
||||
writeEvents();
|
||||
m_events.clear();
|
||||
|
||||
boxIO.markOutputAsReadyToSend(GDFReader_StimulationOutput, start, end);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace FileIO
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+214
@@ -0,0 +1,214 @@
|
||||
#pragma once
|
||||
|
||||
#include "../ovp_defines.h"
|
||||
#include "../ovp_gdf_helpers.h"
|
||||
|
||||
#include <openvibe/ov_all.h>
|
||||
#include <toolkit/ovtk_all.h>
|
||||
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#define GDFReader_ExperimentInfoOutput 0
|
||||
#define GDFReader_SignalOutput 1
|
||||
#define GDFReader_StimulationOutput 2
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace FileIO {
|
||||
|
||||
/// <summary> The GDF reader plugin main class. </summary>
|
||||
/// <seealso cref="Toolkit::TBoxAlgorithm{IBoxAlgorithm}" />
|
||||
class CGDFFileReader final : public Toolkit::TBoxAlgorithm<IBoxAlgorithm>
|
||||
{
|
||||
public:
|
||||
//Helper structures
|
||||
class CExperimentInfoHeader
|
||||
{
|
||||
public:
|
||||
uint64_t m_ExperimentID = 0;
|
||||
std::string m_ExperimentDate;
|
||||
|
||||
uint64_t m_SubjectID = 0;
|
||||
std::string m_SubjectName;
|
||||
uint64_t m_SubjectAge = 0;
|
||||
uint64_t m_SubjectSex = 0;
|
||||
|
||||
uint64_t m_LaboratoryID = 0;
|
||||
std::string m_LaboratoryName;
|
||||
uint64_t m_TechnicianID = 0;
|
||||
std::string m_TechnicianName;
|
||||
|
||||
bool m_ReadyToSend = false;
|
||||
};
|
||||
|
||||
// Used to store information about the signal stream
|
||||
class CSignalDescription
|
||||
{
|
||||
public:
|
||||
CSignalDescription() = default;
|
||||
~CSignalDescription() = default;
|
||||
|
||||
size_t m_Version = 1;
|
||||
size_t m_Sampling = 0;
|
||||
size_t m_NChannel = 0;
|
||||
size_t m_NSample = 0;
|
||||
std::vector<std::string> m_ChannelNames;
|
||||
size_t m_CurrentChannel = 0;
|
||||
|
||||
bool m_ReadyToSend = false;
|
||||
};
|
||||
|
||||
CGDFFileReader() { }
|
||||
|
||||
void release() override {}
|
||||
bool initialize() override;
|
||||
bool uninitialize() override;
|
||||
|
||||
uint64_t getClockFrequency() override { return m_clockFrequency; }
|
||||
bool processClock(Kernel::CMessageClock& msg) override;
|
||||
bool process() override;
|
||||
|
||||
_IsDerivedFromClass_Final_(IBoxAlgorithm, OVP_ClassId_GDFFileReader)
|
||||
|
||||
protected:
|
||||
|
||||
bool m_errorOccurred = false; // true if an error has occurred while reading the GDF file
|
||||
|
||||
//The GDF filename and handle
|
||||
CString m_filename;
|
||||
std::ifstream m_file;
|
||||
size_t m_fileSize = 0;
|
||||
uint64_t m_header3Length = 0;
|
||||
|
||||
float m_fileVersion = -1;
|
||||
|
||||
Toolkit::TSignalEncoder<CGDFFileReader>* m_signalEncoder = nullptr;
|
||||
Toolkit::TExperimentInfoEncoder<CGDFFileReader>* m_xpInfoEncoder = nullptr;
|
||||
Toolkit::TStimulationEncoder<CGDFFileReader>* m_stimulationEncoder = nullptr;
|
||||
|
||||
|
||||
//Stream information
|
||||
uint64_t m_samplesPerBuffer = 0; //user defined
|
||||
|
||||
//input
|
||||
uint64_t m_nDataRecords = 0;
|
||||
double m_durationDataRecord = 0;
|
||||
uint16_t m_nChannels = 0;
|
||||
|
||||
uint32_t m_nSamplesPerRecord = 0; // We only handle the files where it is the same for all the channels
|
||||
|
||||
//info about channel's data type in data record
|
||||
uint32_t* m_channelType = nullptr;
|
||||
uint16_t* m_channelDataSize = nullptr;
|
||||
double* m_channelScale = nullptr;
|
||||
double* m_channelTranslate = nullptr;
|
||||
|
||||
//Size of a data record
|
||||
uint64_t m_dataRecordSize = 0;
|
||||
|
||||
//The current data record's data
|
||||
uint8_t* m_dataRecordBuffer = nullptr;
|
||||
|
||||
//pointers to each channel's information in the current data record
|
||||
uint8_t** m_channelDataInDataRecord = nullptr;
|
||||
|
||||
//Output Stream matrix
|
||||
double* m_matrixBuffer = nullptr;
|
||||
uint64_t m_matrixBufferSize = 0;
|
||||
bool m_matricesSent = false;
|
||||
|
||||
//Total number of samples sent up to now (used to compute start/end time)
|
||||
uint32_t m_nSentSample = 0;
|
||||
|
||||
//indexes of current data record, channel, and sample
|
||||
uint64_t m_currentDataRecord = 0;
|
||||
uint32_t m_currentSampleInDataRecord = 0;
|
||||
|
||||
//Events variables
|
||||
uint8_t m_eventTableMode = 0; // mode of the event table
|
||||
uint32_t m_nEvents = 0; // number of events in the event table
|
||||
uint32_t* m_eventsPositionBuffer = nullptr; // pointer on the array of event's positions
|
||||
uint16_t* m_eventsTypeBuffer = nullptr; // pointer on the array of event's types
|
||||
|
||||
std::vector<GDF::CGDFEvent> m_events; //current stimulation block
|
||||
|
||||
uint32_t m_currentEvent = 0; // current event in event table
|
||||
bool m_eventsSent = false; // true if all the events have been sent
|
||||
bool m_appendEOF = true; // true if the file does contains a recognized EOF marker, then we add our own
|
||||
|
||||
uint64_t m_stimulationPerBuffer = 32; //user defined
|
||||
|
||||
//helper structures
|
||||
CExperimentInfoHeader* m_xpInfoHeader = nullptr;
|
||||
bool m_xpInfoSent = false;
|
||||
|
||||
CSignalDescription m_signalDesc;
|
||||
bool m_signalDescSent = false;
|
||||
|
||||
uint64_t m_clockFrequency = 0;
|
||||
|
||||
bool m_translateByMinimum = false;
|
||||
|
||||
bool readFileHeader();
|
||||
void writeExperimentInfo() const;
|
||||
void writeSignalInformation();
|
||||
void writeEvents();
|
||||
|
||||
template <class T>
|
||||
double gdfTypeToDouble(T val, const uint32_t channel) { return m_channelScale[channel] * double(val) + m_channelTranslate[channel]; }
|
||||
|
||||
template <class T>
|
||||
void gdfTypeBufferToDoubleBuffer(double* out, T* in, const uint64_t size, const uint32_t channel)
|
||||
{
|
||||
for (uint64_t i = 0; i < size; ++i) { out[i] = gdfTypeToDouble<T>(in[i], channel); }
|
||||
}
|
||||
|
||||
void gdfBufferToDoubleBuffer(double* out, void* in, const uint64_t size, const uint32_t channel);
|
||||
};
|
||||
|
||||
// template<> double CGDFFileReader::gdfTypeToDouble<float>(float val, uint32_t channel);
|
||||
// template<> double CGDFFileReader::gdfTypeToDouble<double>(double val, uint32_t channel);
|
||||
|
||||
/**
|
||||
* Description of the GDF Reader plugin
|
||||
*/
|
||||
class CGDFFileReaderDesc final : public IBoxAlgorithmDesc
|
||||
{
|
||||
public:
|
||||
|
||||
void release() override { }
|
||||
CString getName() const override { return CString("GDF file reader"); }
|
||||
CString getAuthorName() const override { return CString("Bruno Renier, Jussi T. Lindgren"); }
|
||||
CString getAuthorCompanyName() const override { return CString("INRIA/IRISA"); }
|
||||
CString getShortDescription() const override { return CString("GDF file reader"); }
|
||||
CString getDetailedDescription() const override { return CString("Reads .GDF format files"); }
|
||||
CString getCategory() const override { return CString("File reading and writing/GDF"); }
|
||||
CString getVersion() const override { return CString("0.9.1"); }
|
||||
CString getStockItemName() const override { return CString("gtk-open"); }
|
||||
|
||||
CIdentifier getCreatedClass() const override { return OVP_ClassId_GDFFileReader; }
|
||||
IPluginObject* create() override { return new CGDFFileReader(); }
|
||||
|
||||
bool getBoxPrototype(Kernel::IBoxProto& prototype) const override
|
||||
{
|
||||
// Adds box outputs
|
||||
prototype.addOutput("Experiment information", OV_TypeId_ExperimentInfo);
|
||||
prototype.addOutput("EEG stream", OV_TypeId_Signal);
|
||||
prototype.addOutput("Stimulations", OV_TypeId_Stimulations);
|
||||
|
||||
// Adds settings
|
||||
prototype.addSetting("Filename", OV_TypeId_Filename, "");
|
||||
prototype.addSetting("Samples per buffer", OV_TypeId_Integer, "32");
|
||||
prototype.addSetting("Subtract physical minimum", OV_TypeId_Boolean, "false");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
_IsDerivedFromClass_Final_(IBoxAlgorithmDesc, OVP_ClassId_GDFFileReaderDesc)
|
||||
};
|
||||
|
||||
} // namespace FileIO
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+436
@@ -0,0 +1,436 @@
|
||||
#include "ovpCGDFFileWriter.h"
|
||||
|
||||
#include <system/ovCMemory.h>
|
||||
|
||||
#include <iostream>
|
||||
#include <cmath>
|
||||
#include <cfloat>
|
||||
#include <cstring>
|
||||
#include <algorithm> // std::min, etc on VS2013
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace FileIO {
|
||||
|
||||
void CGDFFileWriter::setChannelCount(const size_t n)
|
||||
{
|
||||
m_fixedHeader.m_NSignals = n;
|
||||
m_fixedHeader.m_NBytesInHeaderRecord = (n + 1) * 256;
|
||||
|
||||
m_variableHeader.setChannelCount(n);
|
||||
m_samples.resize(n);
|
||||
m_nSamples.resize(n);
|
||||
}
|
||||
|
||||
void CGDFFileWriter::setChannelName(const size_t index, const char* name)
|
||||
{
|
||||
const uint32_t size = sizeof(m_variableHeader[index].m_Label);
|
||||
|
||||
// initialize label with spaces
|
||||
memset(m_variableHeader[index].m_Label, ' ', size);
|
||||
|
||||
// copy at most size-1 characters, leaving room for 1 space. Note that the label is not NULL terminated.
|
||||
const uint32_t len = std::min<uint32_t>(strlen(name), size - 1);
|
||||
memcpy(m_variableHeader[index].m_Label, name, len);
|
||||
|
||||
m_variableHeader[index].m_ChannelType = 17; //double
|
||||
m_variableHeader[index].m_NSamplesInEachRecord = 1;
|
||||
m_variableHeader[index].m_PhysicalMin = +DBL_MAX; //starting value(to compare later)
|
||||
m_variableHeader[index].m_PhysicalMax = -DBL_MAX; //starting value(to compare later)
|
||||
m_variableHeader[index].m_DigitalMin = 0x8000000000000000LL;
|
||||
m_variableHeader[index].m_DigitalMax = 0x7fffffffffffffffLL;
|
||||
|
||||
memcpy(m_variableHeader[index].m_PhysicalDimension, "uV", sizeof("uV"));
|
||||
}
|
||||
|
||||
void CGDFFileWriter::setSampleCountPerBuffer(const size_t n)
|
||||
{
|
||||
m_samplesPerChannel = n;
|
||||
|
||||
//save the fixed header
|
||||
if (m_fixedHeader.save(m_file))
|
||||
{
|
||||
//save the variable header
|
||||
if (!m_variableHeader.save(m_file)) { m_error = true; }
|
||||
}
|
||||
else { m_error = true; }
|
||||
|
||||
if (m_error) { this->getLogManager() << Kernel::LogLevel_Warning << "Error while writing to the output file!\n"; }
|
||||
}
|
||||
|
||||
void CGDFFileWriter::setSamplingRate(const size_t sampling)
|
||||
{
|
||||
m_sampling = sampling;
|
||||
|
||||
m_fixedHeader.m_DurationDataRecordNum = 1;
|
||||
m_fixedHeader.m_DurationDataRecordDen = m_sampling;
|
||||
}
|
||||
|
||||
void CGDFFileWriter::setSampleBuffer(const double* buffer)
|
||||
{
|
||||
//for each channel
|
||||
for (size_t j = 0; j < m_fixedHeader.m_NSignals; ++j)
|
||||
{
|
||||
for (size_t i = 0; i < m_samplesPerChannel; ++i)
|
||||
{
|
||||
//gets a sample value
|
||||
const double sample = buffer[j * m_samplesPerChannel + i];
|
||||
//actualize channel's digital min/max
|
||||
if (fabs(sample) > m_variableHeader[j].m_PhysicalMax)
|
||||
{
|
||||
m_variableHeader[j].m_PhysicalMax = fabs(sample + (1 / m_precision));
|
||||
m_variableHeader[j].m_PhysicalMin = -m_variableHeader[j].m_PhysicalMax;
|
||||
m_variableHeader[j].m_DigitalMax = int64_t(1 + (ceil(fabs(sample) * m_precision)));
|
||||
m_variableHeader[j].m_DigitalMin = -m_variableHeader[j].m_DigitalMax;
|
||||
}
|
||||
|
||||
//copy its current sample
|
||||
m_samples[j].push_back(sample * m_precision);
|
||||
}
|
||||
|
||||
//updates the sample count
|
||||
m_nSamples[j] += m_samplesPerChannel;
|
||||
}
|
||||
|
||||
// this->getLogManager() << Kernel::LogLevel_Info << "Received up to " << m_nSamples[0] << " samples\n";
|
||||
|
||||
//save in the file
|
||||
saveMatrixData();
|
||||
|
||||
//updates the fixed header
|
||||
m_fixedHeader.m_NDataRecords = m_nSamples[0];
|
||||
//updates the variable header
|
||||
if (m_fixedHeader.update(m_file)) { if (!m_variableHeader.update(m_file)) { m_error = true; } }
|
||||
else { m_error = true; }
|
||||
|
||||
if (m_error) { this->getLogManager() << Kernel::LogLevel_Warning << "Error while writing to the output file!\n"; }
|
||||
}
|
||||
|
||||
/*
|
||||
* Experiment callback
|
||||
*
|
||||
*/
|
||||
void CGDFFileWriter::setExperimentInfo()
|
||||
{
|
||||
uint64_t value = m_xpInfoDecoder->getOutputExperimentID();
|
||||
sprintf(m_fixedHeader.m_RecordingID, "0x%08X", value);
|
||||
m_fixedHeader.m_RecordingID[10] = ' ';
|
||||
|
||||
value = m_xpInfoDecoder->getOutputSubjectID();
|
||||
sprintf(m_fixedHeader.m_PatientID, "0x%08X ", value);
|
||||
m_fixedHeader.m_PatientID[11] = ' ';
|
||||
|
||||
|
||||
m_xpInfoDecoder->getOutputSubjectAge();
|
||||
// TODO using the experiment date, compute the birthdate?
|
||||
|
||||
value = m_xpInfoDecoder->getOutputSubjectGender();
|
||||
switch (value)
|
||||
{
|
||||
case OVTK_Value_Sex_Female:
|
||||
m_fixedHeader.m_PatientID[17] = 'F';
|
||||
break;
|
||||
|
||||
case OVTK_Value_Sex_Male:
|
||||
m_fixedHeader.m_PatientID[17] = 'M';
|
||||
break;
|
||||
|
||||
case OVTK_Value_Sex_Unknown:
|
||||
case OVTK_Value_Sex_NotSpecified:
|
||||
default:
|
||||
m_fixedHeader.m_PatientID[17] = 'X';
|
||||
break;
|
||||
}
|
||||
m_fixedHeader.m_PatientID[18] = ' ';
|
||||
|
||||
|
||||
value = m_xpInfoDecoder->getOutputLaboratoryID();
|
||||
m_fixedHeader.m_LaboratoryID = value;
|
||||
|
||||
|
||||
value = m_xpInfoDecoder->getOutputTechnicianID();
|
||||
m_fixedHeader.m_TechnicianID = value;
|
||||
|
||||
CString* subjectName = m_xpInfoDecoder->getOutputSubjectName();
|
||||
std::string formattedSubjectName((*subjectName).toASCIIString());
|
||||
formattedSubjectName.replace(formattedSubjectName.begin(), formattedSubjectName.end(), ' ', '_');
|
||||
sprintf(m_fixedHeader.m_PatientID + 31, "%s", formattedSubjectName.c_str());
|
||||
|
||||
if (!m_fixedHeader.save(m_file))
|
||||
{
|
||||
m_error = true;
|
||||
|
||||
this->getLogManager() << Kernel::LogLevel_Warning << "Error while writing to the output file!\n";
|
||||
}
|
||||
}
|
||||
|
||||
void CGDFFileWriter::setStimulation(const uint64_t identifier, const uint64_t date) { m_events.push_back(std::pair<uint64_t, uint64_t>(identifier, date)); }
|
||||
|
||||
|
||||
bool CGDFFileWriter::initialize()
|
||||
{
|
||||
m_signalDecoder = new Toolkit::TSignalDecoder<CGDFFileWriter>;
|
||||
m_xpInfoDecoder = new Toolkit::TExperimentInfoDecoder<CGDFFileWriter>;
|
||||
m_stimulationDecoder = new Toolkit::TStimulationDecoder<CGDFFileWriter>;
|
||||
|
||||
m_signalDecoder->initialize(*this, 1);
|
||||
m_xpInfoDecoder->initialize(*this, 0);
|
||||
m_stimulationDecoder->initialize(*this, 2);
|
||||
|
||||
// Parses box settings to find filename
|
||||
m_filename = FSettingValueAutoCast(*this->getBoxAlgorithmContext(), 0);
|
||||
|
||||
m_precision = 1000.0;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGDFFileWriter::uninitialize()
|
||||
{
|
||||
// See that no event is outside the signal by padding the signal with zeroes if necessary
|
||||
padByEvents();
|
||||
|
||||
//If the file is not open, that mean that the box is muted. If the file is not open because of a bug, it should have already been notify
|
||||
if (m_file.is_open())
|
||||
{
|
||||
//update the fixed header
|
||||
if (!m_nSamples.empty())
|
||||
{
|
||||
m_fixedHeader.m_NDataRecords = m_nSamples[0];
|
||||
this->getLogManager() << Kernel::LogLevel_Trace << "Saving " << m_nSamples[0] << " data records\n";
|
||||
}
|
||||
|
||||
if (m_fixedHeader.update(m_file))
|
||||
{
|
||||
//To save the Physical/Digital max/min values
|
||||
if (!m_variableHeader.update(m_file)) { m_error = true; }
|
||||
}
|
||||
else { m_error = true; }
|
||||
|
||||
//write events
|
||||
if (!m_events.empty())
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Trace << "Saving " << m_events.size() << " events\n";
|
||||
saveEvents();
|
||||
}
|
||||
|
||||
if (m_error) { this->getLogManager() << Kernel::LogLevel_Warning << "Error while writing to the output file!\n"; }
|
||||
|
||||
m_file.close();
|
||||
}
|
||||
|
||||
if (m_signalDecoder)
|
||||
{
|
||||
m_signalDecoder->uninitialize();
|
||||
delete m_signalDecoder;
|
||||
}
|
||||
if (m_xpInfoDecoder)
|
||||
{
|
||||
m_xpInfoDecoder->uninitialize();
|
||||
delete m_xpInfoDecoder;
|
||||
}
|
||||
if (m_stimulationDecoder)
|
||||
{
|
||||
m_stimulationDecoder->uninitialize();
|
||||
delete m_stimulationDecoder;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGDFFileWriter::processInput(const size_t /*index*/)
|
||||
{
|
||||
if (m_error) { return false; }
|
||||
getBoxAlgorithmContext()->markAlgorithmAsReadyToProcess();
|
||||
return true;
|
||||
}
|
||||
|
||||
void CGDFFileWriter::saveMatrixData()
|
||||
{
|
||||
if (!m_file.is_open())
|
||||
{
|
||||
m_file.open(m_filename, std::ios::binary | std::ios::trunc);
|
||||
|
||||
if (!m_file.good())
|
||||
{
|
||||
m_error = true;
|
||||
this->getLogManager() << Kernel::LogLevel_ImportantWarning << "Could not open file [" << m_filename << "]\n";
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
size_t j;
|
||||
m_file.seekp(0, std::ios::end);
|
||||
|
||||
//to "convert" (if needed) the double in little endian format
|
||||
uint8_t littleEndianBuffer[8];
|
||||
|
||||
for (size_t i = 0; i < m_samples[0].size(); ++i)
|
||||
{
|
||||
for (j = 0; j < m_samples.size(); ++j)
|
||||
{
|
||||
const double v = m_samples[j][i];
|
||||
System::Memory::hostToLittleEndian(v, littleEndianBuffer);
|
||||
m_file.write(reinterpret_cast<char*>(littleEndianBuffer), sizeof(littleEndianBuffer));
|
||||
}
|
||||
}
|
||||
for (j = 0; j < m_samples.size(); ++j) { m_samples[j].clear(); }
|
||||
}
|
||||
|
||||
void CGDFFileWriter::padByEvents()
|
||||
{
|
||||
if (!m_file.is_open())
|
||||
{
|
||||
m_file.open(m_filename, std::ios::binary | std::ios::trunc);
|
||||
|
||||
if (!m_file.good())
|
||||
{
|
||||
m_error = true;
|
||||
|
||||
this->getLogManager() << Kernel::LogLevel_ImportantWarning << "Could not open file [" << m_filename << "]\n";
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t maxPos = 0;
|
||||
for (const auto& e : m_events)
|
||||
{
|
||||
// GDF Spec v2.51, #33: sample indexing starts from 1, hence +1
|
||||
const uint32_t pos = uint32_t(CTime(e.second).toSampleCount(m_sampling) + 1);
|
||||
if (pos > m_nSamples[0] + 1)
|
||||
{
|
||||
this->getLogManager() << Kernel::LogLevel_Warning << "Stimulation " << uint16_t(e.first & 0xFFFF) << " will be written at " << pos
|
||||
<< " (after last sample at " << m_nSamples[0] + 1 << "), padding the signal\n";
|
||||
maxPos = std::max<uint32_t>(pos, maxPos);
|
||||
}
|
||||
}
|
||||
if (maxPos > 0)
|
||||
{
|
||||
const CMatrix* oMatrix = m_signalDecoder->getOutputMatrix();
|
||||
CMatrix zeros;
|
||||
zeros.copyDescription(*oMatrix);
|
||||
while (maxPos >= m_nSamples[0] + 1) { setSampleBuffer(zeros.getBuffer()); }
|
||||
}
|
||||
}
|
||||
|
||||
void CGDFFileWriter::saveEvents()
|
||||
{
|
||||
if (!m_file.is_open())
|
||||
{
|
||||
m_file.open(m_filename, std::ios::binary | std::ios::trunc);
|
||||
|
||||
if (!m_file.good())
|
||||
{
|
||||
m_error = true;
|
||||
|
||||
this->getLogManager() << Kernel::LogLevel_ImportantWarning << "Could not open file [" << m_filename << "]\n";
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
m_file.seekp(0, std::ios::end);
|
||||
|
||||
//event mode
|
||||
m_file.put(1);
|
||||
|
||||
//sample rate associated with event positions
|
||||
m_file.put(0);
|
||||
m_file.put(0);
|
||||
m_file.put(0);
|
||||
|
||||
//number of events
|
||||
uint8_t littleEndianBuffer[sizeof(size_t)]; // needs to be the size of the type returned by m_events.size()
|
||||
System::Memory::hostToLittleEndian(m_events.size(), littleEndianBuffer);
|
||||
m_file.write(reinterpret_cast<char*>(littleEndianBuffer), sizeof(size_t));
|
||||
|
||||
// write event positions
|
||||
for (const auto& e : m_events)
|
||||
{
|
||||
// GDF Spec v2.51, #33: sample indexing starts from 1, hence +1
|
||||
const uint32_t pos = uint32_t(CTime(e.second).toSampleCount(m_sampling) + 1);
|
||||
|
||||
System::Memory::hostToLittleEndian(pos, littleEndianBuffer);
|
||||
m_file.write(reinterpret_cast<char*>(littleEndianBuffer), sizeof(uint32_t));
|
||||
}
|
||||
|
||||
// write event types
|
||||
for (const auto& e : m_events)
|
||||
{
|
||||
//Force to use only 16bits stimulations IDs
|
||||
const uint16_t type = uint16_t(e.first & 0xFFFF);
|
||||
|
||||
System::Memory::hostToLittleEndian(type, littleEndianBuffer);
|
||||
m_file.write(reinterpret_cast<char*>(littleEndianBuffer), sizeof(uint16_t));
|
||||
}
|
||||
}
|
||||
|
||||
bool CGDFFileWriter::process()
|
||||
{
|
||||
if (!m_file.is_open())
|
||||
{
|
||||
m_file.open(m_filename, std::ios::binary | std::ios::trunc);
|
||||
|
||||
if (!m_file.good())
|
||||
{
|
||||
m_error = true;
|
||||
this->getLogManager() << Kernel::LogLevel_ImportantWarning << "Could not open file [" << m_filename << "]\n";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Kernel::IBoxIO& boxIO = this->getDynamicBoxContext();
|
||||
|
||||
//Experiment information
|
||||
for (size_t i = 0; i < boxIO.getInputChunkCount(0); ++i)
|
||||
{
|
||||
m_xpInfoDecoder->decode(i);
|
||||
if (m_xpInfoDecoder->isHeaderReceived()) { setExperimentInfo(); }
|
||||
boxIO.markInputAsDeprecated(0, i);
|
||||
}
|
||||
|
||||
|
||||
//Signal
|
||||
for (size_t i = 0; i < boxIO.getInputChunkCount(1); ++i)
|
||||
{
|
||||
m_signalDecoder->decode(i);
|
||||
if (m_signalDecoder->isHeaderReceived())
|
||||
{
|
||||
CMatrix* oMatrix = m_signalDecoder->getOutputMatrix();
|
||||
const size_t nChannel = oMatrix->getDimensionSize(0);
|
||||
setChannelCount(nChannel);
|
||||
for (size_t c = 0; c < nChannel; ++c) { setChannelName(c, oMatrix->getDimensionLabel(0, c)); }
|
||||
setSamplingRate(size_t(m_signalDecoder->getOutputSamplingRate()));
|
||||
setSampleCountPerBuffer(oMatrix->getDimensionSize(1));
|
||||
}
|
||||
if (m_signalDecoder->isBufferReceived())
|
||||
{
|
||||
CMatrix* oMatrix = m_signalDecoder->getOutputMatrix();
|
||||
double* buffer = oMatrix->getBuffer();
|
||||
setSampleBuffer(buffer);
|
||||
}
|
||||
boxIO.markInputAsDeprecated(1, i);
|
||||
}
|
||||
|
||||
//Stimulations
|
||||
for (uint32_t i = 0; i < boxIO.getInputChunkCount(2); ++i)
|
||||
{
|
||||
m_stimulationDecoder->decode(i);
|
||||
|
||||
if (m_stimulationDecoder->isBufferReceived())
|
||||
{
|
||||
IStimulationSet* stimulationSet = m_stimulationDecoder->getOutputStimulationSet();
|
||||
for (size_t j = 0; j < stimulationSet->getStimulationCount(); ++j)
|
||||
{
|
||||
setStimulation(stimulationSet->getStimulationIdentifier(j), stimulationSet->getStimulationDate(j));
|
||||
}
|
||||
}
|
||||
|
||||
boxIO.markInputAsDeprecated(2, i);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace FileIO
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
+113
@@ -0,0 +1,113 @@
|
||||
#pragma once
|
||||
|
||||
#include "../ovp_defines.h"
|
||||
#include "../ovp_gdf_helpers.h"
|
||||
|
||||
#include <openvibe/ov_all.h>
|
||||
#include <toolkit/ovtk_all.h>
|
||||
|
||||
#include <fstream>
|
||||
#include <vector>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace FileIO {
|
||||
|
||||
/**
|
||||
* The plugin's main class
|
||||
*
|
||||
*/
|
||||
class CGDFFileWriter final : public Toolkit::TBoxAlgorithm<IBoxAlgorithm>
|
||||
{
|
||||
public:
|
||||
|
||||
CGDFFileWriter() { }
|
||||
|
||||
void release() override { delete this; }
|
||||
|
||||
bool initialize() override;
|
||||
bool uninitialize() override;
|
||||
bool processInput(const size_t index) override;
|
||||
bool process() override;
|
||||
|
||||
_IsDerivedFromClass_Final_(IBoxAlgorithm, OVP_ClassId_GDFFileWriter)
|
||||
|
||||
protected:
|
||||
void setChannelCount(size_t n);
|
||||
void setChannelName(size_t index, const char* name);
|
||||
void setSampleCountPerBuffer(size_t n);
|
||||
void setSamplingRate(size_t sampling);
|
||||
void setSampleBuffer(const double* buffer);
|
||||
|
||||
void setExperimentInfo();
|
||||
|
||||
void setStimulation(const uint64_t identifier, const uint64_t date);
|
||||
|
||||
void saveMatrixData();
|
||||
void saveEvents();
|
||||
void padByEvents();
|
||||
|
||||
std::ofstream m_file;
|
||||
CString m_filename;
|
||||
|
||||
Toolkit::TSignalDecoder<CGDFFileWriter>* m_signalDecoder = nullptr;
|
||||
Toolkit::TExperimentInfoDecoder<CGDFFileWriter>* m_xpInfoDecoder = nullptr;
|
||||
Toolkit::TStimulationDecoder<CGDFFileWriter>* m_stimulationDecoder = nullptr;
|
||||
|
||||
//GDF structures
|
||||
GDF::CFixedGDF1Header m_fixedHeader;
|
||||
GDF::CVariableGDF1Header m_variableHeader;
|
||||
|
||||
std::vector<std::vector<double>> m_samples;
|
||||
std::vector<int64_t> m_nSamples;
|
||||
|
||||
|
||||
size_t m_samplesPerChannel = 0;
|
||||
size_t m_sampling = 0;
|
||||
|
||||
std::vector<std::pair<uint64_t, uint64_t>> m_events;
|
||||
|
||||
bool m_error = false;
|
||||
double m_precision = 0; // because of GDF writing problem (no scaling)
|
||||
};
|
||||
|
||||
/**
|
||||
* Plugin's description
|
||||
*/
|
||||
class CGDFFileWriterDesc final : public IBoxAlgorithmDesc
|
||||
{
|
||||
public:
|
||||
CString getName() const override { return CString("GDF file writer"); }
|
||||
CString getAuthorName() const override { return CString("Yann Renard"); }
|
||||
CString getAuthorCompanyName() const override { return CString("INRIA/IRISA"); }
|
||||
CString getShortDescription() const override { return CString("This algorithm records on disk what comes from a specific output"); }
|
||||
CString getDetailedDescription() const override
|
||||
{
|
||||
return CString("This algorithm dumps on disk a stream from a specific output in the standard GDF file format");
|
||||
}
|
||||
CString getCategory() const override { return CString("File reading and writing/GDF"); }
|
||||
CString getVersion() const override { return CString("0.6"); }
|
||||
CString getStockItemName() const override { return CString("gtk-save"); }
|
||||
|
||||
void release() override { }
|
||||
CIdentifier getCreatedClass() const override { return OVP_ClassId_GDFFileWriter; }
|
||||
IPluginObject* create() override { return new CGDFFileWriter(); }
|
||||
|
||||
bool getBoxPrototype(Kernel::IBoxProto& prototype) const override
|
||||
{
|
||||
// Adds box inputs //swap order of the first two
|
||||
prototype.addInput("Experiment information", OV_TypeId_ExperimentInfo);
|
||||
prototype.addInput("Signal", OV_TypeId_Signal);
|
||||
prototype.addInput("Stimulation", OV_TypeId_Stimulations);
|
||||
|
||||
// Adds box settings
|
||||
prototype.addSetting("Filename", OV_TypeId_Filename, "record-[$core{date}-$core{time}].gdf");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
_IsDerivedFromClass_Final_(IBoxAlgorithmDesc, OVP_ClassId_GDFFileWriterDesc)
|
||||
};
|
||||
} // namespace FileIO
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
@@ -0,0 +1,95 @@
|
||||
#pragma once
|
||||
|
||||
// Boxes
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
#define OVP_ClassId_GDFFileReader OpenViBE::CIdentifier(0x3EEB1264, 0x4EDFBD9A)
|
||||
#define OVP_ClassId_GDFFileReaderDesc OpenViBE::CIdentifier(0x2E2543C1, 0x47E3739E)
|
||||
#define OVP_ClassId_GDFFileWriter OpenViBE::CIdentifier(0x1E7B2155, 0x107289CE)
|
||||
#define OVP_ClassId_GDFFileWriterDesc OpenViBE::CIdentifier(0x375BF8EC, 0x023ACEEB)
|
||||
#define OVP_ClassId_GenericStreamReader OpenViBE::CIdentifier(0x0B1D880D, 0x02A17229)
|
||||
#define OVP_ClassId_GenericStreamReaderDesc OpenViBE::CIdentifier(0x1E8AAB1A, 0x085D72F6)
|
||||
#define OVP_ClassId_GenericStreamWriter OpenViBE::CIdentifier(0x78EA86B0, 0x2933E255)
|
||||
#define OVP_ClassId_GenericStreamWriterDesc OpenViBE::CIdentifier(0x02817C77, 0x77FE3D6A)
|
||||
#define OVP_ClassId_BCICompetitionIIIbReader OpenViBE::CIdentifier(0x0085B814, 0x6E45DA7E)
|
||||
#define OVP_ClassId_BCICompetitionIIIbReaderDesc OpenViBE::CIdentifier(0x00CC1B39, 0x206A17AE)
|
||||
#define OVP_ClassId_BoxAlgorithm_CSVFileWriter OpenViBE::CIdentifier(0x2C9312F1, 0x2D6613E5)
|
||||
#define OVP_ClassId_BoxAlgorithm_CSVFileWriterDesc OpenViBE::CIdentifier(0x65075FF7, 0x2B555E97)
|
||||
#define OVP_ClassId_BoxAlgorithm_CSVFileReader OpenViBE::CIdentifier(0x641D0717, 0x02884107)
|
||||
#define OVP_ClassId_BoxAlgorithm_CSVFileReaderDesc OpenViBE::CIdentifier(0x193F22E9, 0x26A67233)
|
||||
|
||||
// Brainamp File
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
#define OVP_ClassId_Algorithm_BrainampFileReader OpenViBE::CIdentifier(0x2533718F, 0x07AB3AF5)
|
||||
#define OVP_ClassId_Algorithm_BrainampFileReaderDesc OpenViBE::CIdentifier(0x2C5B2D6C, 0x242253CF)
|
||||
|
||||
#define OVP_ClassId_BoxAlgorithm_BrainampFileReader OpenViBE::CIdentifier(0x61894B28, 0x185E57D2)
|
||||
#define OVP_ClassId_BoxAlgorithm_BrainampFileReaderDesc OpenViBE::CIdentifier(0x77C650B0, 0x41386F47)
|
||||
|
||||
#define OVP_Algorithm_BrainampFileReader_InputParameterId_Filename OpenViBE::CIdentifier(0x000C486C, 0x477C80B9)
|
||||
#define OVP_Algorithm_BrainampFileReader_InputParameterId_EpochDuration OpenViBE::CIdentifier(0x002AEE72, 0x288D489E)
|
||||
#define OVP_Algorithm_BrainampFileReader_InputParameterId_SeekTime OpenViBE::CIdentifier(0x00627156, 0x55790CAE)
|
||||
#define OVP_Algorithm_BrainampFileReader_InputParameterId_ConvertStimuli OpenViBE::CIdentifier(0x537445DC, 0x6C792A96)
|
||||
#define OVP_Algorithm_BrainampFileReader_InputParameterId_MarkerDictionaryFilename OpenViBE::CIdentifier(0x1F044ABB, 0x5AACf062)
|
||||
|
||||
#define OVP_Algorithm_BrainampFileReader_OutputParameterId_CurrentStartTime OpenViBE::CIdentifier(0x003CE019, 0x3DADE050)
|
||||
#define OVP_Algorithm_BrainampFileReader_OutputParameterId_CurrentEndTime OpenViBE::CIdentifier(0x3B87DE16, 0xB8EFB2FB)
|
||||
#define OVP_Algorithm_BrainampFileReader_OutputParameterId_Sampling OpenViBE::CIdentifier(0x00D3CABB, 0x339326C2)
|
||||
#define OVP_Algorithm_BrainampFileReader_OutputParameterId_SignalMatrix OpenViBE::CIdentifier(0x0073A91A, 0x6D1D3D26)
|
||||
#define OVP_Algorithm_BrainampFileReader_OutputParameterId_Stimulations OpenViBE::CIdentifier(0x008F7C49, 0x6ED710A9)
|
||||
|
||||
#define OVP_Algorithm_BrainampFileReader_InputTriggerId_Open OpenViBE::CIdentifier(0x00BCF286, 0x6F5FA2F4)
|
||||
#define OVP_Algorithm_BrainampFileReader_InputTriggerId_Seek OpenViBE::CIdentifier(0x00C3ACAB, 0x4E3DE014)
|
||||
#define OVP_Algorithm_BrainampFileReader_InputTriggerId_Next OpenViBE::CIdentifier(0x003CD062, 0x739F973E)
|
||||
#define OVP_Algorithm_BrainampFileReader_InputTriggerId_Close OpenViBE::CIdentifier(0x003462EA, 0x031FB8FA)
|
||||
|
||||
#define OVP_Algorithm_BrainampFileReader_OutputTriggerId_Error OpenViBE::CIdentifier(0x00B1E3DF, 0x3ABC6C5A)
|
||||
#define OVP_Algorithm_BrainampFileReader_OutputTriggerId_DataProduced OpenViBE::CIdentifier(0x00E7D5F9, 0x1471AFF2)
|
||||
|
||||
#define OVP_ClassId_BoxAlgorithm_BrainampFileWriter OpenViBE::CIdentifier(0xABACC29F, 0xD5A0E5A8)
|
||||
#define OVP_ClassId_BoxAlgorithm_BrainampFileWriterDesc OpenViBE::CIdentifier(0x6347C864, 0x8483E2DF)
|
||||
|
||||
// OV Matrix File Reader
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
#define OVP_ClassId_Algorithm_OVMatrixFileReader OpenViBE::CIdentifier(0x10661A33, 0x0B0F44A7)
|
||||
#define OVP_ClassId_Algorithm_OVMatrixFileReaderDesc OpenViBE::CIdentifier(0x0E873B5E, 0x0A287FCB)
|
||||
|
||||
#define OVP_Algorithm_OVMatrixFileReader_InputParameterId_Filename OpenViBE::CIdentifier(0x28F87B29, 0x0B09737E)
|
||||
|
||||
#define OVP_Algorithm_OVMatrixFileReader_OutputParameterId_Matrix OpenViBE::CIdentifier(0x2F9521E0, 0x027D789F)
|
||||
|
||||
#define OVP_Algorithm_OVMatrixFileReader_InputTriggerId_Open OpenViBE::CIdentifier(0x2F996376, 0x2A942485)
|
||||
#define OVP_Algorithm_OVMatrixFileReader_InputTriggerId_Load OpenViBE::CIdentifier(0x22841807, 0x102D681C)
|
||||
#define OVP_Algorithm_OVMatrixFileReader_InputTriggerId_Close OpenViBE::CIdentifier(0x7FDE77DA, 0x384A0B3D)
|
||||
|
||||
#define OVP_Algorithm_OVMatrixFileReader_OutputTriggerId_Error OpenViBE::CIdentifier(0x6D4F2F4B, 0x05EC6CB9)
|
||||
#define OVP_Algorithm_OVMatrixFileReader_OutputTriggerId_DataProduced OpenViBE::CIdentifier(0x76F46051, 0x003B6FE8)
|
||||
|
||||
#define OVP_ClassId_Algorithm_OVMatrixFileWriter OpenViBE::CIdentifier(0x739158FC, 0x1E8240CC)
|
||||
#define OVP_ClassId_Algorithm_OVMatrixFileWriterDesc OpenViBE::CIdentifier(0x44CF6DD0, 0x329D47F9)
|
||||
|
||||
#define OVP_Algorithm_OVMatrixFileWriter_InputParameterId_Filename OpenViBE::CIdentifier(0x330D2D0B, 0x175271E6)
|
||||
#define OVP_Algorithm_OVMatrixFileWriter_InputParameterId_Matrix OpenViBE::CIdentifier(0x6F6402EE, 0x493044F3)
|
||||
|
||||
// ElectrodeLocalisationFileReader
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
#define OVP_ClassId_BoxAlgorithm_ElectrodeLocalisationFileReader OpenViBE::CIdentifier(0x40704155, 0x19C50E8F)
|
||||
#define OVP_ClassId_BoxAlgorithm_ElectrodeLocalisationFileReaderDesc OpenViBE::CIdentifier(0x4796613F, 0x653A48D5)
|
||||
|
||||
// Global defines
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
#ifdef TARGET_HAS_ThirdPartyOpenViBEPluginsGlobalDefines
|
||||
#include "ovp_global_defines.h"
|
||||
#endif // TARGET_HAS_ThirdPartyOpenViBEPluginsGlobalDefines
|
||||
|
||||
#define OV_AttributeId_Box_FlagIsUnstable OpenViBE::CIdentifier(0x666FFFFF, 0x666FFFFF)
|
||||
|
||||
#define OVP_NodeId_OpenViBEStream_Header EBML::CIdentifier(0xF59505AB, 0x3684C8D8)
|
||||
#define OVP_NodeId_OpenViBEStream_Header_Compression EBML::CIdentifier(0x40358769, 0x166380D1)
|
||||
#define OVP_NodeId_OpenViBEStream_Header_StreamType EBML::CIdentifier(0x732EC1D1, 0xFE904087)
|
||||
#define OVP_NodeId_OpenViBEStream_Header_ChannelType OVP_NodeId_OpenViBEStream_Header_StreamType // deprecated old name
|
||||
#define OVP_NodeId_OpenViBEStream_Buffer EBML::CIdentifier(0x2E60AD18, 0x87A29BDF)
|
||||
#define OVP_NodeId_OpenViBEStream_Buffer_StreamIndex EBML::CIdentifier(0x30A56D8A, 0xB9C12238)
|
||||
#define OVP_NodeId_OpenViBEStream_Buffer_ChannelIndex OVP_NodeId_OpenViBEStream_Buffer_StreamIndex // deprecated old name
|
||||
#define OVP_NodeId_OpenViBEStream_Buffer_StartTime EBML::CIdentifier(0x093E6A0A, 0xC5A9467B)
|
||||
#define OVP_NodeId_OpenViBEStream_Buffer_EndTime EBML::CIdentifier(0x8B5CCCD9, 0xC5024F29)
|
||||
#define OVP_NodeId_OpenViBEStream_Buffer_Content EBML::CIdentifier(0x8D4B0BE8, 0x7051265C)
|
||||
+489
@@ -0,0 +1,489 @@
|
||||
#include "ovp_gdf_helpers.h"
|
||||
#include <system/ovCMemory.h>
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace FileIO {
|
||||
|
||||
GDF::CFixedGDF1Header::CFixedGDF1Header()
|
||||
{
|
||||
memset(m_PatientID, ' ', sizeof(m_PatientID));
|
||||
memset(m_RecordingID, ' ', sizeof(m_RecordingID));
|
||||
memset(m_StartDateAndTimeOfRecording, ' ', sizeof(m_StartDateAndTimeOfRecording));
|
||||
memset(m_ReservedSerialNumber, ' ', sizeof(m_ReservedSerialNumber));
|
||||
|
||||
//set version number
|
||||
memcpy(m_VersionID, "GDF 1.25", 8);
|
||||
|
||||
//subjectId unknown by default
|
||||
m_PatientID[0] = 'X';
|
||||
//sex unknown by default
|
||||
m_PatientID[17] = 'X';
|
||||
}
|
||||
|
||||
bool GDF::CFixedGDF1Header::read(std::ifstream& file)
|
||||
{
|
||||
uint8_t buffer[72];
|
||||
|
||||
file.read(m_PatientID, sizeof(m_PatientID));
|
||||
file.read(m_RecordingID, sizeof(m_RecordingID));
|
||||
file.read(m_StartDateAndTimeOfRecording, sizeof(m_StartDateAndTimeOfRecording));
|
||||
|
||||
file.read(reinterpret_cast<char*>(buffer), 72);
|
||||
|
||||
System::Memory::littleEndianToHost(buffer, reinterpret_cast<uint64_t*>(&m_NBytesInHeaderRecord));
|
||||
System::Memory::littleEndianToHost(buffer + 8, &m_EquipmentProviderID);
|
||||
System::Memory::littleEndianToHost(buffer + 16, &m_LaboratoryID);
|
||||
System::Memory::littleEndianToHost(buffer + 24, &m_TechnicianID);
|
||||
|
||||
System::Memory::littleEndianToHost(buffer + 52, reinterpret_cast<uint64_t*>(&m_NDataRecords));
|
||||
System::Memory::littleEndianToHost(buffer + 60, &m_DurationDataRecordNum);
|
||||
System::Memory::littleEndianToHost(buffer + 64, &m_DurationDataRecordDen);
|
||||
System::Memory::littleEndianToHost(buffer + 68, &m_NSignals);
|
||||
|
||||
return !file.bad();
|
||||
}
|
||||
|
||||
bool GDF::CFixedGDF1Header::save(std::ofstream& file)
|
||||
{
|
||||
if (file.is_open())
|
||||
{
|
||||
uint8_t buffer[sizeof(uint64_t)];
|
||||
|
||||
file.seekp(0, std::ios::beg);
|
||||
|
||||
file.write(m_VersionID, sizeof(m_VersionID));
|
||||
file.write(m_PatientID, sizeof(m_PatientID));
|
||||
file.write(m_RecordingID, sizeof(m_RecordingID));
|
||||
file.write(m_StartDateAndTimeOfRecording, sizeof(m_StartDateAndTimeOfRecording));
|
||||
|
||||
System::Memory::hostToLittleEndian(uint64_t(m_NBytesInHeaderRecord), buffer);
|
||||
file.write(reinterpret_cast<char*>(buffer), sizeof(int64_t));
|
||||
|
||||
System::Memory::hostToLittleEndian(uint64_t(m_EquipmentProviderID), buffer);
|
||||
file.write(reinterpret_cast<char*>(buffer), sizeof(uint64_t));
|
||||
|
||||
System::Memory::hostToLittleEndian(uint64_t(m_LaboratoryID), buffer);
|
||||
file.write(reinterpret_cast<char*>(buffer), sizeof(uint64_t));
|
||||
|
||||
System::Memory::hostToLittleEndian(uint64_t(m_TechnicianID), buffer);
|
||||
file.write(reinterpret_cast<char*>(buffer), sizeof(uint64_t));
|
||||
|
||||
file.write(m_ReservedSerialNumber, sizeof(m_ReservedSerialNumber));
|
||||
|
||||
System::Memory::hostToLittleEndian(uint64_t(m_NDataRecords), buffer);
|
||||
file.write(reinterpret_cast<char*>(buffer), sizeof(int64_t));
|
||||
|
||||
System::Memory::hostToLittleEndian(m_DurationDataRecordNum, buffer);
|
||||
file.write(reinterpret_cast<char*>(buffer), sizeof(uint32_t));
|
||||
|
||||
System::Memory::hostToLittleEndian(m_DurationDataRecordDen, buffer);
|
||||
file.write(reinterpret_cast<char*>(buffer), sizeof(uint32_t));
|
||||
|
||||
System::Memory::hostToLittleEndian(m_NSignals, buffer);
|
||||
file.write(reinterpret_cast<char*>(buffer), sizeof(uint32_t));
|
||||
|
||||
if (file.bad())
|
||||
{
|
||||
//cout<<"Error while writing to the output file"<<endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GDF::CFixedGDF1Header::update(std::ofstream& file)
|
||||
{
|
||||
if (file.is_open())
|
||||
{
|
||||
uint8_t buffer[sizeof(uint64_t)];
|
||||
|
||||
const uint64_t backupPos = file.tellp();
|
||||
file.seekp(236, std::ios::beg);
|
||||
|
||||
System::Memory::hostToLittleEndian(uint64_t(m_NDataRecords), buffer);
|
||||
file.write(reinterpret_cast<char*>(buffer), sizeof(int64_t));
|
||||
|
||||
file.seekp(std::streamsize(backupPos), std::ios::beg);
|
||||
|
||||
|
||||
if (file.bad())
|
||||
{
|
||||
//cout<<"Error while writing to the output file"<<endl;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string GDF::CFixedGDF1Header::getSubjectName()
|
||||
{
|
||||
// extracts the PID and Patient name from the m_sPatientId
|
||||
char* token = strtok(m_PatientID, " ");
|
||||
if (token)
|
||||
{
|
||||
//The PId is not a numerical value in GDF, it is useless for us
|
||||
token = strtok(nullptr, " ");
|
||||
}
|
||||
|
||||
if (token) { return token; }
|
||||
return NO_VALUE_S;
|
||||
}
|
||||
|
||||
uint64_t GDF::CFixedGDF1Header::getLaboratoryID()
|
||||
{
|
||||
uint8_t* temp = reinterpret_cast<uint8_t*>(&m_LaboratoryID);
|
||||
bool blank = true;
|
||||
for (int i = 0; i < 8 && blank; ++i) { if (temp[i] != 0x20) { blank = false; } }
|
||||
|
||||
if (blank) { return NO_VALUE_I; }
|
||||
return m_LaboratoryID;
|
||||
}
|
||||
|
||||
uint64_t GDF::CFixedGDF1Header::getTechnicianID()
|
||||
{
|
||||
uint8_t* temp = reinterpret_cast<uint8_t*>(&m_TechnicianID);
|
||||
bool blank = true;
|
||||
for (int i = 0; i < 8 && blank; ++i) { if (temp[i] != 0x20) { blank = false; } }
|
||||
|
||||
if (blank) { return NO_VALUE_I; }
|
||||
return m_TechnicianID;
|
||||
}
|
||||
|
||||
GDF::CFixedGDF2Header::CFixedGDF2Header()
|
||||
{
|
||||
memset(&m_VersionID, 0, sizeof(m_VersionID));
|
||||
memset(&m_PatientID, 0, sizeof(m_PatientID));
|
||||
memset(&m_Reserved, 0, sizeof(m_Reserved));
|
||||
memset(&m_RecordingID, 0, sizeof(m_RecordingID));
|
||||
memset(&m_RecordingLocation, 0, sizeof(m_RecordingLocation));
|
||||
memset(&m_StartDateAndTimeOfRecording, 0, sizeof(m_StartDateAndTimeOfRecording));
|
||||
memset(&m_Birthday, 0, sizeof(m_Birthday));
|
||||
memset(&m_Reserved2, 0, sizeof(m_Reserved2));
|
||||
memset(&m_IPAdress, 0, sizeof(m_IPAdress));
|
||||
memset(&m_HeadSize, 0, sizeof(m_HeadSize));
|
||||
memset(&m_PositionReferenceElectrode, 0, sizeof(m_PositionReferenceElectrode));
|
||||
memset(&m_GroundElectrode, 0, sizeof(m_GroundElectrode));
|
||||
}
|
||||
|
||||
bool GDF::CFixedGDF2Header::read(std::ifstream& oFile)
|
||||
{
|
||||
uint8_t buffer[104];
|
||||
|
||||
oFile.read(m_PatientID, 66);
|
||||
|
||||
oFile.read(reinterpret_cast<char*>(buffer), 14);
|
||||
m_HealthInformation = buffer[10];
|
||||
m_Weight = buffer[11];
|
||||
m_Height = buffer[12];
|
||||
m_SubjectInfo = buffer[13];
|
||||
|
||||
oFile.read(m_RecordingID, 64);
|
||||
|
||||
oFile.read(reinterpret_cast<char*>(buffer), 102);
|
||||
|
||||
for (int i = 0; i < 4; ++i) { System::Memory::littleEndianToHost(buffer + i * sizeof(uint32_t), &m_RecordingLocation[i]); }
|
||||
|
||||
System::Memory::littleEndianToHost(buffer + 16, &m_StartDateAndTimeOfRecording[0]);
|
||||
System::Memory::littleEndianToHost(buffer + 20, &m_StartDateAndTimeOfRecording[1]);
|
||||
|
||||
System::Memory::littleEndianToHost(buffer + 24, &m_Birthday[0]);
|
||||
System::Memory::littleEndianToHost(buffer + 28, &m_Birthday[1]);
|
||||
|
||||
System::Memory::littleEndianToHost(buffer + 32, &m_NBlocksInHeader);
|
||||
|
||||
// +34 patient classification 6 bytes
|
||||
|
||||
System::Memory::littleEndianToHost(buffer + 40, &m_EquipmentProviderID);
|
||||
|
||||
for (int i = 0; i < 6; ++i) { m_IPAdress[i] = buffer[48 + i]; }
|
||||
|
||||
for (int i = 0; i < 3; ++i)
|
||||
{
|
||||
System::Memory::littleEndianToHost(buffer + 54 + i * sizeof(uint16_t), &m_HeadSize[i]);
|
||||
System::Memory::littleEndianToHost(buffer + 60 + i * sizeof(float), &m_PositionReferenceElectrode[i]);
|
||||
System::Memory::littleEndianToHost(buffer + 72 + i * sizeof(float), &m_GroundElectrode[i]);
|
||||
}
|
||||
|
||||
System::Memory::littleEndianToHost(buffer + 84, reinterpret_cast<uint64_t*>(&m_NDataRecords));
|
||||
System::Memory::littleEndianToHost(buffer + 92, &m_DurationRecordNum);
|
||||
System::Memory::littleEndianToHost(buffer + 96, &m_DurationDataRecordDen);
|
||||
System::Memory::littleEndianToHost(buffer + 100, &m_NSignals);
|
||||
|
||||
return !oFile.bad();
|
||||
}
|
||||
|
||||
bool GDF::CFixedGDF2Header::save(std::ofstream& /*file*/)
|
||||
{
|
||||
return false;
|
||||
//TODO complete
|
||||
/*
|
||||
uint8_t buffer[sizeof(uint64_t)];
|
||||
file.seekp(0,std::ios::beg);
|
||||
file<<m_VersionId<<m_PatientID;
|
||||
*/
|
||||
}
|
||||
|
||||
std::string GDF::CFixedGDF2Header::getSubjectName()
|
||||
{
|
||||
// extracts the PID and Patient name from the m_sPatientId
|
||||
char* token = strtok(m_PatientID, " ");
|
||||
if (token)
|
||||
{
|
||||
//The PId is not a numerical value in GDF, it is useless for us
|
||||
token = strtok(nullptr, " ");
|
||||
}
|
||||
|
||||
if (token) { return token; }
|
||||
return NO_VALUE_S;
|
||||
}
|
||||
|
||||
std::string GDF::CFixedGDF2Header::getExperimentDate()
|
||||
{
|
||||
//computes the experiment date
|
||||
//uint64_t tempDate = *(reinterpret_cast<uint64_t*>(m_startDateAndTimeOfRecording));
|
||||
//time_t startDateAndTimeOfRecordingInSeconds = ((tempDate/2^32) - 719529) * (3600*24);
|
||||
//tm * startDateAndTimeOfRecording = gmtime(&startDateAndTimeOfRecordingInSeconds);
|
||||
|
||||
//TODO check how date is coded in openvibe Date not good?
|
||||
//(l_sStartDateAndTimeOfRecording->mon+1)<<8 + (l_sStartDateAndTimeOfRecording->day)
|
||||
|
||||
return NO_VALUE_S;
|
||||
}
|
||||
|
||||
|
||||
//VARIABLE HEADER
|
||||
GDF::CVariableGDF1Header::CVariableGDF1HeaderPerChannel::CVariableGDF1HeaderPerChannel()
|
||||
{
|
||||
memset(m_Label, ' ', sizeof(m_Label));
|
||||
memset(m_TranducerType, ' ', sizeof(m_TranducerType));
|
||||
memset(m_PhysicalDimension, ' ', sizeof(m_PhysicalDimension));
|
||||
memset(m_PreFiltering, ' ', sizeof(m_PreFiltering));
|
||||
memset(m_Reserved, ' ', sizeof(m_Reserved));
|
||||
}
|
||||
|
||||
bool GDF::CVariableGDF1Header::update(std::ofstream& file)
|
||||
{
|
||||
if (file.is_open())
|
||||
{
|
||||
uint8_t buffer[sizeof(uint64_t)];
|
||||
const uint64_t backupPos = file.tellp();
|
||||
|
||||
const uint32_t nChannel = m_VariableHeaders.size();
|
||||
|
||||
file.seekp(0x100 + 104 * nChannel, std::ios::beg);
|
||||
|
||||
for (const auto& i : m_VariableHeaders)
|
||||
{
|
||||
System::Memory::hostToLittleEndian(i.m_PhysicalMin, buffer);
|
||||
file.write(reinterpret_cast<char*>(buffer), sizeof(double));
|
||||
}
|
||||
for (const auto& i : m_VariableHeaders)
|
||||
{
|
||||
System::Memory::hostToLittleEndian(i.m_PhysicalMax, buffer);
|
||||
file.write(reinterpret_cast<char*>(buffer), sizeof(double));
|
||||
}
|
||||
|
||||
for (const auto& i : m_VariableHeaders)
|
||||
{
|
||||
System::Memory::hostToLittleEndian(uint64_t(i.m_DigitalMin), buffer);
|
||||
file.write(reinterpret_cast<char*>(buffer), sizeof(int64_t));
|
||||
}
|
||||
|
||||
for (const auto& i : m_VariableHeaders)
|
||||
{
|
||||
System::Memory::hostToLittleEndian(uint64_t(i.m_DigitalMax), buffer);
|
||||
file.write(reinterpret_cast<char*>(buffer), sizeof(int64_t));
|
||||
}
|
||||
|
||||
file.seekp(std::streamsize(backupPos), std::ios::beg);
|
||||
|
||||
if (file.bad())
|
||||
{
|
||||
//cout<<"Error while writing to the output file"<<endl;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GDF::CVariableGDF1Header::save(std::ofstream& file)
|
||||
{
|
||||
if (file.is_open())
|
||||
{
|
||||
uint8_t buffer[sizeof(uint64_t)];
|
||||
|
||||
file.seekp(0x100, std::ios::beg);
|
||||
|
||||
for (const auto& i : m_VariableHeaders) { file.write(i.m_Label, sizeof(i.m_Label)); }
|
||||
for (const auto& i : m_VariableHeaders) { file.write(i.m_TranducerType, sizeof(i.m_TranducerType)); }
|
||||
for (const auto& i : m_VariableHeaders) { file.write(i.m_PhysicalDimension, sizeof(i.m_PhysicalDimension)); }
|
||||
for (const auto& i : m_VariableHeaders)
|
||||
{
|
||||
System::Memory::hostToLittleEndian(i.m_PhysicalMin, buffer);
|
||||
file.write(reinterpret_cast<char*>(buffer), sizeof(double));
|
||||
}
|
||||
|
||||
for (const auto& i : m_VariableHeaders)
|
||||
{
|
||||
System::Memory::hostToLittleEndian(i.m_PhysicalMax, buffer);
|
||||
file.write(reinterpret_cast<char*>(buffer), sizeof(double));
|
||||
}
|
||||
|
||||
for (const auto& i : m_VariableHeaders)
|
||||
{
|
||||
System::Memory::hostToLittleEndian(uint64_t(i.m_DigitalMin), buffer);
|
||||
file.write(reinterpret_cast<char*>(buffer), sizeof(int64_t));
|
||||
}
|
||||
|
||||
for (const auto& i : m_VariableHeaders)
|
||||
{
|
||||
System::Memory::hostToLittleEndian(uint64_t(i.m_DigitalMax), buffer);
|
||||
file.write(reinterpret_cast<char*>(buffer), sizeof(int64_t));
|
||||
}
|
||||
|
||||
for (const auto& i : m_VariableHeaders) { file.write(i.m_PreFiltering, sizeof(i.m_PreFiltering)); }
|
||||
|
||||
for (const auto& i : m_VariableHeaders)
|
||||
{
|
||||
System::Memory::hostToLittleEndian(i.m_NSamplesInEachRecord, buffer);
|
||||
file.write(reinterpret_cast<char*>(buffer), sizeof(uint32_t));
|
||||
}
|
||||
|
||||
for (const auto& i : m_VariableHeaders)
|
||||
{
|
||||
System::Memory::hostToLittleEndian(i.m_ChannelType, buffer);
|
||||
file.write(reinterpret_cast<char*>(buffer), sizeof(uint32_t));
|
||||
}
|
||||
|
||||
for (const auto& i : m_VariableHeaders) { file.write(i.m_Reserved, sizeof(i.m_Reserved)); }
|
||||
|
||||
if (file.bad())
|
||||
{
|
||||
//cout<<"Error while writing to the output file"<<endl;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//HELPER METHODS
|
||||
uint16_t GDF::GDFDataSize(const uint32_t channelType)
|
||||
{
|
||||
switch (channelType)
|
||||
{
|
||||
case ChannelType_int8_t: return 1;
|
||||
case ChannelType_uint8_t: return 1;
|
||||
case ChannelType_int16_t: return 2;
|
||||
case ChannelType_uint16_t: return 2;
|
||||
case ChannelType_int32_t: return 4;
|
||||
case ChannelType_uint32_t: return 4;
|
||||
case ChannelType_int64_t: return 8;
|
||||
case ChannelType_uint64_t: return 8;
|
||||
case ChannelType_float: return 4;
|
||||
case ChannelType_double: return 8;
|
||||
case ChannelType_float128: return 16;
|
||||
case ChannelType_int24: return 3;
|
||||
case ChannelType_uint24: return 3;
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
|
||||
bool GDF::CFixedGDF251Header::read(std::ifstream& oFile)
|
||||
{
|
||||
// Due to issues with data alignment and platform-specific padding, we can't trivially read the struct to memory with one go.
|
||||
|
||||
oFile.seekg(0, std::ios_base::beg);
|
||||
|
||||
uint8_t buffer[256];
|
||||
|
||||
oFile.read(reinterpret_cast<char*>(buffer), 256);
|
||||
|
||||
strncpy(m_Header1.versionID, (char*)&buffer[0], 8);
|
||||
strncpy(m_Header1.patientID, (char*)&buffer[8], 66);
|
||||
|
||||
m_Header1.healthInfo = buffer[84];
|
||||
m_Header1.weight = buffer[85];
|
||||
m_Header1.height = buffer[86];
|
||||
m_Header1.subjectInfo = buffer[87];
|
||||
|
||||
strncpy(m_Header1.recordingID, (char*)&buffer[88], 64);
|
||||
|
||||
for (int i = 0; i < 4; ++i) { System::Memory::littleEndianToHost(buffer + 152 + i * sizeof(uint32_t), &m_Header1.recordingLocation[i]); }
|
||||
|
||||
System::Memory::littleEndianToHost(buffer + 168, &m_Header1.startDateAndTimeOfRecording[0]);
|
||||
System::Memory::littleEndianToHost(buffer + 172, &m_Header1.startDateAndTimeOfRecording[1]);
|
||||
|
||||
System::Memory::littleEndianToHost(buffer + 176, &m_Header1.birthday[0]);
|
||||
System::Memory::littleEndianToHost(buffer + 180, &m_Header1.birthday[1]);
|
||||
|
||||
System::Memory::littleEndianToHost(buffer + 184, &m_Header1.headerLength);
|
||||
|
||||
// +34 patient classification 6 bytes
|
||||
|
||||
System::Memory::littleEndianToHost(buffer + 192, &m_Header1.equipmentProviderID);
|
||||
|
||||
for (int i = 0; i < 6; ++i) { m_Header1.reserved1[i] = buffer[200 + i]; }
|
||||
|
||||
for (int i = 0; i < 3; ++i)
|
||||
{
|
||||
System::Memory::littleEndianToHost(buffer + 206 + i * sizeof(uint16_t), &m_Header1.headSize[i]);
|
||||
System::Memory::littleEndianToHost(buffer + 212 + i * sizeof(float), &m_Header1.positionReferenceElectrode[i]);
|
||||
System::Memory::littleEndianToHost(buffer + 224 + i * sizeof(float), &m_Header1.groundElectrode[i]);
|
||||
}
|
||||
|
||||
System::Memory::littleEndianToHost(buffer + 236, reinterpret_cast<uint64_t*>(&m_Header1.nDataRecords));
|
||||
System::Memory::littleEndianToHost(buffer + 244, &m_Header1.duration);
|
||||
System::Memory::littleEndianToHost(buffer + 252, &m_Header1.nSignals);
|
||||
|
||||
System::Memory::littleEndianToHost(buffer + 254, &m_Header1.reserved2);
|
||||
|
||||
if (oFile.bad()) { return false; }
|
||||
return true;
|
||||
}
|
||||
|
||||
bool GDF::CFixedGDF251Header::save(std::ofstream& /*file*/)
|
||||
{
|
||||
return false;
|
||||
//TODO complete
|
||||
/*
|
||||
uint8_t tempBuffer[sizeof(uint64_t)];
|
||||
file.seekp(0,std::ios::beg);
|
||||
file << m_VersionId << m_PatientId;
|
||||
*/
|
||||
}
|
||||
|
||||
std::string GDF::CFixedGDF251Header::getSubjectName()
|
||||
{
|
||||
// extracts the PID and Patient name from the m_sPatientId
|
||||
char* token = strtok(m_Header1.patientID, " ");
|
||||
if (token) { token = strtok(nullptr, " "); } //The PId is not a numerical value in GDF, it is useless for us
|
||||
if (token) { return token; }
|
||||
return NO_VALUE_S;
|
||||
}
|
||||
|
||||
std::string GDF::CFixedGDF251Header::getExperimentDate()
|
||||
{
|
||||
//computes the experiment date
|
||||
//uint64_t tempDate= *(reinterpret_cast<uint64_t*>(m_startDateAndTimeOfRecording));
|
||||
|
||||
//time_t startDateAndTimeOfRecordingInSeconds = ((tempDate/2^32) - 719529) * (3600*24);
|
||||
//tm * startDateAndTimeOfRecording = gmtime(&startDateAndTimeOfRecordingInSeconds);
|
||||
|
||||
//TODO check how date is coded in openvibe Date not good?
|
||||
//(startDateAndTimeOfRecording->mon+1)<<8 + (startDateAndTimeOfRecording->day)
|
||||
|
||||
return NO_VALUE_S;
|
||||
}
|
||||
} // namespace FileIO
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
@@ -0,0 +1,346 @@
|
||||
#pragma once
|
||||
|
||||
#include <openvibe/ov_all.h>
|
||||
|
||||
#include <cmath>
|
||||
#include <fstream>
|
||||
#include <vector>
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace FileIO {
|
||||
#define NO_VALUE_I 0xffffffff
|
||||
#define NO_VALUE_S "_unspecified_"
|
||||
|
||||
/**
|
||||
* Useful classes for GDF file format handling
|
||||
*/
|
||||
class GDF
|
||||
{
|
||||
public:
|
||||
|
||||
class CFixedGDFHeader
|
||||
{
|
||||
public:
|
||||
virtual ~CFixedGDFHeader() {}
|
||||
|
||||
virtual bool read(std::ifstream& file) = 0;
|
||||
|
||||
virtual bool save(std::ofstream& file) = 0;
|
||||
virtual bool update(std::ofstream& file) = 0;
|
||||
|
||||
virtual uint64_t getSubjectID() { return NO_VALUE_I; }
|
||||
virtual std::string getSubjectName() { return NO_VALUE_S; }
|
||||
virtual uint64_t getSubjectSex() { return NO_VALUE_I; }
|
||||
virtual uint64_t getSubjectAge() { return NO_VALUE_I; }
|
||||
virtual uint64_t getExperimentID() { return NO_VALUE_I; }
|
||||
virtual std::string getExperimentDate() { return NO_VALUE_S; }
|
||||
virtual uint64_t getLaboratoryID() { return NO_VALUE_I; }
|
||||
virtual uint64_t getTechnicianID() { return NO_VALUE_I; }
|
||||
virtual std::string getLaboratoryName() { return NO_VALUE_S; }
|
||||
virtual std::string getTechnicianName() { return NO_VALUE_S; }
|
||||
|
||||
virtual double getDataRecordDuration() = 0;
|
||||
virtual uint64_t getNDataRecords() = 0;
|
||||
virtual size_t getChannelCount() = 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* An helper class to manipulate GDF1 fixed-size headers
|
||||
*/
|
||||
class CFixedGDF1Header final : public CFixedGDFHeader
|
||||
{
|
||||
public:
|
||||
CFixedGDF1Header();
|
||||
~CFixedGDF1Header() override {}
|
||||
|
||||
/**
|
||||
* Reads a GDF1 fixed Header from a file
|
||||
* \param file The input file.
|
||||
* \return true if the operation was successful
|
||||
*/
|
||||
bool read(std::ifstream& file) override;
|
||||
|
||||
/**
|
||||
* Saves a GDF1 fixed Header in a file
|
||||
* \param file The output file.
|
||||
* \return true if the operation was successful
|
||||
*/
|
||||
bool save(std::ofstream& file) override;
|
||||
|
||||
/**
|
||||
* Updates the number of data records field in
|
||||
* a GDF1 fixed Header in a file
|
||||
* \param file The output file.
|
||||
* \return true if the operation was successful
|
||||
*/
|
||||
bool update(std::ofstream& file) override;
|
||||
|
||||
std::string getSubjectName() override;
|
||||
uint64_t getLaboratoryID() override;
|
||||
uint64_t getTechnicianID() override;
|
||||
|
||||
double getDataRecordDuration() override { return double(m_DurationDataRecordNum) / double(m_DurationDataRecordDen); }
|
||||
uint64_t getNDataRecords() override { return m_NDataRecords; }
|
||||
size_t getChannelCount() override { return m_NSignals; }
|
||||
|
||||
char m_VersionID[8];
|
||||
char m_PatientID[80];
|
||||
char m_RecordingID[80];
|
||||
char m_StartDateAndTimeOfRecording[16];
|
||||
int64_t m_NBytesInHeaderRecord = 0;
|
||||
uint64_t m_EquipmentProviderID = 0;
|
||||
uint64_t m_LaboratoryID = 0;
|
||||
uint64_t m_TechnicianID = 0;
|
||||
char m_ReservedSerialNumber[20];
|
||||
int64_t m_NDataRecords = 0;
|
||||
uint32_t m_DurationDataRecordNum = 0;
|
||||
uint32_t m_DurationDataRecordDen = 0;
|
||||
uint32_t m_NSignals = 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* An helper class to manipulate GDF2 fixed-size headers
|
||||
*/
|
||||
class CFixedGDF2Header final : public CFixedGDFHeader
|
||||
{
|
||||
public:
|
||||
|
||||
CFixedGDF2Header();
|
||||
~CFixedGDF2Header() override {}
|
||||
|
||||
/**
|
||||
* Reads a GDF2 fixed Header from a file
|
||||
* \param oFile The input file.
|
||||
* \return true if the operation was successful
|
||||
*/
|
||||
bool read(std::ifstream& oFile) override;
|
||||
|
||||
/**
|
||||
* Saves a GDF2 fixed Header in a file
|
||||
* \param file The output file.
|
||||
* \return true if the operation was successful
|
||||
*/
|
||||
bool save(std::ofstream& file) override;
|
||||
|
||||
/**
|
||||
* Updates the number of data records field in
|
||||
* a GDF2 fixed Header in a file
|
||||
* \param file The output file.
|
||||
* \return true if the operation was successful
|
||||
*/
|
||||
bool update(std::ofstream& file) override { return true; }
|
||||
|
||||
std::string getExperimentDate() override;
|
||||
std::string getSubjectName() override;
|
||||
uint64_t getSubjectSex() override { return m_SubjectInfo & 0x03; }
|
||||
|
||||
uint64_t getSubjectAge() override { return uint64_t(std::floor(double((m_StartDateAndTimeOfRecording[1] - m_Birthday[1]) / 365.242189813))); }
|
||||
|
||||
double getDataRecordDuration() override { return double(m_DurationRecordNum) / double(m_DurationDataRecordDen); }
|
||||
uint64_t getNDataRecords() override { return m_NDataRecords; }
|
||||
size_t getChannelCount() override { return m_NSignals; }
|
||||
|
||||
char m_VersionID[8];
|
||||
char m_PatientID[66];
|
||||
|
||||
uint8_t m_Reserved[10];
|
||||
uint8_t m_HealthInformation = 0; //smoking...
|
||||
uint8_t m_Weight = 0;
|
||||
uint8_t m_Height = 0;
|
||||
uint8_t m_SubjectInfo = 0;//gender...
|
||||
|
||||
char m_RecordingID[64];
|
||||
uint32_t m_RecordingLocation[4];
|
||||
uint32_t m_StartDateAndTimeOfRecording[2];
|
||||
uint32_t m_Birthday[2];
|
||||
uint16_t m_NBlocksInHeader = 0;
|
||||
uint8_t m_Reserved2[6];
|
||||
uint64_t m_EquipmentProviderID = 0;
|
||||
uint8_t m_IPAdress[6];
|
||||
uint16_t m_HeadSize[3];
|
||||
float m_PositionReferenceElectrode[3];
|
||||
float m_GroundElectrode[3];
|
||||
int64_t m_NDataRecords = 0;
|
||||
uint32_t m_DurationRecordNum = 0;
|
||||
uint32_t m_DurationDataRecordDen = 0;
|
||||
uint16_t m_NSignals = 0;
|
||||
uint16_t m_Reserved3 = 0;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* An helper class to manipulate GDF2.51 fixed-size headers
|
||||
*/
|
||||
class CFixedGDF251Header final : public CFixedGDFHeader
|
||||
{
|
||||
public:
|
||||
|
||||
CFixedGDF251Header() { memset(&m_Header1, 0, sizeof(m_Header1)); }
|
||||
~CFixedGDF251Header() override {}
|
||||
|
||||
/**
|
||||
* Reads a GDF2 fixed Header from a file
|
||||
* \param oFile The input file.
|
||||
* \return true if the operation was successful
|
||||
*/
|
||||
bool read(std::ifstream& oFile) override;
|
||||
|
||||
/**
|
||||
* Saves a GDF2 fixed Header in a file
|
||||
* \param file The output file.
|
||||
* \return true if the operation was successful
|
||||
*/
|
||||
bool save(std::ofstream& file) override;
|
||||
|
||||
/**
|
||||
* Updates the number of data records field in
|
||||
* a GDF2 fixed Header in a file
|
||||
* \param file The output file.
|
||||
* \return true if the operation was successful
|
||||
*/
|
||||
bool update(std::ofstream& file) override { return true; }
|
||||
|
||||
std::string getExperimentDate() override;
|
||||
std::string getSubjectName() override;
|
||||
uint64_t getSubjectSex() override { return m_Header1.subjectInfo & 0x03; }
|
||||
|
||||
uint64_t getSubjectAge() override
|
||||
{
|
||||
return uint64_t(floor(double((m_Header1.startDateAndTimeOfRecording[1] - m_Header1.birthday[1]) / 365.242189813)));
|
||||
}
|
||||
|
||||
double getDataRecordDuration() override { return m_Header1.duration; }
|
||||
uint64_t getNDataRecords() override { return m_Header1.nDataRecords; }
|
||||
size_t getChannelCount() override { return m_Header1.nSignals; }
|
||||
|
||||
struct SGDFFixedHeader1
|
||||
{
|
||||
char versionID[8];
|
||||
char patientID[66];
|
||||
|
||||
uint8_t reserved[10];
|
||||
uint8_t healthInfo; //smoking...
|
||||
uint8_t weight;
|
||||
uint8_t height;
|
||||
uint8_t subjectInfo;//gender...
|
||||
|
||||
char recordingID[64];
|
||||
uint32_t recordingLocation[4];
|
||||
uint32_t startDateAndTimeOfRecording[2];
|
||||
uint32_t birthday[2];
|
||||
uint16_t headerLength;
|
||||
char patientClassification[6];
|
||||
uint64_t equipmentProviderID;
|
||||
uint8_t reserved1[6];
|
||||
uint16_t headSize[3];
|
||||
float positionReferenceElectrode[3];
|
||||
float groundElectrode[3];
|
||||
int64_t nDataRecords;
|
||||
double duration; // Not double in the 2.51 spec document at the time of writing this, but seems to be so in practice?
|
||||
uint16_t nSignals;
|
||||
uint16_t reserved2;
|
||||
};
|
||||
|
||||
SGDFFixedHeader1 m_Header1;
|
||||
};
|
||||
|
||||
/**
|
||||
* Base class for GDF file's variable headers
|
||||
*/
|
||||
class CVariableGDFHeader
|
||||
{
|
||||
public:
|
||||
virtual ~CVariableGDFHeader() { }
|
||||
virtual bool save(std::ofstream& file) = 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* GDF1 variable header class
|
||||
*/
|
||||
class CVariableGDF1Header final : public CVariableGDFHeader
|
||||
{
|
||||
//! Stores information for one channel
|
||||
class CVariableGDF1HeaderPerChannel
|
||||
{
|
||||
public:
|
||||
|
||||
CVariableGDF1HeaderPerChannel();
|
||||
|
||||
char m_Label[16];
|
||||
char m_TranducerType[80];
|
||||
char m_PhysicalDimension[8];
|
||||
double m_PhysicalMin = 0;
|
||||
double m_PhysicalMax = 0;
|
||||
int64_t m_DigitalMin = 0;
|
||||
int64_t m_DigitalMax = 0;
|
||||
char m_PreFiltering[80];
|
||||
uint32_t m_NSamplesInEachRecord = 0;
|
||||
uint32_t m_ChannelType = 0;
|
||||
char m_Reserved[32];
|
||||
};
|
||||
|
||||
public:
|
||||
~CVariableGDF1Header() override {}
|
||||
|
||||
/**
|
||||
* Saves a GDF1 variable Header in a file
|
||||
* \param file The output file.
|
||||
* \return true if the operation was successful
|
||||
*/
|
||||
bool save(std::ofstream& file) override;
|
||||
|
||||
/**
|
||||
* Updates the Physical/digital Min/max fields in
|
||||
* a GDF1 variable Header in a file
|
||||
* \param file The output file.
|
||||
* \return true if the operation was successful
|
||||
*/
|
||||
bool update(std::ofstream& file);
|
||||
|
||||
/**
|
||||
* Sets the number of channels in the file.
|
||||
* \param nChannel Number of channels.
|
||||
*/
|
||||
void setChannelCount(const uint32_t nChannel) { m_VariableHeaders.resize(nChannel); }
|
||||
|
||||
CVariableGDF1HeaderPerChannel& operator[](const uint32_t channel) { return m_VariableHeaders[channel]; }
|
||||
|
||||
std::vector<CVariableGDF1HeaderPerChannel> m_VariableHeaders;
|
||||
};
|
||||
|
||||
|
||||
class CGDFEvent
|
||||
{
|
||||
public:
|
||||
uint32_t m_Position = 0;
|
||||
uint16_t m_Type = 0;
|
||||
};
|
||||
|
||||
enum EChannelType
|
||||
{
|
||||
ChannelType_int8_t = 1,
|
||||
ChannelType_uint8_t = 2,
|
||||
ChannelType_int16_t = 3,
|
||||
ChannelType_uint16_t = 4,
|
||||
ChannelType_int32_t = 5,
|
||||
ChannelType_uint32_t = 6,
|
||||
ChannelType_int64_t = 7,
|
||||
ChannelType_uint64_t = 8,
|
||||
ChannelType_float = 16,
|
||||
ChannelType_double = 17,
|
||||
ChannelType_float128 = 18,
|
||||
ChannelType_int24 = 279,
|
||||
ChannelType_uint24 = 535
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets the data size in bytes of the GDF data type
|
||||
* \param channelType The GDF type
|
||||
* \return The size in bytes of this GDF type's data
|
||||
*/
|
||||
static uint16_t GDFDataSize(uint32_t channelType);
|
||||
};
|
||||
} // namespace FileIO
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
@@ -0,0 +1,36 @@
|
||||
#include "ovp_defines.h"
|
||||
#include "box-algorithms/ovpCGDFFileReader.h"
|
||||
#include "box-algorithms/ovpCGDFFileWriter.h"
|
||||
#include "box-algorithms/ovpCBCICompetitionIIIbReader.h"
|
||||
|
||||
#include "algorithms/brainamp/ovpCAlgorithmBrainampFileReader.h"
|
||||
|
||||
#include "box-algorithms/brainamp/ovpCBoxAlgorithmBrainampFileReader.h"
|
||||
#include "box-algorithms/brainamp/ovpCBoxAlgorithmBrainampFileWriter.h"
|
||||
|
||||
#include "box-algorithms/bci2000reader/ovpCBoxAlgorithmBCI2000Reader.h"
|
||||
|
||||
#include "box-algorithms/ovpCBoxAlgorithmSignalConcatenation.h"
|
||||
|
||||
namespace OpenViBE {
|
||||
namespace Plugins {
|
||||
namespace FileIO {
|
||||
|
||||
OVP_Declare_Begin()
|
||||
context.getTypeManager().registerEnumerationEntry(OV_TypeId_BoxAlgorithmFlag, OV_AttributeId_Box_FlagIsUnstable.toString(),
|
||||
OV_AttributeId_Box_FlagIsUnstable.id());
|
||||
|
||||
OVP_Declare_New(CGDFFileReaderDesc)
|
||||
OVP_Declare_New(CGDFFileWriterDesc)
|
||||
OVP_Declare_New(CBCICompetitionIIIbReaderDesc)
|
||||
OVP_Declare_New(CAlgorithmBrainampFileReaderDesc)
|
||||
OVP_Declare_New(CBoxAlgorithmBrainampFileReaderDesc)
|
||||
OVP_Declare_New(CBoxAlgorithmBrainampFileWriterDesc)
|
||||
OVP_Declare_New(CBoxAlgorithmBCI2000ReaderDesc)
|
||||
OVP_Declare_New(CBoxAlgorithmSignalConcatenationDesc)
|
||||
|
||||
OVP_Declare_End()
|
||||
|
||||
} // namespace FileIO
|
||||
} // namespace Plugins
|
||||
} // namespace OpenViBE
|
||||
@@ -0,0 +1,107 @@
|
||||
|
||||
IF(WIN32)
|
||||
SET(EXT cmd)
|
||||
SET(OS_FLAGS "--no-pause")
|
||||
ELSE()
|
||||
SET(EXT sh)
|
||||
SET(OS_FLAGS "")
|
||||
ENDIF()
|
||||
|
||||
|
||||
############
|
||||
|
||||
SET(TEST_NAME gdfreader)
|
||||
SET(SCENARIO_TO_TEST "${TEST_NAME}-test.xml")
|
||||
|
||||
ADD_TEST(clean_${TEST_NAME} "${CMAKE_COMMAND}" "-E" "remove" "-f" "output_gdf*.csv")
|
||||
ADD_TEST(run_${TEST_NAME} "$ENV{OV_BINARY_PATH}/openvibe-designer.${EXT}" ${OS_FLAGS} "--no-session-management" "--invisible" "--play-fast" ${SCENARIO_TO_TEST})
|
||||
ADD_TEST(compare_${TEST_NAME}_125 "$ENV{OV_BINARY_PATH}/test_thresholdDataComparison.${EXT}" ${OS_FLAGS} "output_gdf125.csv" "test_gdfX.ref.csv" 0.0001)
|
||||
ADD_TEST(compare_${TEST_NAME}_211 "$ENV{OV_BINARY_PATH}/test_thresholdDataComparison.${EXT}" ${OS_FLAGS} "output_gdf211.csv" "test_gdfX.ref.csv" 0.0001)
|
||||
ADD_TEST(compare_${TEST_NAME}_221 "$ENV{OV_BINARY_PATH}/test_thresholdDataComparison.${EXT}" ${OS_FLAGS} "output_gdf221.csv" "test_gdfX.ref.csv" 0.0001)
|
||||
ADD_TEST(compare_${TEST_NAME}_222 "$ENV{OV_BINARY_PATH}/test_thresholdDataComparison.${EXT}" ${OS_FLAGS} "output_gdf222.csv" "test_gdfX.ref.csv" 0.0001)
|
||||
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME} PROPERTIES ATTACHED_FILES_ON_FAIL ${OV_CONFIG_SUBDIR})
|
||||
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME}_125 PROPERTIES ATTACHED_FILES_ON_FAIL "output_gdf125.csv")
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME}_211 PROPERTIES ATTACHED_FILES_ON_FAIL "output_gdf211.csv")
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME}_221 PROPERTIES ATTACHED_FILES_ON_FAIL "output_gdf221.csv")
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME}_222 PROPERTIES ATTACHED_FILES_ON_FAIL "output_gdf222.csv")
|
||||
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME}_125 PROPERTIES DEPENDS run_${TEST_NAME})
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME}_211 PROPERTIES DEPENDS run_${TEST_NAME})
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME}_221 PROPERTIES DEPENDS run_${TEST_NAME})
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME}_222 PROPERTIES DEPENDS run_${TEST_NAME})
|
||||
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME} PROPERTIES DEPENDS clean_${TEST_NAME})
|
||||
|
||||
##############
|
||||
|
||||
SET(TEST_NAME ov-read-write)
|
||||
SET(SCENARIO_TO_TEST "${TEST_NAME}-test.xml")
|
||||
|
||||
ADD_TEST(clean_${TEST_NAME} "${CMAKE_COMMAND}" "-E" "remove" "-f" "output_ov.ov")
|
||||
ADD_TEST(run_${TEST_NAME} "$ENV{OV_BINARY_PATH}/openvibe-designer.${EXT}" ${OS_FLAGS} "--no-session-management" "--invisible" "--play-fast" ${SCENARIO_TO_TEST})
|
||||
ADD_TEST(compare_${TEST_NAME} "git" "diff" "--no-index" "../signals/bci-motor-imagery.ov" "output_ov.ov")
|
||||
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME} PROPERTIES ATTACHED_FILES_ON_FAIL ${OV_LOGFILE})
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME} PROPERTIES ATTACHED_FILES_ON_FAIL ${OV_LOGFILE})
|
||||
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME} PROPERTIES DEPENDS clean_${TEST_NAME})
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME} PROPERTIES DEPENDS run_${TEST_NAME})
|
||||
|
||||
#############
|
||||
|
||||
SET(TEST_NAME csv-read-write)
|
||||
SET(SCENARIO_TO_TEST "${TEST_NAME}-test.xml")
|
||||
|
||||
ADD_TEST(clean_${TEST_NAME} "${CMAKE_COMMAND}" "-E" "remove" "-f" "output_signal.csv" "output_streamedmatrix.csv" "output_stimulation.csv" "output_spectrum.csv" "output_features.csv")
|
||||
ADD_TEST(run_${TEST_NAME} "$ENV{OV_BINARY_PATH}/openvibe-designer.${EXT}" ${OS_FLAGS} "--no-session-management" "--invisible" "--play-fast" ${SCENARIO_TO_TEST})
|
||||
ADD_TEST(compare_${TEST_NAME}_signal "$ENV{OV_BINARY_PATH}/test_thresholdDataComparison.${EXT}" ${OS_FLAGS} "input_signal.csv" "output_signal.csv" 0.0001)
|
||||
ADD_TEST(compare_${TEST_NAME}_matrix "$ENV{OV_BINARY_PATH}/test_thresholdDataComparison.${EXT}" ${OS_FLAGS} "input_streamedmatrix.csv" "output_streamedmatrix.csv" 0.0001)
|
||||
ADD_TEST(compare_${TEST_NAME}_stimulation "$ENV{OV_BINARY_PATH}/test_thresholdDataComparison.${EXT}" ${OS_FLAGS} "input_stimulation.csv" "output_stimulation.csv" 0.0001)
|
||||
ADD_TEST(compare_${TEST_NAME}_spectrum "$ENV{OV_BINARY_PATH}/test_thresholdDataComparison.${EXT}" ${OS_FLAGS} "input_spectrum.csv" "output_spectrum.csv" 0.0001)
|
||||
ADD_TEST(compare_${TEST_NAME}_features "$ENV{OV_BINARY_PATH}/test_thresholdDataComparison.${EXT}" ${OS_FLAGS} "input_features.csv" "output_features.csv" 0.0001)
|
||||
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME} PROPERTIES ATTACHED_FILES_ON_FAIL ${OV_LOGFILE})
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME}_signal PROPERTIES ATTACHED_FILES_ON_FAIL ${OV_LOGFILE})
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME}_matrix PROPERTIES ATTACHED_FILES_ON_FAIL ${OV_LOGFILE})
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME}_stimulation PROPERTIES ATTACHED_FILES_ON_FAIL ${OV_LOGFILE})
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME}_spectrum PROPERTIES ATTACHED_FILES_ON_FAIL ${OV_LOGFILE})
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME}_features PROPERTIES ATTACHED_FILES_ON_FAIL ${OV_LOGFILE})
|
||||
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME} PROPERTIES DEPENDS clean_${TEST_NAME})
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME}_signal PROPERTIES DEPENDS run_${TEST_NAME})
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME}_matrix PROPERTIES DEPENDS run_${TEST_NAME})
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME}_stimulation PROPERTIES DEPENDS run_${TEST_NAME})
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME}_spectrum PROPERTIES DEPENDS run_${TEST_NAME})
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME}_features PROPERTIES DEPENDS run_${TEST_NAME})
|
||||
|
||||
###################
|
||||
|
||||
#
|
||||
# This test basically first writes test data to CSV "1", then CSV "1" to GDF (test 'GDF Writer'), then GDF to CSV "2" (test 'GDF Reader').
|
||||
# Finally, the CSV "1" and CSV "2" are compared for equality, both for signals and stimulations.
|
||||
#
|
||||
# We use CSV because of the float scaling in the GDF Writer and Reader, we don't seem to be able to maintain bitwise equality between read and write?
|
||||
#
|
||||
|
||||
SET(TEST_NAME gdf-readwrite)
|
||||
|
||||
ADD_TEST(clean_${TEST_NAME} "${CMAKE_COMMAND}" "-E" "remove" "-f" "output*.csv" "output*.gdf")
|
||||
ADD_TEST(run_${TEST_NAME}-1 "$ENV{OV_BINARY_PATH}/openvibe-designer.${EXT}" ${OS_FLAGS} "--no-session-management" "--invisible" "--play-fast" "test-gdf-readwrite-1.xml")
|
||||
ADD_TEST(run_${TEST_NAME}-2 "$ENV{OV_BINARY_PATH}/openvibe-designer.${EXT}" ${OS_FLAGS} "--no-session-management" "--invisible" "--play-fast" "test-gdf-readwrite-2.xml")
|
||||
ADD_TEST(run_${TEST_NAME}-3 "$ENV{OV_BINARY_PATH}/openvibe-designer.${EXT}" ${OS_FLAGS} "--no-session-management" "--invisible" "--play-fast" "test-gdf-readwrite-3.xml")
|
||||
|
||||
ADD_TEST(compare_${TEST_NAME}-signal "$ENV{OV_BINARY_PATH}/test_thresholdDataComparison.${EXT}" ${OS_FLAGS} "output_gdf_signal_1.csv" "output_gdf_signal_2.csv" 0.001)
|
||||
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME} PROPERTIES ATTACHED_FILES_ON_FAIL ${OV_LOGFILE})
|
||||
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME}-signal PROPERTIES ATTACHED_FILES_ON_FAIL "output_gdf_signal_1.csv" "output_gdf_signal_2.csv")
|
||||
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME}-1 PROPERTIES DEPENDS clean_${TEST_NAME})
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME}-2 PROPERTIES DEPENDS run_${TEST_NAME}-1)
|
||||
SET_TESTS_PROPERTIES(run_${TEST_NAME}-3 PROPERTIES DEPENDS run_${TEST_NAME}-2)
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME}-signal PROPERTIES DEPENDS run_${TEST_NAME}-3)
|
||||
SET_TESTS_PROPERTIES(compare_${TEST_NAME}-stim PROPERTIES DEPENDS run_${TEST_NAME}-3)
|
||||
|
||||
|
||||
+907
@@ -0,0 +1,907 @@
|
||||
<OpenViBE-Scenario>
|
||||
<FormatVersion>2</FormatVersion>
|
||||
<Creator>OpenViBE Designer</Creator>
|
||||
<CreatorVersion>2.2.0</CreatorVersion>
|
||||
<Settings></Settings>
|
||||
<Inputs></Inputs>
|
||||
<Outputs></Outputs>
|
||||
<Boxes>
|
||||
<Box>
|
||||
<Identifier>(0x000006ae, 0x0000572d)</Identifier>
|
||||
<Name>Matrix</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}/input_streamedmatrix.csv</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>256</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>144</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>(0x000006ae, 0x0000572e)</Identifier>
|
||||
<Name>Signal</Name>
|
||||
<AlgorithmClassIdentifier>(0x336a3d9a, 0x753f1ba4)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</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}/input_signal.csv</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>256</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>256</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>(0x000006ae, 0x0000572f)</Identifier>
|
||||
<Name>Stimulation</Name>
|
||||
<AlgorithmClassIdentifier>(0x336a3d9a, 0x753f1ba4)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</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}/input_stimulation.csv</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>256</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>368</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>(0x000006ae, 0x00005730)</Identifier>
|
||||
<Name>Features</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}/input_features.csv</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>256</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>480</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>(0x000006ae, 0x00005731)</Identifier>
|
||||
<Name>Spectrum</Name>
|
||||
<AlgorithmClassIdentifier>(0x336a3d9a, 0x753f1ba4)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</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}/input_spectrum.csv</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>256</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>576</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>(0x000015a8, 0x000079e9)</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>464</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>192</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>(0x00003a8c, 0x0000355b)</Identifier>
|
||||
<Name>Matrix</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}/output_streamedmatrix.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>352</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>144</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>(0x00003a8c, 0x0000355c)</Identifier>
|
||||
<Name>Signal</Name>
|
||||
<AlgorithmClassIdentifier>(0x428375e8, 0x325f2db9)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</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}/output_signal.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>352</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>256</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>(0x00003a8c, 0x0000355d)</Identifier>
|
||||
<Name>Stimulation</Name>
|
||||
<AlgorithmClassIdentifier>(0x428375e8, 0x325f2db9)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</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}/output_stimulation.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>352</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>368</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>(0x00003a8c, 0x0000355e)</Identifier>
|
||||
<Name>Features</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}/output_features.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>352</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>480</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>(0x00003a8c, 0x0000355f)</Identifier>
|
||||
<Name>Spectrum</Name>
|
||||
<AlgorithmClassIdentifier>(0x428375e8, 0x325f2db9)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</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}/output_spectrum.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>352</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>576</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, 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>2</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>400</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>192</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, 0x00001ca2)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00005b5f, 0x000050b0)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000015a8, 0x000079e9)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x0000228a, 0x00005c69)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000006ae, 0x00005731)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00003a8c, 0x0000355f)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000026d4, 0x0000446f)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000006ae, 0x0000572d)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00003a8c, 0x0000355b)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00003059, 0x00004d29)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000006ae, 0x0000572e)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00005b5f, 0x000050b0)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00003294, 0x000077db)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000006ae, 0x0000572e)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00003a8c, 0x0000355c)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x0000443e, 0x00000b95)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000006ae, 0x0000572f)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00003a8c, 0x0000355d)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00004485, 0x00005832)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000006ae, 0x0000572e)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00003a8c, 0x0000355c)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000048d1, 0x000070a5)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000006ae, 0x0000572f)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00003a8c, 0x0000355d)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00004c9f, 0x00001706)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000006ae, 0x0000572d)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00003a8c, 0x0000355b)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000060d4, 0x00007d87)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000006ae, 0x00005731)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00003a8c, 0x0000355f)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00006a3b, 0x000070cd)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000006ae, 0x00005730)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00003a8c, 0x0000355e)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00006ac9, 0x00007e1b)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000006ae, 0x00005730)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00003a8c, 0x0000355e)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
</Links>
|
||||
<Comments></Comments>
|
||||
<Metadata>
|
||||
<Entry>
|
||||
<Identifier>(0x0000775c, 0x000078ff)</Identifier>
|
||||
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
|
||||
<Data>[{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":1,"identifier":"(0x000057d8, 0x00005097)","name":"Default window","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":1},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x000019df, 0x000079ec)","index":0,"name":"Default tab","parentIdentifier":"(0x000057d8, 0x00005097)","type":2},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":0,"identifier":"(0x000062c0, 0x00001744)","index":0,"name":"Empty","parentIdentifier":"(0x000019df, 0x000079ec)","type":0}]</Data>
|
||||
</Entry>
|
||||
</Metadata>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x790d75b8, 0x3bb90c33)</Identifier>
|
||||
<Value>Jussi T. Lindgren</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x8c1fc55b, 0x7b433dc2)</Identifier>
|
||||
<Value>0.1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x9f5c4075, 0x4a0d3666)</Identifier>
|
||||
<Value>Tiny CSV IO test</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf36a1567, 0xd13c53da)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf6b2e3fa, 0x7bd43926)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf8034a49, 0x8b3f37cc)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</OpenViBE-Scenario>
|
||||
+826
@@ -0,0 +1,826 @@
|
||||
<OpenViBE-Scenario>
|
||||
<FormatVersion>2</FormatVersion>
|
||||
<Creator>OpenViBE Designer</Creator>
|
||||
<CreatorVersion>2.2.0</CreatorVersion>
|
||||
<Settings></Settings>
|
||||
<Inputs></Inputs>
|
||||
<Outputs></Outputs>
|
||||
<Boxes>
|
||||
<Box>
|
||||
<Identifier>(0x00000bef, 0x000059d0)</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>240</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>736</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x1eaee00e, 0xdb05d34e)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x010de8e3)</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>
|
||||
<Box>
|
||||
<Identifier>(0x000018b6, 0x0000159f)</Identifier>
|
||||
<Name>v2.11</Name>
|
||||
<AlgorithmClassIdentifier>(0x3eeb1264, 0x4edfbd9a)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x403488e7, 0x565d70b6)</TypeIdentifier>
|
||||
<Name>Experiment information</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>EEG stream</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/test_gdf211.gdf</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Samples per buffer</Name>
|
||||
<DefaultValue>32</DefaultValue>
|
||||
<Value>32</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Subtract physical minimum</Name>
|
||||
<DefaultValue>False</DefaultValue>
|
||||
<Value>False</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>176</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>416</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x78b8b69d, 0x27afe678)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x00db711d)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>false</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00004b9d, 0x00001aed)</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>304</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>736</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x568d148e, 0x650792b3)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x00aaf6d7)</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>(0x000055b7, 0x000053cf)</Identifier>
|
||||
<Name>v1.25</Name>
|
||||
<AlgorithmClassIdentifier>(0x3eeb1264, 0x4edfbd9a)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x403488e7, 0x565d70b6)</TypeIdentifier>
|
||||
<Name>Experiment information</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>EEG stream</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/test_gdf125.gdf</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Samples per buffer</Name>
|
||||
<DefaultValue>32</DefaultValue>
|
||||
<Value>32</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Subtract physical minimum</Name>
|
||||
<DefaultValue>False</DefaultValue>
|
||||
<Value>False</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>176</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>304</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x78b8b69d, 0x27afe678)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x00df607a)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>false</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00006988, 0x0000041a)</Identifier>
|
||||
<Name>v2.21</Name>
|
||||
<AlgorithmClassIdentifier>(0x3eeb1264, 0x4edfbd9a)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x403488e7, 0x565d70b6)</TypeIdentifier>
|
||||
<Name>Experiment information</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>EEG stream</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/test_gdf221.gdf</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Samples per buffer</Name>
|
||||
<DefaultValue>32</DefaultValue>
|
||||
<Value>32</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Subtract physical minimum</Name>
|
||||
<DefaultValue>False</DefaultValue>
|
||||
<Value>False</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>176</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>528</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x78b8b69d, 0x27afe678)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x00d44217)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>false</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00007aef, 0x00004f33)</Identifier>
|
||||
<Name>v2.22</Name>
|
||||
<AlgorithmClassIdentifier>(0x3eeb1264, 0x4edfbd9a)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x403488e7, 0x565d70b6)</TypeIdentifier>
|
||||
<Name>Experiment information</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>EEG stream</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/test_gdf222.gdf</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Samples per buffer</Name>
|
||||
<DefaultValue>32</DefaultValue>
|
||||
<Value>32</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Subtract physical minimum</Name>
|
||||
<DefaultValue>False</DefaultValue>
|
||||
<Value>False</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>176</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>640</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x78b8b69d, 0x27afe678)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x00d94a8a)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>false</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00007d82, 0x00007640)</Identifier>
|
||||
<Name>CSV File Writer</Name>
|
||||
<AlgorithmClassIdentifier>(0x428375e8, 0x325f2db9)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</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}/output_gdf125.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>240</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>304</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>(0x00007d82, 0x00007641)</Identifier>
|
||||
<Name>CSV File Writer</Name>
|
||||
<AlgorithmClassIdentifier>(0x428375e8, 0x325f2db9)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</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}/output_gdf211.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>240</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>416</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>(0x00007d82, 0x00007642)</Identifier>
|
||||
<Name>CSV File Writer</Name>
|
||||
<AlgorithmClassIdentifier>(0x428375e8, 0x325f2db9)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</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}/output_gdf221.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>240</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>528</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>(0x00007d82, 0x00007643)</Identifier>
|
||||
<Name>CSV File Writer</Name>
|
||||
<AlgorithmClassIdentifier>(0x428375e8, 0x325f2db9)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</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}/output_gdf222.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>240</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>
|
||||
</Boxes>
|
||||
<Links>
|
||||
<Link>
|
||||
<Identifier>(0x0000082d, 0x00001d73)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000018b6, 0x0000159f)</BoxIdentifier>
|
||||
<BoxOutputIndex>2</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00007d82, 0x00007641)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00000b09, 0x00007192)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00000bef, 0x000059d0)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00004b9d, 0x00001aed)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000018b9, 0x00004aa6)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00006988, 0x0000041a)</BoxIdentifier>
|
||||
<BoxOutputIndex>2</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00007d82, 0x00007642)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00001e40, 0x00006583)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00007aef, 0x00004f33)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00007d82, 0x00007643)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000022f7, 0x00004240)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00006988, 0x0000041a)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00007d82, 0x00007642)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000045f4, 0x00000160)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000018b6, 0x0000159f)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00007d82, 0x00007641)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00004b65, 0x00002eeb)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00007aef, 0x00004f33)</BoxIdentifier>
|
||||
<BoxOutputIndex>2</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00007d82, 0x00007643)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000063fb, 0x00007e28)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00007aef, 0x00004f33)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00000bef, 0x000059d0)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x0000703e, 0x00002213)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000055b7, 0x000053cf)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00007d82, 0x00007640)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000076aa, 0x000011d8)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000055b7, 0x000053cf)</BoxIdentifier>
|
||||
<BoxOutputIndex>2</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00007d82, 0x00007640)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
</Links>
|
||||
<Comments></Comments>
|
||||
<Metadata>
|
||||
<Entry>
|
||||
<Identifier>(0x0000775c, 0x000078ff)</Identifier>
|
||||
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
|
||||
<Data>[{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":320,"identifier":"(0x00006030, 0x00000f42)","name":"Default window","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":480},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x0000313c, 0x00002a2c)","index":0,"name":"Default tab","parentIdentifier":"(0x00006030, 0x00000f42)","type":2},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":0,"identifier":"(0x00001d70, 0x00007959)","index":0,"name":"Empty","parentIdentifier":"(0x0000313c, 0x00002a2c)","type":0}]</Data>
|
||||
</Entry>
|
||||
</Metadata>
|
||||
</OpenViBE-Scenario>
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
Time:128,End Time,Feature 1,Feature 2,Feature 3,Feature 4,Feature 5,Feature 6,Feature 7,Feature 8,Feature 9,Feature 10,Feature 11,Feature 12,Feature 13,Feature 14,Feature 15,Feature 16,Feature 17,Feature 18,Feature 19,Feature 20,Feature 21,Feature 22,Feature 23,Feature 24,Feature 25,Feature 26,Feature 27,Feature 28,Feature 29,Feature 30,Feature 31,Feature 32,Feature 33,Feature 34,Feature 35,Feature 36,Feature 37,Feature 38,Feature 39,Feature 40,Feature 41,Feature 42,Feature 43,Feature 44,Feature 45,Feature 46,Feature 47,Feature 48,Feature 49,Feature 50,Feature 51,Feature 52,Feature 53,Feature 54,Feature 55,Feature 56,Feature 57,Feature 58,Feature 59,Feature 60,Feature 61,Feature 62,Feature 63,Feature 64,Feature 65,Feature 66,Feature 67,Feature 68,Feature 69,Feature 70,Feature 71,Feature 72,Feature 73,Feature 74,Feature 75,Feature 76,Feature 77,Feature 78,Feature 79,Feature 80,Feature 81,Feature 82,Feature 83,Feature 84,Feature 85,Feature 86,Feature 87,Feature 88,Feature 89,Feature 90,Feature 91,Feature 92,Feature 93,Feature 94,Feature 95,Feature 96,Feature 97,Feature 98,Feature 99,Feature 100,Feature 101,Feature 102,Feature 103,Feature 104,Feature 105,Feature 106,Feature 107,Feature 108,Feature 109,Feature 110,Feature 111,Feature 112,Feature 113,Feature 114,Feature 115,Feature 116,Feature 117,Feature 118,Feature 119,Feature 120,Feature 121,Feature 122,Feature 123,Feature 124,Feature 125,Feature 126,Feature 127,Feature 128,Event Id,Event Date,Event Duration
|
||||
0.0000000000,0.0625000000,0.9150401743,0.4811181261,0.3270198377,0.5677587804,0.6008879130,0.4594295069,0.9683563458,0.9237891452,0.6234010095,0.3943255635,0.1078882546,0.7703306261,0.4436719313,0.5963131711,0.8457938042,0.7697275821,0.1224962058,0.2942006958,0.3322500831,0.1957253930,0.8843127992,0.6843187027,0.0202652202,0.4722963301,0.4688845898,0.1204221966,0.2920070603,0.0136039553,0.3520280039,0.2942418712,0.3035306910,0.8325346666,0.9609172817,0.0104033500,0.0263926589,0.1405701390,0.7096184031,0.5244539923,0.2770567578,0.7812710993,0.5509694435,0.6511558010,0.3719114196,0.9334457631,0.6669613710,0.1781126887,0.6620289299,0.5446313645,0.7266302956,0.6071571249,0.2124527053,0.4550076595,0.2073630942,0.6185337363,0.8098701322,0.2309543816,0.2571739866,0.0520775544,0.7355189007,0.1756549818,0.9616618126,0.7363008480,0.3561839175,0.5510980606,0.1079077483,0.2530346524,0.9616484421,0.8257251270,0.2381781549,0.6019684391,0.1800098317,0.1080955642,0.7040383117,0.2248865000,0.6234477691,0.0139408493,0.2314087460,0.9015386207,0.7469868043,0.6854385771,0.2908902564,0.3183208159,0.0725899180,0.5165314688,0.9643655850,0.2425120859,0.2801719103,0.9638599560,0.7913161502,0.4822022554,0.2669679758,0.5830120395,0.0362575694,0.6503971543,0.6601394096,0.7553155958,0.9625892541,0.1341326726,0.9030513861,0.7376232534,0.4091226382,0.6322228035,0.7557409701,0.0074960447,0.5686108500,0.7780390326,0.9779995524,0.9047688977,0.9270175146,0.5955350271,0.9939954386,0.6388499700,0.0514186502,0.7003326518,0.9912988800,0.8182061038,0.7358734147,0.1599401447,0.2078533825,0.3056119722,0.1885718242,0.6487491305,0.9024340464,0.1728633228,0.4749805466,0.8944157818,0.3802370790,0.7541875427,,,
|
||||
0.0625000000,0.1250000000,0.0002188140,0.8772717209,0.3606892761,0.5398562176,0.7957881822,0.2072246694,0.4904013139,0.1879513119,0.4810618665,0.1884347722,0.6153136939,0.0060567823,0.5914203583,0.1635175874,0.1282500087,0.6690062552,0.4333964835,0.4393781326,0.8056489513,0.8371359503,0.5145648201,0.4930421701,0.9483721592,0.7320511597,0.9446009332,0.2511601027,0.7567554591,0.3995047919,0.2119971917,0.5619104635,0.3209558069,0.3994497685,0.2659510621,0.1411809402,0.2320605463,0.3951107827,0.8734684635,0.2177591978,0.6586741989,0.0905212164,0.4448799966,0.8183233663,0.5589947104,0.8298795142,0.0523792338,0.6213727167,0.5110420675,0.2973528120,0.0880499484,0.6030983937,0.9991942968,0.6462430845,0.4685987504,0.1664709675,0.2175688986,0.5616701324,0.8587621097,0.2097194686,0.4954351890,0.7566679085,0.6194891455,0.3250324409,0.9993752704,0.7441636086,0.8143050948,0.7892000738,0.4020759331,0.8094227451,0.2071565455,0.7109043736,0.5762489510,0.2114944896,0.1201506448,0.9750412148,0.4196001196,0.5415642960,0.7046394304,0.8290748592,0.3493948136,0.5918792526,0.8979278051,0.8812638978,0.7123604133,0.2330470863,0.5489626734,0.4752553189,0.5313347597,0.3452652521,0.7386898657,0.8911155504,0.4246511299,0.4815980867,0.3539443654,0.3755141124,0.4571281332,0.5383569482,0.9075943392,0.9327698306,0.6012928928,0.8299281336,0.9498681091,0.7622836907,0.2522612389,0.9825163295,0.9775539900,0.1567203708,0.7720564199,0.0502300083,0.3994364436,0.7848045905,0.0519165159,0.2335758472,0.7675638278,0.7222367716,0.1512625844,0.4192842636,0.5601439243,0.0228915771,0.3806940543,0.1468547867,0.3395443982,0.8960902914,0.7770912084,0.2656531946,0.8409491007,0.9518510897,0.6433402253,0.8672073730,,,
|
||||
0.1250000000,0.1875000000,0.9109746008,0.9951207868,0.9262504610,0.2658244669,0.3371013603,0.2565388617,0.5173902859,0.1193734836,0.1775141452,0.8373892347,0.2898682340,0.9133129963,0.3481886350,0.1292222657,0.6257697267,0.5984036394,0.6149821568,0.2147628649,0.2947771698,0.3186730528,0.3558874619,0.8471703667,0.3808981238,0.6025348732,0.9888811563,0.5176699143,0.3514636005,0.6350323940,0.4326295485,0.7214585626,0.5881812049,0.6552316907,0.1431231180,0.0807242109,0.6860684799,0.8255885830,0.7974937786,0.0962283872,0.2619708159,0.1721746940,0.5158856388,0.8052386078,0.8466840037,0.6106764129,0.2006450845,0.4449324410,0.9440194790,0.1747042947,0.4824103422,0.2247444578,0.8581037289,0.4151061061,0.3349399418,0.4581822553,0.8213987367,0.4574069346,0.3249664013,0.6434680552,0.4386946510,0.3380722699,0.7685454728,0.9110118113,0.3662476337,0.0099736366,0.6282859237,0.8222235716,0.7562664633,0.0917348247,0.1025254172,0.3778344996,0.5110897899,0.2011987264,0.7183543080,0.1799440407,0.5106148846,0.8367626460,0.9573242795,0.4191983964,0.9073516545,0.1400522341,0.1674538185,0.1011095943,0.5204614545,0.0016235472,0.0303488139,0.6493480904,0.4683168104,0.5442108936,0.5139667864,0.6648385972,0.8003245771,0.8132813687,0.3622289621,0.2761762389,0.6235042040,0.7084571763,0.2957481982,0.0707940585,0.1672060185,0.5039413068,0.6104181844,0.0189933903,0.6308445318,0.2409209677,0.7020495255,0.9159986004,0.1108249349,0.9589245564,0.2907738546,0.4996006321,0.7271039351,0.7366086682,0.1463178939,0.8085784663,0.8136159789,0.0671046705,0.7824393143,0.1738784986,0.3712895694,0.2970155233,0.1838955719,0.6090937187,0.7785725708,0.1785994677,0.7657628125,0.7150414898,0.4002465350,0.7605940213,,,
|
||||
0.1875000000,0.2500000000,0.7453538293,0.5562348145,0.0441623314,0.2702864797,0.2214688216,0.6459622930,0.7874313686,0.7003119886,0.7890889288,0.7477767407,0.4196777761,0.1824780870,0.7869950747,0.2299966977,0.8701197824,0.8898176888,0.7801436263,0.5712060605,0.1414729978,0.1577144405,0.7592566011,0.7677241082,0.7704557236,0.0742995890,0.2070739889,0.6432430740,0.6626574935,0.2234028869,0.3798256752,0.4206518726,0.9313934040,0.8052547490,0.7913525237,0.0904265780,0.4186735766,0.9688379993,0.6984754954,0.6613982646,0.9636786203,0.9725835111,0.2988885161,0.2261269621,0.3229277530,0.4837670890,0.4950147446,0.1621673906,0.1487191385,0.4833369898,0.8237380013,0.1808721826,0.2137179286,0.4979929181,0.6606709010,0.2788669346,0.3063764081,0.1031162990,0.8566594275,0.5155990236,0.1969937219,0.2443958144,0.2845822796,0.3594031874,0.0864821358,0.1747175087,0.8151925865,0.6943339275,0.6089062935,0.1587961472,0.2111702869,0.4994445222,0.8572962065,0.4509738958,0.5766741433,0.5227647021,0.2778724900,0.5027213558,0.5940349950,0.6094255366,0.5260545956,0.3063808479,0.1706124833,0.3023674486,0.7318533051,0.4898670274,0.8902174765,0.5367171536,0.3025532460,0.9006342622,0.1225583914,0.8729220454,0.5816617627,0.2410953466,0.5891577334,0.0830385094,0.2448703449,0.7544026147,0.5857832327,0.9203029824,0.1961069836,0.2751267767,0.4055198194,0.9876121362,0.3188617593,0.0215721291,0.3813716625,0.3048050166,0.7103436391,0.4197148411,0.1848478564,0.9002549076,0.6524276587,0.9424044732,0.6402948408,0.3965077917,0.5788287858,0.3429145110,0.1934584284,0.9478120690,0.9845180595,0.4365746828,0.6515295408,0.5665946738,0.5121574821,0.1296665922,0.7572885097,0.7258212646,0.0993553293,0.7081319424,,,
|
||||
0.2500000000,0.3125000000,0.2257547644,0.6802780146,0.9848806218,0.2945099196,0.6121715314,0.5496250149,0.9488904520,0.6261539755,0.0226002543,0.8020651417,0.3240186602,0.1204765355,0.3803162053,0.3986330400,0.4652527408,0.3092360550,0.7902492685,0.4914528863,0.5728307802,0.3231564206,0.7498268979,0.0049532964,0.6545206995,0.0506501256,0.3489679080,0.0561038423,0.2357035449,0.5909956398,0.3385374097,0.1453693460,0.0107090550,0.3685457709,0.4528203467,0.4027523831,0.6446154756,0.1715591031,0.4860209927,0.1162998809,0.4648108450,0.2506977031,0.7875146486,0.4596880095,0.6805525057,0.3820763617,0.7328458393,0.4352892467,0.7725691649,0.0421113959,0.1229584035,0.9120677412,0.5444388818,0.6305014768,0.2390579795,0.1883088143,0.3235339646,0.1613477063,0.5104757384,0.9915048797,0.2011686831,0.6125321344,0.9968779932,0.0992927733,0.6293981448,0.1048098309,0.8206058126,0.7488012826,0.3321925495,0.7911361693,0.0682489956,0.8672478301,0.4101436031,0.5440434886,0.3644964646,0.1893134553,0.2352781841,0.4685491412,0.0673055169,0.7426268843,0.7430763205,0.4338141405,0.9760390066,0.5769536356,0.9065775399,0.3245960197,0.4803365432,0.6146799829,0.1976400022,0.1181834072,0.3478701948,0.8024101891,0.0077452271,0.1817336529,0.4993942913,0.8643290466,0.9991608907,0.4216364564,0.3496882485,0.3723833957,0.1769943126,0.4480358632,0.4492628956,0.5697830906,0.7367511708,0.6118022655,0.2468232804,0.3836626287,0.3119710207,0.8164000930,0.5367287507,0.3956456599,0.7687124116,0.3577925242,0.9573899531,0.1469699335,0.7791464506,0.4732569496,0.2888410233,0.7451228222,0.2324083727,0.6024969162,0.3459631025,0.0237420439,0.6104843081,0.6179569261,0.3671497568,0.7786061126,0.1736336316,0.2833297879,,,
|
||||
0.3125000000,0.3750000000,0.6285757518,0.3288695402,0.6054992690,0.9929998035,0.1378111462,0.9951356442,0.9691859630,0.1129326557,0.0280345739,0.7290734798,0.2218745779,0.4449320023,0.0946576300,0.6760159465,0.5861109693,0.1478802136,0.7679049612,0.3991952927,0.9602089047,0.5471295090,0.0050830450,0.1385421732,0.9385014586,0.7108538039,0.1735699072,0.0975517747,0.4521458363,0.9214333170,0.4484556764,0.4469351457,0.1255321861,0.0095951082,0.1099653582,0.6312142271,0.5213742687,0.2210297619,0.3553569058,0.3236816446,0.7842328099,0.5610350110,0.9095973191,0.0611649826,0.8411585467,0.0379429073,0.8668417903,0.0462811647,0.3252716959,0.8277587383,0.4269191837,0.2921328731,0.7167588421,0.4737435721,0.7883403641,0.1244506226,0.6991252704,0.1276111647,0.7651671295,0.1354980366,0.3882917659,0.7037197298,0.5543080787,0.6320341001,0.0578748437,0.8107915705,0.1264818849,0.6230264814,0.5594581265,0.9871456481,0.4017386094,0.5630508566,0.6846432309,0.6775590843,0.1209605632,0.4211554511,0.5500227369,0.4238302193,0.6898243206,0.7893713107,0.5699831364,0.0409704016,0.3327725793,0.2529282472,0.0994483484,0.6077005116,0.3537592243,0.7309522489,0.4926651088,0.5049442097,0.5111502877,0.2868934362,0.0882756545,0.0288088685,0.3580115556,0.5529107323,0.0627496941,0.7541548216,0.5957504974,0.5642922563,0.2772185232,0.1961681915,0.0377593283,0.6898948345,0.6113006326,0.3604168841,0.7862653008,0.3118595339,0.9690669046,0.9981342063,0.2589769722,0.4736000784,0.2835210583,0.8389609037,0.8540500992,0.1036063221,0.6556978549,0.4131547150,0.8589825400,0.7310319247,0.7818610885,0.1693737505,0.6824778626,0.1110271995,0.1198812893,0.5206037527,0.0822814312,0.6039371279,0.6588939205,0.5556109066,,,
|
||||
0.3750000000,0.4375000000,0.3013739143,0.8127311000,0.7991974158,0.9813211181,0.5462567790,0.0274043684,0.7054392931,0.2291122875,0.2243704761,0.6404237077,0.7856010403,0.2253304604,0.1122797087,0.2313427543,0.7298298122,0.6516429083,0.6382611769,0.2799473577,0.3125212379,0.6736417285,0.9154962718,0.6624671633,0.0333061314,0.5654855787,0.7591771134,0.9264053332,0.1208104850,0.2260603826,0.1269354327,0.4152459202,0.7590945300,0.4942393058,0.1634823915,0.8546761232,0.9681738093,0.7978894059,0.0261956449,0.5268149576,0.2065873067,0.2210950616,0.4754410307,0.7686062045,0.6741202855,0.1233033733,0.9876864576,0.5099352649,0.8682243000,0.9719840281,0.7665449458,0.4172727119,0.8278773725,0.9980648635,0.1777149339,0.5806961891,0.9070699569,0.7085918125,0.9142936911,0.6817125536,0.5119359691,0.6994246591,0.7783822962,0.8618395200,0.2147077576,0.9214978551,0.2123396420,0.4472374304,0.1355366809,0.9382716189,0.6553513929,0.8768269331,0.8318979132,0.9577270437,0.7229743921,0.2387020239,0.9467114366,0.3547559867,0.8069269729,0.3634118494,0.7865487337,0.9261352927,0.3532215573,0.1371394813,0.7110671448,0.1866619682,0.3140457033,0.2714432462,0.9519157023,0.8294518099,0.8057298311,0.7847239529,0.0537713827,0.0128977881,0.1007729070,0.6612241708,0.2817010204,0.0053622834,0.7139452228,0.8625826242,0.8366024834,0.1891112577,0.5292865052,0.8092396471,0.1501730622,0.7508652674,0.7300759819,0.6964412911,0.6699647657,0.5185583574,0.4771354941,0.3811959955,0.6192273130,0.9198612673,0.7758328342,0.0671149772,0.4560193459,0.1565855546,0.5475070586,0.6679388408,0.7853498289,0.7844694268,0.9127447612,0.5858668790,0.8600505069,0.8199147666,0.7085756420,0.4406658337,0.3686100424,0.1206055495,,,
|
||||
0.4375000000,0.5000000000,0.9003225164,0.7480981473,0.8053498440,0.4267288961,0.6412769875,0.7522350526,0.4167963460,0.9650670663,0.5086058250,0.9226004714,0.1749151214,0.5154892541,0.1457145112,0.9937504663,0.7144920225,0.2941832957,0.9871061957,0.8896298131,0.9362271670,0.4684300146,0.1662876687,0.4145205696,0.2401438348,0.7372052034,0.2275003067,0.1202372941,0.2201560228,0.7109864391,0.0556307323,0.4056763717,0.5839949264,0.6182016619,0.1775623059,0.3103296650,0.7554143269,0.8824875567,0.3143215114,0.8981643121,0.4549063388,0.7565393369,0.5745349682,0.8117642403,0.2721608290,0.3757458278,0.6454408234,0.8008520203,0.5620512532,0.2231434009,0.4298177247,0.2234280019,0.6727846127,0.5825154625,0.7763711584,0.0086296967,0.0160774931,0.2844835189,0.5559796582,0.8363868720,0.3929312793,0.4150929507,0.6976120733,0.8635397111,0.1867806930,0.4720674043,0.0013589431,0.0673465631,0.6231278596,0.7715907679,0.9108784711,0.6526743551,0.9036721131,0.3094108591,0.7118621557,0.5414177482,0.6693002416,0.1900362298,0.0368166002,0.2156310934,0.6608897825,0.4060205801,0.9850410977,0.2993082490,0.2275831737,0.4510028409,0.2335811383,0.5196640280,0.8845180692,0.4756846388,0.0928450837,0.2996766637,0.9362409022,0.0004491087,0.5826934704,0.4704652349,0.7252352487,0.6212530315,0.2190986618,0.9486807266,0.5916255882,0.2739911363,0.1576126318,0.6291394716,0.7699931778,0.5183355731,0.3155681929,0.7118634277,0.0610896808,0.3112224340,0.8763353478,0.5345323340,0.3207744888,0.3421047439,0.7597657682,0.6433593284,0.8619263892,0.9882361852,0.6681065401,0.7102198754,0.1950918455,0.2910398836,0.9868998907,0.8591626459,0.6078541053,0.0004093167,0.2274056135,0.5978504100,0.2635376034,0.1799012623,,,
|
||||
0.5000000000,0.5625000000,0.6836149301,0.1570305652,0.5011268521,0.5341963689,0.0406966375,0.0417319161,0.0229919404,0.5225459056,0.7622013865,0.0073592423,0.5262761717,0.7536182301,0.1732809620,0.5846455710,0.8147739468,0.2411016424,0.7675131322,0.1109566058,0.5808591293,0.6893337520,0.4796658028,0.5758117344,0.1115573819,0.0693856149,0.0807967728,0.6014419149,0.9144991301,0.3569751286,0.9383541637,0.3463297449,0.8262212579,0.5411048380,0.5816693464,0.6854715918,0.7228725688,0.6109158760,0.0544019262,0.7022253803,0.3458649374,0.7266227046,0.9470764389,0.7508620082,0.0298781053,0.1454318992,0.9886663328,0.1866206592,0.3245465471,0.7972429504,0.8571681727,0.8578790261,0.7722784744,0.0922879532,0.1406729887,0.7397305216,0.9066975862,0.7279179688,0.6206075558,0.7658441206,0.0817528344,0.5876551629,0.2451612160,0.7712874806,0.5636584857,0.7146320252,0.5789667484,0.7735870511,0.9947234755,0.5594872846,0.6741074440,0.6133322220,0.0880946824,0.1618016448,0.5966567851,0.8680961663,0.7326783538,0.7012700287,0.3464814217,0.9959812763,0.4164274423,0.1351061920,0.6529864753,0.4439844161,0.4418596844,0.3798802693,0.3809329458,0.8569758898,0.8512940556,0.6666798801,0.4906939513,0.1945700741,0.5131848175,0.6812754211,0.5925616317,0.8465413465,0.9405339791,0.1809083533,0.0460981852,0.5613436685,0.5314784907,0.4365565274,0.7995008091,0.2417511870,0.1028372864,0.4331791420,0.4886791948,0.0108438726,0.1980641852,0.1028579960,0.4738194542,0.0851266982,0.3123101122,0.4068922729,0.9956520954,0.0596446055,0.0368461821,0.7821050829,0.5365605582,0.4764145396,0.7731019980,0.4577252327,0.5513724757,0.3282609247,0.2148313976,0.5636563539,0.3628968168,0.8687196723,0.5768848425,0.8886449558,,,
|
||||
0.5625000000,0.6250000000,0.3266253117,0.2969284146,0.3912016670,0.3561266444,0.2641083156,0.9673384312,0.8008158177,0.4856448886,0.1329766037,0.9680180063,0.4974506951,0.7146691198,0.7970280002,0.2428639778,0.8433659293,0.2990799940,0.1119566131,0.3558082923,0.3105708533,0.0734917005,0.8885465648,0.3865002599,0.9565107531,0.7928993581,0.4546439000,0.5764963361,0.2760517164,0.2105028476,0.2800917707,0.2960291200,0.7190703233,0.0789382251,0.8547532328,0.9354673070,0.5678164046,0.4840348300,0.9779860589,0.5910421014,0.3716490779,0.5187759055,0.7101588331,0.9156765428,0.0999725214,0.9640193435,0.7349417466,0.6109719451,0.9659422555,0.8378549658,0.6305319166,0.6654821215,0.3023991575,0.0058013138,0.2286409882,0.8359954355,0.9596452445,0.3670667945,0.3007012629,0.0460373273,0.5093773089,0.5760716717,0.2921432890,0.2685501662,0.1253721523,0.0886203020,0.4363479582,0.7623618306,0.0819924974,0.0721713693,0.8915678712,0.5185277537,0.4140858494,0.6008427632,0.9720136125,0.2152535354,0.0194878255,0.9272642804,0.4734225015,0.5747749114,0.3479006817,0.3525647940,0.8477819201,0.6399854033,0.3437346853,0.5786995713,0.5904509153,0.6705951339,0.2542099489,0.5538953913,0.2293668056,0.8017296402,0.1767021166,0.4251989739,0.7634107836,0.9324329835,0.1678593014,0.6535611227,0.9821186785,0.4999947359,0.5313968647,0.9546532426,0.8452043200,0.7675913034,0.9542584720,0.9133796643,0.4685207419,0.3768507789,0.0580611015,0.2010925114,0.0885815227,0.9304342023,0.8238886003,0.9276215080,0.1137061296,0.2165951831,0.7970096874,0.6956051604,0.7922348289,0.8634749758,0.7919690392,0.0796134942,0.4695181684,0.4520755119,0.7265606464,0.0423310532,0.4934578198,0.9706061210,0.3916379958,0.2137548453,,,
|
||||
0.6250000000,0.6875000000,0.0951865504,0.4559259054,0.3342831139,0.6230993611,0.9083122811,0.6041768962,0.9408766730,0.4100223009,0.7271583276,0.8637165106,0.8111866217,0.4237242953,0.4929328640,0.5954799841,0.1817465017,0.4415581895,0.7764845549,0.8788219872,0.2891010782,0.6990914301,0.7785408311,0.4980652491,0.2989641940,0.7921074585,0.9815224456,0.7390300448,0.0385943358,0.4198846603,0.8128107945,0.2670160651,0.2669080039,0.1193341746,0.6247934515,0.6694000354,0.2803128145,0.2621419586,0.1303602080,0.9657187897,0.0858317562,0.3182606357,0.2583954232,0.5476385439,0.5172038896,0.9280478866,0.4310764379,0.8470131259,0.7136792648,0.6151305817,0.0992915588,0.8238125884,0.0452835828,0.7976106589,0.0500108164,0.9840833184,0.8637740302,0.1995748926,0.9539506896,0.4730096324,0.5925557532,0.7117695680,0.3666300960,0.5040151600,0.7381468357,0.7755233133,0.5956626255,0.4666806492,0.2921566979,0.1883999070,0.0600034464,0.7034296850,0.0184311338,0.4205567657,0.4419830996,0.6064463754,0.4366809521,0.6036809478,0.7591373040,0.9383824393,0.1547079335,0.1034155719,0.9832944782,0.0031819595,0.1114478053,0.5050588488,0.6593978559,0.9282916798,0.2615019490,0.1864993179,0.5753157951,0.7485704583,0.4077355501,0.4141925909,0.1749735957,0.2676434095,0.6683696669,0.0457403508,0.1722402293,0.8534545521,0.7855956117,0.3804940688,0.3033744935,0.0134121121,0.7247220045,0.3239799449,0.5395433162,0.7648703295,0.1689916737,0.7016573173,0.5915472063,0.2456645893,0.6919005406,0.2535201525,0.4518816210,0.0948039426,0.5158798415,0.7297661491,0.3568961844,0.3452494484,0.3337228564,0.0623258993,0.5084565377,0.1585949706,0.7812543309,0.5892171352,0.4352987392,0.1705578952,0.4649748327,0.1445428249,,,
|
||||
0.6875000000,0.7500000000,0.7972729541,0.7656295931,0.8047798146,0.4210944641,0.9495596520,0.2564582382,0.0869470569,0.7413500270,0.0926618222,0.4014761285,0.2481015425,0.2325752755,0.0678412090,0.8327358237,0.9366771176,0.7603401856,0.4709194202,0.0013421741,0.6969793467,0.7803202949,0.3712435162,0.7277776932,0.6492541826,0.9142240172,0.6499930692,0.9622941131,0.8251722490,0.9162823888,0.3251303604,0.4615749414,0.8418393293,0.1760768723,0.6450446800,0.4258416046,0.4078110659,0.6946288156,0.4398307409,0.4526773752,0.9216633332,0.5807717878,0.2695588598,0.2401386295,0.8712688570,0.4794638369,0.5362886589,0.5534540117,0.6477100106,0.3752358763,0.4875534533,0.8996371171,0.1154563460,0.0779831153,0.1277342089,0.8063365871,0.1313374497,0.9296416105,0.5511019584,0.2818133885,0.9499518040,0.9458435348,0.3409965113,0.9603743141,0.7153733519,0.8225758842,0.4474064647,0.5509970032,0.6046922461,0.2496839233,0.7098049910,0.2465102181,0.5172845421,0.9220486192,0.3675448599,0.1631474863,0.9081681864,0.5819129143,0.4095856373,0.3096013456,0.3027578304,0.2607257105,0.5812509328,0.8137784675,0.4119918980,0.8225071011,0.9856499089,0.5479148179,0.2853891188,0.0090171313,0.6690710657,0.9199579263,0.4137630577,0.5503251320,0.2482982120,0.9546005074,0.1055671843,0.6350373032,0.3269851748,0.8220459416,0.5415382171,0.4190973802,0.4187121543,0.2853184263,0.1283494134,0.3375549077,0.6602634194,0.4770000577,0.3271100372,0.4383558319,0.4143157501,0.4820398828,0.8281070660,0.3001287873,0.1368047087,0.3757513827,0.0349937901,0.3754054119,0.1850143555,0.6747776968,0.3888342835,0.7420188775,0.9451925391,0.2639461998,0.8757471105,0.8289346700,0.7173204881,0.7487527549,0.6600279508,0.5950739619,,,
|
||||
0.7500000000,0.8125000000,0.9918360200,0.8413040168,0.7585599809,0.7010234804,0.0875005967,0.2445954022,0.9433504627,0.7129720305,0.4357547185,0.5365997744,0.3586147751,0.5069929382,0.1981287585,0.5265833302,0.4481507521,0.0833059070,0.0099458960,0.4829644961,0.2602805076,0.5503992552,0.0065642314,0.0399043802,0.4158759147,0.6996538010,0.9095043880,0.3482764231,0.5089759044,0.7512149776,0.1415943836,0.1448071979,0.8604772950,0.9743917484,0.8379960111,0.6217453007,0.5853474766,0.8372208674,0.9314223635,0.6847964760,0.2016652324,0.6888024006,0.8598825224,0.4707778960,0.3636550519,0.3066147778,0.7566092857,0.7624425550,0.7862197864,0.7429981048,0.2078662752,0.6019000637,0.1483695374,0.7394767788,0.5261958127,0.4573342500,0.9898954427,0.6633318702,0.7886571467,0.8154489447,0.1204948060,0.0971162210,0.8065869608,0.6582383313,0.3058517003,0.8774744410,0.2229601552,0.3170009113,0.3536383279,0.0057896490,0.0105987708,0.3022447699,0.8474677387,0.3733084546,0.0068866063,0.9043302268,0.3196696739,0.2717395178,0.4124553083,0.2207904088,0.6011305319,0.5789561619,0.9242837201,0.7719639072,0.1995398887,0.0178118064,0.9882268365,0.0737970883,0.6437558192,0.3136051227,0.2762400561,0.2875013240,0.0091995180,0.5231736244,0.2244282521,0.4788563396,0.4312590321,0.1104531623,0.0708520801,0.3588576352,0.8964946857,0.5207229077,0.0078515329,0.1885409455,0.5230897027,0.8427014509,0.5024940576,0.4202928701,0.5526307372,0.1720640247,0.6911889249,0.5430255407,0.4169557719,0.7536734773,0.9756144097,0.4612334438,0.6550959172,0.9495328732,0.3518401869,0.2442284606,0.0097164342,0.0557602046,0.0039816455,0.4758843794,0.9184472405,0.5547581976,0.3187803025,0.9813381813,0.5006619387,0.0314118001,,,
|
||||
0.8125000000,0.8750000000,0.6191761866,0.9054350860,0.5487367243,0.3459811946,0.4862101979,0.5415295553,0.8671098289,0.2742507798,0.4538832838,0.4286050487,0.1073144525,0.1276574964,0.2140937971,0.2797712130,0.8440571555,0.6460165153,0.1185177197,0.6771998608,0.4850786522,0.5550173358,0.3533928362,0.8392060774,0.4451687529,0.3191749942,0.7469337904,0.5444718280,0.1249110878,0.4382645758,0.7262147728,0.9177367412,0.1103025437,0.6140038739,0.8764747414,0.9082464878,0.6889529957,0.0813048906,0.0767652937,0.5957161554,0.6444861246,0.2497679237,0.6517823939,0.3069547522,0.5148614575,0.5832309611,0.4174014262,0.4020766271,0.3713405207,0.5121809307,0.1036714972,0.0870049407,0.5926776354,0.4701013782,0.6934435910,0.1892986000,0.5792621251,0.6237755057,0.4967695414,0.5324963350,0.7552636988,0.7068167406,0.0653248145,0.2996625858,0.6450694269,0.5211735805,0.5647427198,0.3075995347,0.3649830059,0.2005785431,0.6558605947,0.0978516254,0.8363018110,0.4500579403,0.6472005888,0.5467596343,0.5609968198,0.1325631724,0.8892449874,0.1748603326,0.1662858317,0.4854824338,0.2636415791,0.1684568150,0.2441414313,0.0828040307,0.1043914095,0.3420590509,0.4041554881,0.5607400322,0.8855262103,0.7991761782,0.2948071482,0.6955452473,0.2266446196,0.8418665337,0.9115684670,0.4352800269,0.0599869231,0.8337285705,0.7098139764,0.8663035773,0.8252247791,0.0461895282,0.0966307523,0.1349785144,0.3728048163,0.6075393842,0.2386415070,0.0850718119,0.6082805034,0.2300724224,0.2179759610,0.1453707884,0.7663380459,0.6795278788,0.0639108133,0.8040997379,0.8384254870,0.6674299710,0.8382824929,0.7164929761,0.7098547309,0.1248717995,0.7519482924,0.7399912064,0.1975611635,0.3212597067,0.4571377423,0.7974166109,,,
|
||||
0.8750000000,0.9375000000,0.0675681902,0.9465224696,0.6246563757,0.4964401440,0.4307163425,0.2546305142,0.4038409237,0.9788208264,0.4153440665,0.1396958858,0.6012031690,0.5097675396,0.6435282647,0.4333023569,0.5118247755,0.4231589767,0.3791970923,0.4930308713,0.1451585852,0.9852486111,0.3183507365,0.9657861290,0.7909171465,0.7888372538,0.7204644214,0.5309445842,0.9875577185,0.2251691329,0.5989489446,0.1223990505,0.1309863974,0.2820620390,0.6537988915,0.6798148025,0.5483439765,0.6286506706,0.4249299334,0.3854467960,0.0419163734,0.7299999651,0.0257016472,0.8066606387,0.5830032376,0.3707251281,0.9189108999,0.4139946075,0.8143827766,0.2288588011,0.3485572150,0.5222964077,0.6099661470,0.7514275014,0.3832270841,0.6412743183,0.5788290792,0.0493872906,0.5193025507,0.8062192295,0.2703251892,0.9612743761,0.5794481141,0.2509157243,0.5700247560,0.5649895605,0.7199977674,0.8135184536,0.2376495383,0.0774716553,0.8044368352,0.7821648207,0.8967497018,0.9346269765,0.5824908591,0.5977028890,0.8610585704,0.7126857950,0.2937735878,0.9538895383,0.9488552525,0.8618694427,0.8841921510,0.1256232476,0.9878645325,0.7000299769,0.7986613419,0.1169867751,0.8692559747,0.3527300749,0.1565497790,0.0870121382,0.1273484039,0.9799885235,0.1240229644,0.2748411580,0.9855112352,0.5839213454,0.3594635474,0.8347468385,0.2573705588,0.5607065628,0.3590446534,0.6411395269,0.5288608000,0.1310746458,0.0330038576,0.4145023285,0.1636837497,0.0445809378,0.8380571448,0.6593008058,0.1558282361,0.7177646661,0.9663831610,0.8445544271,0.3144014403,0.5031124200,0.1103287465,0.9298843495,0.1985781076,0.8351032853,0.4374386359,0.8814636576,0.8946606796,0.7419673589,0.8060761911,0.1805287465,0.7365976390,0.6097845554,,,
|
||||
0.9375000000,1.0000000000,0.9162313873,0.7039652502,0.9958926889,0.8048050641,0.6580998558,0.2123428448,0.0004412036,0.8425683090,0.0571428468,0.8569603241,0.1960830328,0.6205328335,0.9285525971,0.2186271381,0.0130430821,0.8071690265,0.2467148174,0.7735173730,0.0295320423,0.9245268309,0.3800651950,0.8573000913,0.6029048001,0.5492588300,0.1346637527,0.8619715162,0.1997184067,0.5195509153,0.6846363698,0.1887053836,0.1640599121,0.0513311294,0.4855135144,0.2798208143,0.7097784660,0.8244420320,0.1037652704,0.6590829543,0.2595954034,0.1761031309,0.4938859646,0.6053629078,0.0862040159,0.3850135689,0.6365760874,0.0255041532,0.7906097812,0.9450102528,0.8545841393,0.6188349996,0.0109509660,0.1585280926,0.9788220741,0.3962385887,0.4504068582,0.7634726975,0.6411195237,0.4698150188,0.7469728915,0.5330595954,0.4404476730,0.3075191106,0.9554654676,0.1555883482,0.8038753311,0.3369397221,0.3140271492,0.3620656773,0.5264596820,0.9344380067,0.2270948181,0.1813250077,0.5241481701,0.5215025954,0.9158991752,0.0222571120,0.1313122681,0.1170573188,0.7167039318,0.2544327241,0.8234632669,0.4341020402,0.8246113895,0.9864847821,0.0232783328,0.3582654316,0.7527935044,0.9316744423,0.6037894480,0.3015077300,0.3874198273,0.4797800893,0.0514260521,0.8536630040,0.5574105263,0.9011588183,0.2052515480,0.3536422423,0.2142220286,0.4712827797,0.3031986870,0.9313315777,0.9560224176,0.8504335249,0.6212099902,0.9600807792,0.9028534018,0.1038160003,0.9422442666,0.9891826292,0.0934129481,0.7689513955,0.3385004348,0.0140340962,0.6088613088,0.9471964275,0.4578662498,0.2061621556,0.3482395075,0.2731952039,0.1292056721,0.2105367642,0.9794369666,0.9823816342,0.3654576021,0.6508769493,0.7211769500,0.2907935777,,,
|
||||
1.0000000000,1.0625000000,0.3288717223,0.8956982135,0.7175154851,0.2936425267,0.5254038805,0.6711162864,0.9505835837,0.9499251666,0.0674790458,0.0529535487,0.2380608639,0.0561124044,0.8459908199,0.8417618566,0.4740693765,0.3133779906,0.2753134349,0.8282249088,0.7035895018,0.7738361564,0.2366405798,0.4887161897,0.2019181536,0.1249526783,0.9952925150,0.9107778952,0.6300763036,0.2008045614,0.6709930738,0.6754648075,0.2864997049,0.7562307119,0.6299736681,0.6976480703,0.6782385600,0.0678208305,0.7237180374,0.9169032224,0.0469085400,0.9737601904,0.3116680456,0.6357961306,0.9562163893,0.1638539426,0.7652504940,0.8853740022,0.2793914834,0.7048494227,0.3393532555,0.2593762882,0.3953890991,0.9912515113,0.9623617800,0.8964278235,0.8333911817,0.2635855861,0.2261674772,0.2577400070,0.3039586723,0.1256286323,0.7896734662,0.8566005919,0.3841658426,0.4605072828,0.7725437889,0.1063366195,0.5972514064,0.0590787621,0.2833237725,0.1350965637,0.8942232225,0.7651046207,0.2020620182,0.9639793737,0.8158535908,0.3854755019,0.0143608907,0.0617878267,0.5632393812,0.6615521337,0.0224016900,0.9791559218,0.7715334210,0.6092171767,0.3660154589,0.6790046529,0.6172331879,0.7133937459,0.9152221391,0.8994737109,0.6104361496,0.1654097554,0.1662524543,0.7653892187,0.7044507489,0.4649232593,0.8286671813,0.5604844948,0.8829661258,0.4343976839,0.5982651568,0.2521597776,0.3864699518,0.1515400296,0.1077846852,0.6851595649,0.4352802478,0.4294838235,0.5613919883,0.0806270167,0.6635060802,0.8972335965,0.4348131975,0.5416767132,0.0620521177,0.7645231539,0.2742298618,0.9714634961,0.1392439241,0.9542690001,0.2264950508,0.5242728393,0.6881242732,0.2914699623,0.2085309383,0.8717810940,0.3136541282,0.1018438465,,,
|
||||
|
@@ -0,0 +1,545 @@
|
||||
Time:512Hz,Epoch,Noise 1,Noise 2,Noise 3,Noise 4,Event Id,Event Date,Event Duration
|
||||
0.0000000000,0,0.1276509815,0.2788001627,0.9800111165,0.8812423225,,,
|
||||
0.0019531250,0,0.3085663570,0.2317169255,0.1059675417,0.4711892216,,,
|
||||
0.0039062500,0,0.7789645349,0.6270744407,0.0989787877,0.6273901062,,,
|
||||
0.0058593750,0,0.2544820041,0.0206462047,0.2667732637,0.4001024703,,,
|
||||
0.0078125000,0,0.2577170827,0.8932497504,0.0936164563,0.3030632613,,,
|
||||
0.0097656250,0,0.8306098606,0.1907459770,0.3106222898,0.9361628154,,,
|
||||
0.0117187500,0,0.6003265893,0.4503573675,0.3441934220,0.3818552531,,,
|
||||
0.0136718750,0,0.1555515428,0.0089006005,0.5513935322,0.5262577983,,,
|
||||
0.0156250000,0,0.2765844858,0.3741191584,0.7100992661,0.8446825272,,,
|
||||
0.0175781250,0,0.1800983415,0.9476220037,0.1737488913,0.4065236386,,,
|
||||
0.0195312500,0,0.7171743014,0.0784789107,0.7459395295,0.4624227872,,,
|
||||
0.0214843750,0,0.0676116813,0.6932677082,0.6146815275,0.8067630604,,,
|
||||
0.0234375000,0,0.0200838614,0.3800698228,0.8537565614,0.9172393801,,,
|
||||
0.0253906250,0,0.3490915159,0.0946921902,0.0582459073,0.7552404082,,,
|
||||
0.0273437500,0,0.9225666784,0.5115203685,0.8892426926,0.1770821628,,,
|
||||
0.0292968750,0,0.4700529492,0.4034908635,0.4664971696,0.0102199195,,,
|
||||
0.0312500000,0,0.1439906447,0.1765625917,0.0070374508,0.0092898624,,,
|
||||
0.0332031250,0,0.8735866135,0.9694052222,0.4945583295,0.6702349838,,,
|
||||
0.0351562500,0,0.9596816355,0.4774389013,0.8643378734,0.2293010280,,,
|
||||
0.0371093750,0,0.9890093571,0.5106695876,0.4771499431,0.9426534649,,,
|
||||
0.0390625000,0,0.1608183412,0.4422527624,0.8963911207,0.4273886823,,,
|
||||
0.0410156250,0,0.7605574597,0.8471352365,0.5397317070,0.2859543816,,,
|
||||
0.0429687500,0,0.7069561521,0.6101486075,0.6493543428,0.9491707447,,,
|
||||
0.0449218750,0,0.9346017786,0.7288885713,0.5936009986,0.4114119632,,,
|
||||
0.0468750000,0,0.9042563275,0.2211433772,0.8740211152,0.0981834438,,,
|
||||
0.0488281250,0,0.9761265456,0.3806563101,0.8920098066,0.7286428297,,,
|
||||
0.0507812500,0,0.6130849579,0.8856918216,0.3503170034,0.5256292939,,,
|
||||
0.0527343750,0,0.8678017857,0.3822564180,0.6108583007,0.4864756714,,,
|
||||
0.0546875000,0,0.5019965817,0.4941701319,0.6212668198,0.0385970196,,,
|
||||
0.0566406250,0,0.5277878270,0.8627308370,0.8374058811,0.0310396899,,,
|
||||
0.0585937500,0,0.7693341547,0.9832691720,0.1571595417,0.9037684486,,,
|
||||
0.0605468750,0,0.4684032931,0.2325949920,0.7011381390,0.0141390373,,,
|
||||
0.0625000000,1,0.8367542089,0.9558685038,0.9688963213,0.5381925830,,,
|
||||
0.0644531250,1,0.8521201352,0.7515846295,0.8623778452,0.8120114051,,,
|
||||
0.0664062500,1,0.4326860616,0.5165756010,0.5215125228,0.3015441904,,,
|
||||
0.0683593750,1,0.0626169734,0.7133678738,0.4758519852,0.3982388966,,,
|
||||
0.0703125000,1,0.9768561120,0.7591111555,0.8196392297,0.1391515601,,,
|
||||
0.0722656250,1,0.8578928597,0.2868922015,0.7278519578,0.8900003748,,,
|
||||
0.0742187500,1,0.7514423283,0.3492095852,0.5052883255,0.9790684455,,,
|
||||
0.0761718750,1,0.7293294109,0.0986221319,0.4341941983,0.7989717678,,,
|
||||
0.0781250000,1,0.7915512780,0.2617537291,0.1000760957,0.8795328548,,,
|
||||
0.0800781250,1,0.9701463417,0.6310394087,0.7542459588,0.2785037511,,,
|
||||
0.0820312500,1,0.8145337973,0.9941854759,0.2815517513,0.0045786556,,,
|
||||
0.0839843750,1,0.8589639370,0.1969860690,0.8577664557,0.7519159273,,,
|
||||
0.0859375000,1,0.2795593245,0.9097975651,0.6449571303,0.6510467425,,,
|
||||
0.0878906250,1,0.0708383643,0.9844854285,0.4189832469,0.9148418091,,,
|
||||
0.0898437500,1,0.1410587770,0.8686903990,0.8101392037,0.9140618418,,,
|
||||
0.0917968750,1,0.0315964462,0.0339632155,0.4409458800,0.6738175135,,,
|
||||
0.0937500000,1,0.7580716163,0.0029117847,0.9416581537,0.2670429794,,,
|
||||
0.0957031250,1,0.4002936617,0.3953563941,0.4354947014,0.0241012422,,,
|
||||
0.0976562500,1,0.6805019742,0.5852424444,0.9849745545,0.8617281017,,,
|
||||
0.0996093750,1,0.1342884866,0.2860122398,0.7102625438,0.2481575462,,,
|
||||
0.1015625000,1,0.6981669578,0.1783118374,0.8516177488,0.8705970314,,,
|
||||
0.1035156250,1,0.1819152979,0.7780929049,0.8233418250,0.9241389111,,,
|
||||
0.1054687500,1,0.7950496622,0.8647075142,0.0129886777,0.4410888362,,,
|
||||
0.1074218750,1,0.1811624330,0.5116186531,0.4547199199,0.8056800328,,,
|
||||
0.1093750000,1,0.0362837398,0.2561552674,0.4547825414,0.5773156560,,,
|
||||
0.1113281250,1,0.5380683220,0.6130943180,0.3017567908,0.0284445388,,,
|
||||
0.1132812500,1,0.2644293748,0.0368850478,0.4616725056,0.9413765091,,,
|
||||
0.1152343750,1,0.8972898975,0.1998824074,0.3274557481,0.3579953976,,,
|
||||
0.1171875000,1,0.0168464282,0.1166782510,0.0736811778,0.6925130279,,,
|
||||
0.1191406250,1,0.5923203786,0.7633251783,0.9446329186,0.5572869231,,,
|
||||
0.1210937500,1,0.3396585051,0.0153831262,0.6792490359,0.0295981884,,,
|
||||
0.1230468750,1,0.6362284014,0.5369453721,0.9656954347,0.8791597558,,,
|
||||
0.1250000000,2,0.2337946561,0.1190734650,0.0626613630,0.5272158433,,,
|
||||
0.1269531250,2,0.4128819830,0.6709878326,0.0038196605,0.3581657342,,,
|
||||
0.1289062500,2,0.7859546749,0.5281384096,0.6521776719,0.4348313336,,,
|
||||
0.1308593750,2,0.0390759464,0.4461622771,0.0488363560,0.4808078697,,,
|
||||
0.1328125000,2,0.9383867618,0.7737875879,0.0688997617,0.8730048109,,,
|
||||
0.1347656250,2,0.7727890983,0.3735630005,0.9288594450,0.4715279418,,,
|
||||
0.1367187500,2,0.0057901163,0.4163702421,0.2194966618,0.1669509744,,,
|
||||
0.1386718750,2,0.6928461199,0.2554316435,0.4694574887,0.0175182340,,,
|
||||
0.1406250000,2,0.5129134154,0.5856649550,0.0898075390,0.3229898170,,,
|
||||
0.1425781250,2,0.7649766149,0.6393871089,0.7684976636,0.8299107496,,,
|
||||
0.1445312500,2,0.2180511351,0.8596432649,0.1483660867,0.1665115349,,,
|
||||
0.1464843750,2,0.3611585819,0.0921374985,0.8538685897,0.9069783224,,,
|
||||
0.1484375000,2,0.5969340219,0.1961269137,0.1029027528,0.8045245227,,,
|
||||
0.1503906250,2,0.0499008780,0.0974264622,0.5842647175,0.3397303273,,,
|
||||
0.1523437500,2,0.5954238679,0.9031029753,0.1698406227,0.6387245483,,,
|
||||
0.1542968750,2,0.9326017273,0.4038142664,0.8253482326,0.1627873755,,,
|
||||
0.1562500000,2,0.8712227487,0.0618309802,0.3726967243,0.4451253370,,,
|
||||
0.1582031250,2,0.6852292044,0.1147632850,0.5376503016,0.1462208915,,,
|
||||
0.1601562500,2,0.8921249909,0.0863066129,0.7909538967,0.6211571102,,,
|
||||
0.1621093750,2,0.7981687440,0.8388189233,0.1172924649,0.1913345626,,,
|
||||
0.1640625000,2,0.3189117718,0.9359803812,0.6940958097,0.0361434845,,,
|
||||
0.1660156250,2,0.5461656393,0.0729919914,0.3085543287,0.9829967283,,,
|
||||
0.1679687500,2,0.7135640443,0.8634178529,0.0508666828,0.5103130431,,,
|
||||
0.1699218750,2,0.6259520410,0.7013263162,0.1993125062,0.0300191126,,,
|
||||
0.1718750000,2,0.3636565544,0.6933502334,0.1902173155,0.3889882183,,,
|
||||
0.1738281250,2,0.0392293937,0.4553789329,0.9871238486,0.3470031086,,,
|
||||
0.1757812500,2,0.6683370932,0.6941734469,0.8803110654,0.7196198201,,,
|
||||
0.1777343750,2,0.3557324144,0.4117753741,0.7099557552,0.9401496889,,,
|
||||
0.1796875000,2,0.4519558856,0.3309620759,0.7963344492,0.2998728864,,,
|
||||
0.1816406250,2,0.9766512695,0.9687239919,0.4191189073,0.2354997334,,,
|
||||
0.1835937500,2,0.9285292204,0.9664343141,0.8797372861,0.4664114930,,,
|
||||
0.1855468750,2,0.0704731345,0.5200172788,0.2558905915,0.1531779014,,,
|
||||
0.1875000000,3,0.9103577151,0.3051399530,0.3802959747,0.5608211916,,,
|
||||
0.1894531250,3,0.7322697260,0.4646240273,0.7389562586,0.0070930065,,,
|
||||
0.1914062500,3,0.9775205301,0.6706804007,0.2981214062,0.6064129225,,,
|
||||
0.1933593750,3,0.3513319721,0.1147635186,0.1866387101,0.3831581555,,,
|
||||
0.1953125000,3,0.2071030629,0.4649826710,0.2611368874,0.0434090609,,,
|
||||
0.1972656250,3,0.8196081722,0.4112765016,0.9947107485,0.6513867872,,,
|
||||
0.1992187500,3,0.9733258400,0.3824872016,0.4988888649,0.3183777165,,,
|
||||
0.2011718750,3,0.5881601563,0.8593616697,0.3022438444,0.7995925019,,,
|
||||
0.2031250000,3,0.1197004502,0.0933767378,0.9183180968,0.7042102139,,,
|
||||
0.2050781250,3,0.5103556064,0.5311018426,0.5577965465,0.1012502138,,,
|
||||
0.2070312500,3,0.2137417535,0.1784377997,0.0185600386,0.5753634071,,,
|
||||
0.2089843750,3,0.8751701608,0.5748710451,0.8417926282,0.8197028155,,,
|
||||
0.2109375000,3,0.1022837155,0.6268135523,0.7013708267,0.9962205945,,,
|
||||
0.2128906250,3,0.2256511098,0.5796371773,0.6197344016,0.7943489363,,,
|
||||
0.2148437500,3,0.8379743095,0.5485193282,0.2306215530,0.9106305945,,,
|
||||
0.2167968750,3,0.5906426255,0.3640996115,0.5610837436,0.8107932284,,,
|
||||
0.2187500000,3,0.0032579657,0.1254784390,0.4923886575,0.1380567863,,,
|
||||
0.2207031250,3,0.5796410651,0.4244301743,0.4880758342,0.3453556513,,,
|
||||
0.2226562500,3,0.1578681830,0.2975058199,0.4114988993,0.9910429649,,,
|
||||
0.2246093750,3,0.6801350070,0.7340655336,0.5105615265,0.3494833119,,,
|
||||
0.2265625000,3,0.3606155966,0.8103139903,0.7059087548,0.1461532058,,,
|
||||
0.2285156250,3,0.3331521475,0.3714994539,0.4256252155,0.4936132992,,,
|
||||
0.2304687500,3,0.4855763158,0.7642698493,0.4567739645,0.0738400100,,,
|
||||
0.2324218750,3,0.6857705140,0.9990958001,0.7852868973,0.1356586595,,,
|
||||
0.2343750000,3,0.0204300629,0.4337335974,0.3717347013,0.5596586859,,,
|
||||
0.2363281250,3,0.7904259902,0.4814410254,0.1742401007,0.2649804230,,,
|
||||
0.2382812500,3,0.4132921230,0.6775020990,0.9390176404,0.7180448563,,,
|
||||
0.2402343750,3,0.4556477382,0.5093132297,0.5365688319,0.8605765116,,,
|
||||
0.2421875000,3,0.3138149357,0.5904912353,0.5417710205,0.9607072009,,,
|
||||
0.2441406250,3,0.8660169821,0.9988746298,0.9465961300,0.3528365504,,,
|
||||
0.2460937500,3,0.0126764781,0.9974072040,0.9100059441,0.6579066119,,,
|
||||
0.2480468750,3,0.7612893744,0.3337405734,0.1538414950,0.3822216671,,,
|
||||
0.2500000000,4,0.3222398211,0.2723600003,0.1464531797,0.0567392251,,,
|
||||
0.2519531250,4,0.0704166759,0.3662723931,0.1605273527,0.1368231662,,,
|
||||
0.2539062500,4,0.2231628485,0.6844297640,0.3831995630,0.5801532618,,,
|
||||
0.2558593750,4,0.1398879983,0.3131517000,0.2658558676,0.3751034609,,,
|
||||
0.2578125000,4,0.5587351650,0.5879184052,0.1597614412,0.5401158298,,,
|
||||
0.2597656250,4,0.6807701276,0.6947035883,0.3470928550,0.6191579264,,,
|
||||
0.2617187500,4,0.3978711937,0.5450646314,0.4893422120,0.9736832939,,,
|
||||
0.2636718750,4,0.5677280941,0.0743406375,0.5558431223,0.7824254800,,,
|
||||
0.2656250000,4,0.0877346403,0.1697150311,0.3732336606,0.0817826446,,,
|
||||
0.2675781250,4,0.2498704675,0.7783989236,0.8888188694,0.9619698252,,,
|
||||
0.2695312500,4,0.7234041765,0.8732161885,0.2125916400,0.1915143377,,,
|
||||
0.2714843750,4,0.2787337776,0.2255633872,0.7468874420,0.4455531018,,,
|
||||
0.2734375000,4,0.5536213885,0.1002065176,0.1481359515,0.9731156004,,,
|
||||
0.2753906250,4,0.2858332333,0.8052669964,0.9788724254,0.2036649669,,,
|
||||
0.2773437500,4,0.4384922662,0.3010417784,0.2102164433,0.6556176359,,,
|
||||
0.2792968750,4,0.9844025287,0.9336166591,0.3657510008,0.0092250702,,,
|
||||
0.2812500000,4,0.4749177301,0.1029748281,0.4144281058,0.2568479199,,,
|
||||
0.2832031250,4,0.1945731260,0.5911639100,0.5175690255,0.1839895314,,,
|
||||
0.2851562500,4,0.6751070558,0.1218867330,0.5848218128,0.0144936540,,,
|
||||
0.2871093750,4,0.5565265811,0.0706522940,0.9582538242,0.3164990707,,,
|
||||
0.2890625000,4,0.6811653359,0.1241726757,0.7851694785,0.6322026786,,,
|
||||
0.2910156250,4,0.4077125096,0.6859315163,0.5911462612,0.9816993955,,,
|
||||
0.2929687500,4,0.6270270052,0.7934336257,0.2103379229,0.6305599436,,,
|
||||
0.2949218750,4,0.1296151874,0.2248091483,0.1660298733,0.8864813389,,,
|
||||
0.2968750000,4,0.1498718562,0.6674939501,0.8575848024,0.2908270911,,,
|
||||
0.2988281250,4,0.8110699588,0.6136764991,0.9418290600,0.6408138282,,,
|
||||
0.3007812500,4,0.1296923172,0.5607704790,0.7898748701,0.3631542830,,,
|
||||
0.3027343750,4,0.4094840081,0.0529603250,0.3117963094,0.2116549816,,,
|
||||
0.3046875000,4,0.1614231374,0.4032979626,0.5606228069,0.2658720037,,,
|
||||
0.3066406250,4,0.0149710681,0.0650217922,0.8494730568,0.6742778460,,,
|
||||
0.3085937500,4,0.1271567135,0.5275226356,0.5074276195,0.9832397639,,,
|
||||
0.3105468750,4,0.4881261149,0.8504798019,0.0859022033,0.8070368627,,,
|
||||
0.3125000000,5,0.5119356245,0.2817423891,0.6564834723,0.0156511902,,,
|
||||
0.3144531250,5,0.9076033339,0.2805206021,0.8440965861,0.9010644406,,,
|
||||
0.3164062500,5,0.1021260370,0.7548397928,0.3980913041,0.3931173608,,,
|
||||
0.3183593750,5,0.2178466010,0.0395001653,0.7474224495,0.5333806190,,,
|
||||
0.3203125000,5,0.3088591620,0.7502715727,0.8879149971,0.3440123843,,,
|
||||
0.3222656250,5,0.1933700668,0.7365343696,0.7874066816,0.2029055802,,,
|
||||
0.3242187500,5,0.3108512906,0.8355859024,0.0050644493,0.9401674101,,,
|
||||
0.3261718750,5,0.2428486212,0.5387497959,0.8546116492,0.0782167329,,,
|
||||
0.3281250000,5,0.3763068160,0.0019015423,0.3822169921,0.9936825447,,,
|
||||
0.3300781250,5,0.0241590391,0.7704750157,0.1662301295,0.4280788542,,,
|
||||
0.3320312500,5,0.6155288082,0.5881034718,0.7684135006,0.8153924667,,,
|
||||
0.3339843750,5,0.4063954097,0.1133751869,0.3421241981,0.5066414350,,,
|
||||
0.3359375000,5,0.2676465407,0.2839795137,0.2342771927,0.6782000735,,,
|
||||
0.3378906250,5,0.3809404657,0.5214965504,0.5393902943,0.7820010034,,,
|
||||
0.3398437500,5,0.4595372491,0.2101573874,0.1099242344,0.3346228362,,,
|
||||
0.3417968750,5,0.3500187553,0.7776345888,0.3394453200,0.8747201562,,,
|
||||
0.3437500000,5,0.8005180575,0.7069745648,0.0543363830,0.7170361001,,,
|
||||
0.3457031250,5,0.0947343837,0.4419909262,0.5749388847,0.9356015073,,,
|
||||
0.3476562500,5,0.8735375523,0.6509564363,0.3299763254,0.5437440500,,,
|
||||
0.3496093750,5,0.0139895300,0.3465320331,0.4298201529,0.1615293233,,,
|
||||
0.3515625000,5,0.3494095602,0.5630004159,0.7145421156,0.6519731758,,,
|
||||
0.3535156250,5,0.6385047704,0.3351737387,0.0010750701,0.6467023685,,,
|
||||
0.3554687500,5,0.7558491265,0.1303907561,0.0774761189,0.0099258577,,,
|
||||
0.3574218750,5,0.3763215463,0.7626591513,0.3843176349,0.6999134321,,,
|
||||
0.3593750000,5,0.9459182480,0.2822991519,0.8058737975,0.3925624937,,,
|
||||
0.3613281250,5,0.6670272711,0.1997133561,0.0264408863,0.0088921678,,,
|
||||
0.3632812500,5,0.0814156909,0.9809584408,0.5119782537,0.2698570353,,,
|
||||
0.3652343750,5,0.6214387356,0.7788854365,0.6466132149,0.4149384324,,,
|
||||
0.3671875000,5,0.3295762329,0.7474032631,0.7233265294,0.5952670325,,,
|
||||
0.3691406250,5,0.3085299081,0.1130057727,0.2304738835,0.2423203441,,,
|
||||
0.3710937500,5,0.2614920423,0.5484677095,0.3593721886,0.1766454829,,,
|
||||
0.3730468750,5,0.0333613215,0.5202360961,0.3712536844,0.1457529799,,,
|
||||
0.3750000000,6,0.2711958543,0.7373103106,0.4145633026,0.9454343871,,,
|
||||
0.3769531250,6,0.7562512259,0.0294363098,0.1426842657,0.5116447248,,,
|
||||
0.3789062500,6,0.2743272211,0.6717776491,0.3247361090,0.8491178108,,,
|
||||
0.3808593750,6,0.4900445505,0.4427132935,0.1083285240,0.1612431379,,,
|
||||
0.3828125000,6,0.5272925803,0.0822945165,0.7025269971,0.0997931852,,,
|
||||
0.3847656250,6,0.3066302766,0.9591908171,0.4371041826,0.0838858041,,,
|
||||
0.3867187500,6,0.7285174418,0.5252626843,0.5971537724,0.7731697413,,,
|
||||
0.3886718750,6,0.1672329274,0.8309123635,0.8300182682,0.9627268005,,,
|
||||
0.3906250000,6,0.1822723579,0.6139670927,0.4232092910,0.5834038947,,,
|
||||
0.3925781250,6,0.0819439858,0.4712245537,0.0878674437,0.3055652413,,,
|
||||
0.3945312500,6,0.1208156396,0.8608716517,0.6491940646,0.9393811452,,,
|
||||
0.3964843750,6,0.3637260925,0.8890715158,0.4209694595,0.7516340464,,,
|
||||
0.3984375000,6,0.2084854927,0.7729421209,0.6781614600,0.1995030013,,,
|
||||
0.4003906250,6,0.2622310307,0.9518046877,0.7421959753,0.4414433844,,,
|
||||
0.4023437500,6,0.1057137519,0.3048298301,0.7128665391,0.2554091765,,,
|
||||
0.4042968750,6,0.6699885647,0.2000759561,0.3243111507,0.8554089530,,,
|
||||
0.4062500000,6,0.5724080147,0.9142604824,0.2352116713,0.4342926862,,,
|
||||
0.4082031250,6,0.9874490481,0.4919558025,0.1827386210,0.9303498773,,,
|
||||
0.4101562500,6,0.2793797320,0.5709865743,0.0885345663,0.6548899561,,,
|
||||
0.4121093750,6,0.0594072095,0.7210385038,0.5715629426,0.9207222888,,,
|
||||
0.4140625000,6,0.4433972202,0.1531122657,0.0554876882,0.0202729718,,,
|
||||
0.4160156250,6,0.6586631446,0.9136778524,0.7935795013,0.9037989336,,,
|
||||
0.4179687500,6,0.8600455530,0.1702952585,0.0221925681,0.4872820075,,,
|
||||
0.4199218750,6,0.8281408537,0.7379220470,0.7302297549,0.5690351522,,,
|
||||
0.4218750000,6,0.8492151820,0.9434478998,0.7475658453,0.5055588309,,,
|
||||
0.4238281250,6,0.8764435889,0.6749046776,0.4382627660,0.1264068638,,,
|
||||
0.4257812500,6,0.0890310449,0.2852944639,0.5938582667,0.9126903638,,,
|
||||
0.4277343750,6,0.4349094455,0.3348919665,0.4768854829,0.0436023842,,,
|
||||
0.4296875000,6,0.1853784721,0.1555240133,0.1085044234,0.5617910868,,,
|
||||
0.4316406250,6,0.6280997160,0.9267301625,0.7552123212,0.4189258032,,,
|
||||
0.4335937500,6,0.1129479122,0.7337364382,0.2948974348,0.1092160507,,,
|
||||
0.4355468750,6,0.7800526726,0.7968367354,0.2643386708,0.0650400312,,,
|
||||
0.4375000000,7,0.7556289285,0.8312957047,0.0274145626,0.2872341555,,,
|
||||
0.4394531250,7,0.6813511865,0.1840991345,0.1203293763,0.9993061700,,,
|
||||
0.4414062500,7,0.5744922631,0.2067680703,0.6372034138,0.3432741717,,,
|
||||
0.4433593750,7,0.3342743898,0.6814961813,0.3930504988,0.2910125437,,,
|
||||
0.4453125000,7,0.8448010422,0.7151589338,0.1709126856,0.1730857086,,,
|
||||
0.4472656250,7,0.3391507515,0.5593426197,0.6125557562,0.5262850923,,,
|
||||
0.4492187500,7,0.6207966937,0.4295897181,0.8461693232,0.2992522756,,,
|
||||
0.4511718750,7,0.5929400700,0.3535312691,0.1384564445,0.3093649398,,,
|
||||
0.4531250000,7,0.9574117258,0.5362221601,0.5878624022,0.7609138230,,,
|
||||
0.4550781250,7,0.6169657044,0.9478328971,0.5406309133,0.7960202976,,,
|
||||
0.4570312500,7,0.3718764859,0.2409631743,0.7421573552,0.1452300784,,,
|
||||
0.4589843750,7,0.2172947293,0.8063620711,0.0169844786,0.8530098824,,,
|
||||
0.4609375000,7,0.6405593818,0.0886849870,0.7393631812,0.5608159048,,,
|
||||
0.4628906250,7,0.3301244162,0.3045092777,0.5553955727,0.7844202144,,,
|
||||
0.4648437500,7,0.6105497093,0.8816661765,0.3496713438,0.4341148173,,,
|
||||
0.4667968750,7,0.4785594458,0.6741829435,0.9760886808,0.0460658004,,,
|
||||
0.4687500000,7,0.2685640310,0.1549685842,0.8030092455,0.7840434185,,,
|
||||
0.4707031250,7,0.9920860729,0.3369952703,0.3230988467,0.8000948760,,,
|
||||
0.4726562500,7,0.7781536586,0.5393682488,0.3545355701,0.6898032343,,,
|
||||
0.4746093750,7,0.9874543541,0.8163192633,0.7358159104,0.0579032118,,,
|
||||
0.4765625000,7,0.1606484395,0.3294683367,0.8177729929,0.9931933905,,,
|
||||
0.4785156250,7,0.8741030842,0.4414024977,0.7948677770,0.8831974105,,,
|
||||
0.4804687500,7,0.7275397889,0.3062153764,0.7400966296,0.9561227595,,,
|
||||
0.4824218750,7,0.0471009226,0.3693181614,0.4702358427,0.2074983672,,,
|
||||
0.4843750000,7,0.3053766720,0.7960140088,0.9454048728,0.2308713167,,,
|
||||
0.4863281250,7,0.4626122559,0.6761480647,0.3643806616,0.9231073433,,,
|
||||
0.4882812500,7,0.1919385788,0.3600851789,0.1283902042,0.2547208571,,,
|
||||
0.4902343750,7,0.6203144770,0.6349814320,0.1735018592,0.6862301833,,,
|
||||
0.4921875000,7,0.0930758305,0.1574131846,0.5894391029,0.6079542683,,,
|
||||
0.4941406250,7,0.1409924102,0.4524341966,0.3264837877,0.9015972605,,,
|
||||
0.4960937500,7,0.4256628547,0.7216357137,0.4641470613,0.8467904634,,,
|
||||
0.4980468750,7,0.9136947806,0.9305806581,0.2050935281,0.2011821440,,,
|
||||
0.5000000000,8,0.6763997232,0.8047656761,0.4725015503,0.3136168602,,,
|
||||
0.5019531250,8,0.9566771863,0.2434736437,0.7620979361,0.3592691894,,,
|
||||
0.5039062500,8,0.0310857766,0.6088502966,0.1935235944,0.2967968208,,,
|
||||
0.5058593750,8,0.6916513743,0.9872427711,0.9137855817,0.4958374165,,,
|
||||
0.5078125000,8,0.2188973930,0.8648707801,0.3154253981,0.4416629027,,,
|
||||
0.5097656250,8,0.7793014033,0.1536630907,0.4635532626,0.8141289146,,,
|
||||
0.5117187500,8,0.3518483583,0.5314552551,0.2141119696,0.9725757653,,,
|
||||
0.5136718750,8,0.9252917892,0.5105580387,0.8827089283,0.4798642125,,,
|
||||
0.5156250000,8,0.9833136520,0.9706283531,0.7272218857,0.6869332488,,,
|
||||
0.5175781250,8,0.4433103458,0.2854198834,0.7223878577,0.5289349968,,,
|
||||
0.5195312500,8,0.9648530781,0.7968621927,0.9810421665,0.7853239239,,,
|
||||
0.5214843750,8,0.2105386283,0.1607735776,0.1261192143,0.6474895792,,,
|
||||
0.5234375000,8,0.8588351333,0.2345801315,0.4512332520,0.5602800129,,,
|
||||
0.5253906250,8,0.1792554802,0.4704879958,0.3693762361,0.0024663457,,,
|
||||
0.5273437500,8,0.1747301598,0.5323132339,0.5316330378,0.1370742149,,,
|
||||
0.5292968750,8,0.5075852461,0.5549905950,0.1693090932,0.2722331588,,,
|
||||
0.5312500000,8,0.6256636949,0.0662830796,0.1278698382,0.1004613198,,,
|
||||
0.5332031250,8,0.7487605663,0.7978154977,0.6807751060,0.5870047279,,,
|
||||
0.5351562500,8,0.5033255348,0.0678251344,0.8247700266,0.0348402278,,,
|
||||
0.5371093750,8,0.7550483036,0.7849070791,0.0114252714,0.2912984174,,,
|
||||
0.5390625000,8,0.6062836947,0.1010782735,0.3820414457,0.6992224075,,,
|
||||
0.5410156250,8,0.5153142291,0.6330895138,0.7609551994,0.2814032317,,,
|
||||
0.5429687500,8,0.8236581367,0.5634968271,0.8699487241,0.7068289944,,,
|
||||
0.5449218750,8,0.9420737431,0.0905826252,0.7633925076,0.1889573936,,,
|
||||
0.5468750000,8,0.4342100325,0.6641730806,0.3805186013,0.5405169851,,,
|
||||
0.5488281250,8,0.6558729701,0.8465795210,0.5328507272,0.8682296458,,,
|
||||
0.5507812500,8,0.1377653212,0.3679061767,0.4630858477,0.3971538963,,,
|
||||
0.5527343750,8,0.3989049022,0.5338541733,0.3907739241,0.1594827131,,,
|
||||
0.5546875000,8,0.6111041454,0.3477681694,0.4158552410,0.4514245144,,,
|
||||
0.5566406250,8,0.4545774704,0.0774343594,0.8622389033,0.2920969268,,,
|
||||
0.5585937500,8,0.8874135290,0.1209936484,0.2823406118,0.6311044400,,,
|
||||
0.5605468750,8,0.2349680497,0.2755913946,0.2035461206,0.7413401320,,,
|
||||
0.5625000000,9,0.1972855867,0.2999509042,0.1061392007,0.3244280743,,,
|
||||
0.5644531250,9,0.1943430169,0.0650441553,0.9866956521,0.0383472247,,,
|
||||
0.5664062500,9,0.3150477246,0.0202402689,0.9091032266,0.7511771135,,,
|
||||
0.5683593750,9,0.2806347718,0.0606296037,0.5000918366,0.0594387662,,,
|
||||
0.5703125000,9,0.7676843095,0.0869044447,0.8132232211,0.3482461092,,,
|
||||
0.5722656250,9,0.7995439367,0.6529182072,0.6046909518,0.9319283383,,,
|
||||
0.5742187500,9,0.0870202456,0.4790799008,0.3071443974,0.9402125657,,,
|
||||
0.5761718750,9,0.3162364427,0.5914357088,0.4661316781,0.5451108965,,,
|
||||
0.5781250000,9,0.7010674418,0.7945038017,0.2390129962,0.3477152325,,,
|
||||
0.5800781250,9,0.1947397036,0.5413340654,0.3201177218,0.5407370804,,,
|
||||
0.5820312500,9,0.8328640803,0.9920526361,0.3743750853,0.3192371463,,,
|
||||
0.5839843750,9,0.9052840879,0.2193654007,0.4244030279,0.5398679611,,,
|
||||
0.5859375000,9,0.1616001481,0.9718400075,0.3243954531,0.9626357672,,,
|
||||
0.5878906250,9,0.9504057937,0.4048577053,0.9729560439,0.3601961287,,,
|
||||
0.5898437500,9,0.0300064611,0.5180021916,0.3501458105,0.3080020223,,,
|
||||
0.5917968750,9,0.6596558122,0.3911213661,0.6267064742,0.8381733592,,,
|
||||
0.5937500000,9,0.7238059782,0.7311176283,0.4292431986,0.5826185821,,,
|
||||
0.5957031250,9,0.9202213555,0.9143543798,0.4830455480,0.7501451245,,,
|
||||
0.5976562500,9,0.2716151509,0.3599142719,0.0636586486,0.8060805497,,,
|
||||
0.5996093750,9,0.2762552623,0.7671216675,0.2657802773,0.4833180015,,,
|
||||
0.6015625000,9,0.8884833963,0.6704205323,0.2255078792,0.0481695530,,,
|
||||
0.6035156250,9,0.6795009119,0.3590836234,0.0804334013,0.8779915341,,,
|
||||
0.6054687500,9,0.9768890734,0.8913888028,0.6375375940,0.2201469131,,,
|
||||
0.6074218750,9,0.3767605892,0.9825549717,0.4366183716,0.1487666287,,,
|
||||
0.6093750000,9,0.3759939063,0.4018956947,0.4662037152,0.5325658764,,,
|
||||
0.6113281250,9,0.9764568252,0.6410500994,0.9505981330,0.4267429616,,,
|
||||
0.6132812500,9,0.4717960283,0.0641434256,0.8767791053,0.1960623644,,,
|
||||
0.6152343750,9,0.9418178981,0.0616493451,0.9285683327,0.0352241963,,,
|
||||
0.6171875000,9,0.1084330047,0.0991580372,0.5713762976,0.5016443327,,,
|
||||
0.6191406250,9,0.8066923548,0.6314367380,0.6012040998,0.5458180676,,,
|
||||
0.6210937500,9,0.1615104144,0.2011672310,0.5555002745,0.6284950413,,,
|
||||
0.6230468750,9,0.7276043738,0.1827108136,0.8338131376,0.3883147545,,,
|
||||
0.6250000000,10,0.1944731961,0.4268959565,0.4477589943,0.8994089330,,,
|
||||
0.6269531250,10,0.0547521922,0.3562535723,0.9841976350,0.5410477258,,,
|
||||
0.6289062500,10,0.8582878269,0.8550072007,0.7028079650,0.8752094619,,,
|
||||
0.6308593750,10,0.5798499850,0.1041692668,0.7443351815,0.6478584115,,,
|
||||
0.6328125000,10,0.6469700811,0.8080954633,0.7703724296,0.9867473561,,,
|
||||
0.6347656250,10,0.0172391227,0.6664102199,0.1485918507,0.9527045682,,,
|
||||
0.6367187500,10,0.6046016673,0.2683339873,0.5193479839,0.6629877356,,,
|
||||
0.6386718750,10,0.6630974207,0.2913460375,0.6654274506,0.3632108872,,,
|
||||
0.6406250000,10,0.9921777030,0.6758803106,0.8390836352,0.8765555636,,,
|
||||
0.6425781250,10,0.1588407005,0.5766103226,0.8337919305,0.1910167106,,,
|
||||
0.6445312500,10,0.2568764952,0.2419348585,0.6083639048,0.1159380712,,,
|
||||
0.6464843750,10,0.8318267881,0.0868549161,0.7802492054,0.0466908372,,,
|
||||
0.6484375000,10,0.7597952797,0.3388188053,0.0771862220,0.5456002909,,,
|
||||
0.6503906250,10,0.1601368194,0.7386710965,0.6039251764,0.4388306185,,,
|
||||
0.6523437500,10,0.2407752846,0.6457893855,0.9967206691,0.1763242260,,,
|
||||
0.6542968750,10,0.8297953680,0.1361860558,0.8010149540,0.6337104803,,,
|
||||
0.6562500000,10,0.3127207926,0.1680486589,0.1374521074,0.6239346305,,,
|
||||
0.6582031250,10,0.9277359054,0.6660244581,0.2261444884,0.6077783490,,,
|
||||
0.6601562500,10,0.7976024142,0.4315694224,0.9784031389,0.9729801253,,,
|
||||
0.6621093750,10,0.0638243533,0.0041289441,0.9833295215,0.9228688856,,,
|
||||
0.6640625000,10,0.2276029426,0.6578602651,0.0851616929,0.5490504063,,,
|
||||
0.6660156250,10,0.2861677434,0.5270892901,0.6276651362,0.5376690421,,,
|
||||
0.6679687500,10,0.4355795169,0.2871391575,0.2338773983,0.1401777440,,,
|
||||
0.6699218750,10,0.8471104680,0.6963547631,0.3188396783,0.4683632699,,,
|
||||
0.6718750000,10,0.0607887292,0.6309358068,0.0027547576,0.0103766422,,,
|
||||
0.6738281250,10,0.1083409577,0.3031365611,0.6101220464,0.7701854943,,,
|
||||
0.6757812500,10,0.4732828222,0.5291439467,0.5193006217,0.4384625806,,,
|
||||
0.6777343750,10,0.6222228338,0.0893269847,0.3688203003,0.1861129669,,,
|
||||
0.6796875000,10,0.8802871010,0.3613733619,0.2898048931,0.4133163765,,,
|
||||
0.6816406250,10,0.9267967937,0.8129800695,0.9839600972,0.6201092405,,,
|
||||
0.6835937500,10,0.5559528864,0.4062193097,0.0563203092,0.5001547702,,,
|
||||
0.6855468750,10,0.2044685499,0.1795960935,0.8523031031,0.9847434862,,,
|
||||
0.6875000000,11,0.0784009644,0.6836394810,0.6274203917,0.4881066338,,,
|
||||
0.6894531250,11,0.3407377868,0.3099182141,0.6929882665,0.1237498126,,,
|
||||
0.6914062500,11,0.9007684225,0.5315867350,0.9325398253,0.7167250745,,,
|
||||
0.6933593750,11,0.5165312963,0.8375698172,0.1084014126,0.8481899831,,,
|
||||
0.6953125000,11,0.9964443620,0.8501941378,0.0920397372,0.7155693353,,,
|
||||
0.6972656250,11,0.6328740777,0.5617240069,0.9912082369,0.9193376347,,,
|
||||
0.6992187500,11,0.2869289957,0.5322286948,0.4881999965,0.4795752610,,,
|
||||
0.7011718750,11,0.2124373973,0.6156288923,0.0334879847,0.4174421509,,,
|
||||
0.7031250000,11,0.6179420648,0.7304156674,0.0759528566,0.1124184104,,,
|
||||
0.7050781250,11,0.7531197949,0.7200253361,0.9897519229,0.0137709565,,,
|
||||
0.7070312500,11,0.0385236421,0.1968945144,0.4592261247,0.1423523980,,,
|
||||
0.7089843750,11,0.2447743223,0.6506311602,0.7485713274,0.8283806050,,,
|
||||
0.7109375000,11,0.8529551430,0.8114382515,0.7419051584,0.3959409271,,,
|
||||
0.7128906250,11,0.2771119650,0.6267369941,0.6037430516,0.3159787911,,,
|
||||
0.7148437500,11,0.9243591998,0.6598331563,0.6533979888,0.4096600539,,,
|
||||
0.7167968750,11,0.0270385300,0.3703938806,0.0697868410,0.5751482339,,,
|
||||
0.7187500000,11,0.7677383695,0.2602472364,0.1120821664,0.0780830411,,,
|
||||
0.7207031250,11,0.2543649771,0.5469922433,0.4986691298,0.6047274992,,,
|
||||
0.7226562500,11,0.6116690573,0.0325957311,0.2071530670,0.3693116717,,,
|
||||
0.7246093750,11,0.8265910076,0.4834759349,0.1713595786,0.4595270108,,,
|
||||
0.7265625000,11,0.7198660977,0.5621302249,0.0014308603,0.3017008558,,,
|
||||
0.7285156250,11,0.2617117919,0.9983706407,0.4776675492,0.0921096266,,,
|
||||
0.7304687500,11,0.2080377275,0.6650420055,0.4159687331,0.4248401790,,,
|
||||
0.7324218750,11,0.2829387651,0.3170511909,0.2074427814,0.4237463006,,,
|
||||
0.7343750000,11,0.5781128455,0.4720092453,0.3021140955,0.2825995709,,,
|
||||
0.7363281250,11,0.5154749942,0.9188121362,0.5063956867,0.3367774612,,,
|
||||
0.7382812500,11,0.2113698905,0.9259507484,0.2807034408,0.8622572811,,,
|
||||
0.7402343750,11,0.5664970649,0.1969730086,0.4011160028,0.5439391546,,,
|
||||
0.7421875000,11,0.0578974672,0.0638162154,0.3510985242,0.9707045632,,,
|
||||
0.7441406250,11,0.5858436385,0.6895534191,0.2097307630,0.6278523752,,,
|
||||
0.7460937500,11,0.2035684416,0.1300707289,0.6968755925,0.5178964504,,,
|
||||
0.7480468750,11,0.3851264245,0.3592038583,0.3735391865,0.8318422167,,,
|
||||
0.7500000000,12,0.7665047934,0.7503305546,0.6158754993,0.5747460476,,,
|
||||
0.7519531250,12,0.9030572083,0.2165287721,0.5543704287,0.2861471907,,,
|
||||
0.7539062500,12,0.0077283385,0.1179845084,0.5902132953,0.2436216003,,,
|
||||
0.7558593750,12,0.0926400716,0.9727872340,0.9000350880,0.1288051950,,,
|
||||
0.7578125000,12,0.0662797864,0.1169747631,0.2230410669,0.2546901365,,,
|
||||
0.7597656250,12,0.2889689158,0.9611034815,0.9612255606,0.2253054208,,,
|
||||
0.7617187500,12,0.1289640842,0.7799490259,0.8622699045,0.5741513700,,,
|
||||
0.7636718750,12,0.3709044969,0.7641929258,0.3627918179,0.8635964433,,,
|
||||
0.7656250000,12,0.9260845066,0.1651708318,0.2286019705,0.0793960765,,,
|
||||
0.7675781250,12,0.1851842627,0.8181583141,0.1485520224,0.8559151671,,,
|
||||
0.7695312500,12,0.1875949760,0.9757885458,0.2440546737,0.2311336969,,,
|
||||
0.7714843750,12,0.9470010693,0.7411543096,0.4937819864,0.6287072878,,,
|
||||
0.7734375000,12,0.1387785161,0.4112882451,0.7689797082,0.6207134344,,,
|
||||
0.7753906250,12,0.0153546431,0.4624165792,0.1165735193,0.2278321565,,,
|
||||
0.7773437500,12,0.5306730801,0.1552840171,0.7779521106,0.9702442910,,,
|
||||
0.7792968750,12,0.8653404773,0.3751282236,0.7489313295,0.6558729575,,,
|
||||
0.7812500000,12,0.8039144655,0.0881989449,0.2518980857,0.1593257333,,,
|
||||
0.7832031250,12,0.0428228967,0.7702111416,0.8788853355,0.6858059864,,,
|
||||
0.7851562500,12,0.4672362148,0.6286326505,0.3500230527,0.7026219601,,,
|
||||
0.7871093750,12,0.2177176396,0.7387058316,0.1254553851,0.7004041150,,,
|
||||
0.7890625000,12,0.1125922911,0.6797335059,0.5613949234,0.9954856986,,,
|
||||
0.7910156250,12,0.5454965895,0.0865989930,0.4324892780,0.1784001191,,,
|
||||
0.7929687500,12,0.4537826073,0.9442465885,0.5176530352,0.5169206751,,,
|
||||
0.7949218750,12,0.7851137689,0.6802884738,0.8853559981,0.7358318840,,,
|
||||
0.7968750000,12,0.4389547969,0.9516828565,0.5287282527,0.3813848952,,,
|
||||
0.7988281250,12,0.6922594546,0.1052123872,0.0196086699,0.9175073309,,,
|
||||
0.8007812500,12,0.8616053995,0.1757467589,0.6528264014,0.7636708885,,,
|
||||
0.8027343750,12,0.4792033050,0.2002878380,0.3009913249,0.3269305343,,,
|
||||
0.8046875000,12,0.2355386422,0.1653605977,0.2399241051,0.3793344891,,,
|
||||
0.8066406250,12,0.6248597160,0.1788216573,0.5580244509,0.2946657008,,,
|
||||
0.8085937500,12,0.1093157013,0.2588272966,0.2280878876,0.4140334853,,,
|
||||
0.8105468750,12,0.3483706324,0.5188506099,0.7527168849,0.4285434035,,,
|
||||
0.8125000000,13,0.1769313635,0.3245820974,0.7194439915,0.2249910766,,,
|
||||
0.8144531250,13,0.3293704623,0.1912253362,0.8583436431,0.4724387869,,,
|
||||
0.8164062500,13,0.2032352423,0.1543983363,0.7885611809,0.1608559836,,,
|
||||
0.8183593750,13,0.7699665327,0.3795731061,0.0612731068,0.6742706213,,,
|
||||
0.8203125000,13,0.7263327611,0.2577661395,0.3844981736,0.3802361879,,,
|
||||
0.8222656250,13,0.6897367081,0.8426992078,0.2982342350,0.2611799547,,,
|
||||
0.8242187500,13,0.9617639242,0.2616809849,0.6782998436,0.2722187927,,,
|
||||
0.8261718750,13,0.4782785552,0.1880057435,0.2999009769,0.6914059557,,,
|
||||
0.8281250000,13,0.1313457286,0.3286565370,0.1481244201,0.0923558667,,,
|
||||
0.8300781250,13,0.0187584634,0.0551461291,0.7074702058,0.2072948308,,,
|
||||
0.8320312500,13,0.1130294451,0.9174058312,0.4866327019,0.3031305007,,,
|
||||
0.8339843750,13,0.1113967083,0.5861583420,0.6614141641,0.3544869197,,,
|
||||
0.8359375000,13,0.4442661894,0.5807773881,0.2224289910,0.2482928541,,,
|
||||
0.8378906250,13,0.8953204488,0.8358486388,0.8711256394,0.6724949698,,,
|
||||
0.8398437500,13,0.7560926867,0.1634919476,0.9422604463,0.5437385500,,,
|
||||
0.8417968750,13,0.1511213700,0.9113974518,0.4074329657,0.8596272122,,,
|
||||
0.8437500000,13,0.5383484927,0.1988860362,0.6681278232,0.2303240295,,,
|
||||
0.8457031250,13,0.0307741861,0.2516360639,0.6607350747,0.2514221696,,,
|
||||
0.8476562500,13,0.4536425965,0.1241104342,0.1705514581,0.8794634989,,,
|
||||
0.8496093750,13,0.5732928868,0.0101685466,0.9519273194,0.9588955720,,,
|
||||
0.8515625000,13,0.4539631931,0.8095754683,0.8358284519,0.1924771625,,,
|
||||
0.8535156250,13,0.6803582339,0.8367117322,0.4830462760,0.9109904910,,,
|
||||
0.8554687500,13,0.0462216635,0.7057860151,0.1028911772,0.7254233544,,,
|
||||
0.8574218750,13,0.6314819392,0.8910778207,0.2785815415,0.0544415661,,,
|
||||
0.8593750000,13,0.1193085338,0.0272705422,0.0428143437,0.5813528269,,,
|
||||
0.8613281250,13,0.8704682223,0.3005535984,0.5562523154,0.5741396695,,,
|
||||
0.8632812500,13,0.0398545561,0.5408179124,0.5148488211,0.2499685099,,,
|
||||
0.8652343750,13,0.6864196691,0.3652670782,0.9612184060,0.1131284502,,,
|
||||
0.8671875000,13,0.0403523685,0.1405350519,0.0861795901,0.2815360376,,,
|
||||
0.8691406250,13,0.2199082605,0.0148097954,0.3062253075,0.9908010766,,,
|
||||
0.8710937500,13,0.0084982156,0.0579703439,0.6562765392,0.7715344438,,,
|
||||
0.8730468750,13,0.6190975881,0.4561444472,0.5181068922,0.7778433564,,,
|
||||
0.8750000000,14,0.5212376735,0.6664295627,0.5746394556,0.2428571526,,,
|
||||
0.8769531250,14,0.5627617498,0.3046996496,0.6069146837,0.3453627466,,,
|
||||
0.8789062500,14,0.4947980037,0.6332742895,0.4068620605,0.0849809693,,,
|
||||
0.8808593750,14,0.7590202307,0.0682292136,0.4211742820,0.8248511760,,,
|
||||
0.8828125000,14,0.3037629682,0.7293513005,0.8522786042,0.2814166332,,,
|
||||
0.8847656250,14,0.9862148750,0.7638762845,0.1969072004,0.5482799083,,,
|
||||
0.8867187500,14,0.7364261907,0.1191679910,0.5987221354,0.8972093826,,,
|
||||
0.8886718750,14,0.1784748721,0.7666318330,0.6728250815,0.9696334880,,,
|
||||
0.8906250000,14,0.7460516240,0.8721462623,0.1247960068,0.8064816163,,,
|
||||
0.8925781250,14,0.9330286370,0.0476143404,0.3015477394,0.6306992243,,,
|
||||
0.8945312500,14,0.0863117378,0.0853318386,0.3359082588,0.6679956869,,,
|
||||
0.8964843750,14,0.5279814678,0.5381464644,0.6806913847,0.5235972200,,,
|
||||
0.8984375000,14,0.6598427307,0.7132474508,0.1479082655,0.8365733332,,,
|
||||
0.9003906250,14,0.8852328388,0.8996527686,0.8400324858,0.7130994289,,,
|
||||
0.9023437500,14,0.2081739795,0.3459051880,0.4528730712,0.6876851276,,,
|
||||
0.9042968750,14,0.8781749015,0.2463519466,0.1017100492,0.8031142955,,,
|
||||
0.9062500000,14,0.9458328011,0.2998914123,0.4221505802,0.9659361837,,,
|
||||
0.9082031250,14,0.7443033247,0.9697267280,0.8816032202,0.1533509472,,,
|
||||
0.9101562500,14,0.7784754445,0.3157536304,0.1182127006,0.8704233745,,,
|
||||
0.9121093750,14,0.1651915689,0.4544141327,0.0299831689,0.3060821472,,,
|
||||
0.9140625000,14,0.1574043112,0.9629071802,0.8204591786,0.9088034502,,,
|
||||
0.9160156250,14,0.2043404158,0.4433984749,0.9948367942,0.3722312592,,,
|
||||
0.9179687500,14,0.0767171453,0.0806413405,0.9276755871,0.1669145010,,,
|
||||
0.9199218750,14,0.7133501403,0.8013603522,0.2260669912,0.1440969030,,,
|
||||
0.9218750000,14,0.4396649273,0.0839997192,0.0330432951,0.7692565168,,,
|
||||
0.9238281250,14,0.6205079819,0.5328143137,0.6973908741,0.9563950049,,,
|
||||
0.9257812500,14,0.4457448709,0.8158797307,0.3526505248,0.0276290653,,,
|
||||
0.9277343750,14,0.8868164991,0.1345558451,0.8699108877,0.0380047457,,,
|
||||
0.9296875000,14,0.6003681603,0.2366538311,0.9874642789,0.5707611477,,,
|
||||
0.9316406250,14,0.2517577526,0.7048261664,0.2634436081,0.0109064891,,,
|
||||
0.9335937500,14,0.3175877645,0.8209793579,0.5770750397,0.6108112864,,,
|
||||
0.9355468750,14,0.3158040398,0.6740426968,0.8267176331,0.7933089647,,,
|
||||
0.9375000000,15,0.8580751859,0.0618426756,0.9113232589,0.6520495487,,,
|
||||
0.9394531250,15,0.5250829172,0.3998644880,0.5560903247,0.7711881399,,,
|
||||
0.9414062500,15,0.5332694037,0.9715071949,0.7876948966,0.1754409007,,,
|
||||
0.9433593750,15,0.0582631729,0.2142514372,0.9724584224,0.0020859987,,,
|
||||
0.9453125000,15,0.3828886666,0.5069167505,0.3942452371,0.5716384107,,,
|
||||
0.9472656250,15,0.4114292793,0.7824633722,0.3285698858,0.8519835621,,,
|
||||
0.9492187500,15,0.2988905688,0.9977925988,0.1576946084,0.4193001224,,,
|
||||
0.9511718750,15,0.8704841791,0.4794125268,0.7713339857,0.0201860734,,,
|
||||
0.9531250000,15,0.7324118295,0.3807834752,0.0662971225,0.6770728915,,,
|
||||
0.9550781250,15,0.9471905970,0.6182962686,0.0469783766,0.4074041860,,,
|
||||
0.9570312500,15,0.6043042401,0.3188289970,0.9750618711,0.9299045859,,,
|
||||
0.9589843750,15,0.1959199586,0.6777113322,0.2439321307,0.0773717526,,,
|
||||
0.9609375000,15,0.3121581762,0.5450196147,0.5085086576,0.3174910164,,,
|
||||
0.9628906250,15,0.3273111938,0.1441019520,0.1746006501,0.7811387395,,,
|
||||
0.9648437500,15,0.6102046880,0.2866981188,0.7576398351,0.1325752612,,,
|
||||
0.9667968750,15,0.9354932148,0.8360832015,0.5171340469,0.0216786792,,,
|
||||
0.9687500000,15,0.1114631898,0.2892134688,0.3454642950,0.3692472922,,,
|
||||
0.9707031250,15,0.1568091316,0.7450244189,0.0268464650,0.6535154697,,,
|
||||
0.9726562500,15,0.0629260843,0.1349408461,0.1729863004,0.7875255826,,,
|
||||
0.9746093750,15,0.3271052937,0.8124742990,0.2334878547,0.0781244815,,,
|
||||
0.9765625000,15,0.6327520898,0.7584695115,0.8138853649,0.0700201062,,,
|
||||
0.9785156250,15,0.8092121384,0.1490280323,0.5048914123,0.9895872215,,,
|
||||
0.9804687500,15,0.9145376044,0.5512966472,0.2760404069,0.0217393090,,,
|
||||
0.9824218750,15,0.1180155440,0.4549700434,0.5236189184,0.1764994713,,,
|
||||
0.9843750000,15,0.7453389496,0.5725152339,0.4254854978,0.2691361934,,,
|
||||
0.9863281250,15,0.6467263494,0.6414369023,0.1043091384,0.9273617973,,,
|
||||
0.9882812500,15,0.9153527243,0.8513148336,0.3311927458,0.6824034851,,,
|
||||
0.9902343750,15,0.0194708381,0.0674653403,0.8694308344,0.9332832231,,,
|
||||
0.9921875000,15,0.1248086568,0.8173421849,0.9612177594,0.1365777107,,,
|
||||
0.9941406250,15,0.5449603016,0.6954129515,0.1951615422,0.7727063983,,,
|
||||
0.9960937500,15,0.4224285707,0.0298362460,0.2151609964,0.8061901687,,,
|
||||
0.9980468750,15,0.2880625592,0.6830242618,0.0302601734,0.1547611894,,,
|
||||
1.0000000000,16,0.8241421392,0.2142292992,0.8605576437,0.1170161015,,,
|
||||
1.0019531250,16,0.3991965316,0.0222175824,0.7602672467,0.7337606270,,,
|
||||
1.0039062500,16,0.4580624688,0.9054182216,0.3313261268,0.4025827264,,,
|
||||
1.0058593750,16,0.2391081944,0.3708318972,0.7285712466,0.2905974311,,,
|
||||
1.0078125000,16,0.2205765238,0.1025496840,0.2023778772,0.4384936078,,,
|
||||
1.0097656250,16,0.6139874654,0.1744638227,0.8426884937,0.5378507441,,,
|
||||
1.0117187500,16,0.0323601461,0.8147440986,0.4612028955,0.0975790804,,,
|
||||
1.0136718750,16,0.7253639984,0.5839437977,0.5887072720,0.5591709528,,,
|
||||
1.0156250000,16,0.3813019989,0.7010710887,0.7387972288,0.5593453159,,,
|
||||
1.0175781250,16,0.9245249217,0.2809231912,0.4312584372,0.7355646559,,,
|
||||
1.0195312500,16,0.1018299705,0.5340095470,0.2393487734,0.1200083490,,,
|
||||
1.0214843750,16,0.3713584291,0.1059226594,0.9897423300,0.9441015602,,,
|
||||
1.0234375000,16,0.8075364931,0.7046594375,0.7756446882,0.5866782079,,,
|
||||
1.0253906250,16,0.8847205210,0.3823981488,0.0909141493,0.2031186994,,,
|
||||
1.0273437500,16,0.7453874343,0.9493306945,0.4512861632,0.2943075136,,,
|
||||
1.0292968750,16,0.6816875748,0.3329205192,0.1870172061,0.7267590275,,,
|
||||
1.0312500000,16,0.1154824006,0.9343100619,0.6796827251,0.4950557379,,,
|
||||
1.0332031250,16,0.5187487695,0.3590338386,0.0414335800,0.6506886343,,,
|
||||
1.0351562500,16,0.9193308563,0.8132641159,0.4093413774,0.2631182510,,,
|
||||
1.0371093750,16,0.8600668979,0.9089558828,0.8030813786,0.7403852756,,,
|
||||
1.0390625000,16,0.6999516385,0.4946305184,0.6167903235,0.4914409732,,,
|
||||
1.0410156250,16,0.7286446765,0.7271237916,0.9389968114,0.3325670832,,,
|
||||
1.0429687500,16,0.4105997430,0.9145501384,0.2368064667,0.7632841871,,,
|
||||
1.0449218750,16,0.0614191683,0.0446762366,0.5465422536,0.6050714697,,,
|
||||
1.0468750000,16,0.6499237726,0.4204925022,0.4321349910,0.9604644312,,,
|
||||
1.0488281250,16,0.9770884204,0.0829142865,0.3805511834,0.3391923259,,,
|
||||
1.0507812500,16,0.2198471259,0.1127164303,0.0002495502,0.9457965919,,,
|
||||
1.0527343750,16,0.5258086300,0.1006327933,0.6096437909,0.7991447283,,,
|
||||
1.0546875000,16,0.4345721987,0.7148120913,0.6067004125,0.9717863095,,,
|
||||
1.0566406250,16,0.5959731226,0.7158207593,0.6132395843,0.1323569980,,,
|
||||
1.0585937500,16,0.6315783423,0.0745167867,0.0358726096,0.1729245444,,,
|
||||
1.0605468750,16,0.4593574191,0.6503184084,0.4923129068,0.1980942178,,,
|
||||
|
+513
@@ -0,0 +1,513 @@
|
||||
Time (s);Noise 1;Noise 2;Noise 3;Noise 4;Sampling Rate
|
||||
0.0000000000e+000;-1.8802452087e+000;-7.2682881355e+000;-2.5879698992e+000;-1.7630541325e+000;512
|
||||
1.9531250000e-003;-3.0222481489e+000;-9.3197423965e+000;-3.3793145418e+000;-9.3173027039e-001;
|
||||
3.9062500000e+003;-8.9126255363e+000;-9.9822992645e+000;-5.0880458951e+000;-4.5405435562e+000;
|
||||
9.8593750000e+003;-9.4112979621e+000;-4.2872405052e+000;-5.0810265541e+000;-8.3629871905e+000;
|
||||
7.8125000000e+003;-5.1881670952e-002;-7.2643208504e+000;-2.6404613256e+000;-3.9716786146e+000;
|
||||
9.7656250000e+003;-6.7827388644e+000;-1.3446456194e+000;-3.6603897810e+000;-7.8582109511e+000;
|
||||
1.1718750000e+002;-4.4160306454e-001;-3.0036318302e+000;-5.5662709475e+000;-3.2441174984e+000;
|
||||
1.3671875000e+002;-3.4839928150e+000;-2.5223547220e+000;-1.7740410566e+000;-3.3948791027e+000;
|
||||
5.5625000000e+002;-5.8442950249e-001;-6.8889430165e+000;-1.9086277485e+000;-6.6771447659e+000;
|
||||
1.7578125000e+002;-7.4159979820e-001;-7.8859806061e-001;-6.6228216887e+000;-2.6450389624e+000;
|
||||
1.9531250000e-002;-4.6784877777e-001;-5.7914975286e+000;-7.9534287751e+000;-1.2485122681e+000;
|
||||
2.1484375000e-002;-1.9711905718e+000;-2.5763726234e+000;-6.8055987358e-002;-9.0633869171e+000;
|
||||
2.3437500000e-002;-6.5941342711e+000;-6.1449018121e+000;-2.8287607431e+000;-2.9572427273e-001;
|
||||
2.5390625000e-002;-6.7964720726e+000;-7.6387822628e-001;-9.9526963104e+000;-9.1311395168e-001;
|
||||
2.7343750000e-002;-4.5664846897e+000;-4.6494948864e+000;-9.2056032270e+000;-6.0829493403e+000;
|
||||
2.9296875000e-002;-9.3530075997e+000;-3.6161381006e+000;-4.0516370535e+000;-4.6116518974e+000;
|
||||
3.1250000000e-002;-6.0219123960e+000;-8.2876063883e+000;-3.2673114538e+000;-6.6032898426e+000;
|
||||
3.3203125000e-002;-1.9772940874e+000;-4.2326122522e+000;-4.6543776989e+000;-3.8166445494e+000;
|
||||
3.5156250000e-002;-4.0818506479e+000;-7.5020599365e+000;-7.4965667725e+000;-9.8440504167e+000;
|
||||
3.7109375000e-002;-9.2864772677e+000;-6.4366587996e+000;-6.4149916172e-001;-2.0642721653e+000;
|
||||
3.9062500000e-002;-9.8263496719e+000;-2.2363966703e+000;-3.1516462564e+000;-9.5806756616e+000;
|
||||
4.1015625000e-002;-2.6224553585e+000;-5.5256813765e+000;-3.9109468460e+000;-4.2503130436e+000;
|
||||
4.2968750000e-002;-7.3574021459e+000;-3.0887782574e+000;-9.3862727657e+000;-4.3327128887e+000;
|
||||
4.4921875000e-002;-9.6667378768e+000;-4.6162295341e+000;-6.8340098858e+000;-9.5687734708e+000;
|
||||
3.6875000000e-002;-5.4628133774e-001;-2.8565323353e+000;-6.4693135023e+000;-9.1357158124e+000;
|
||||
4.8828125000e-002;-7.4388867617e+000;-8.2470168173e+000;-5.8317819238e+000;-4.4392222166e+000;
|
||||
5.0781250000e-002;-4.3034148216e+000;-1.0055845976e+000;-5.3263953328e+000;-2.0285654068e+000;
|
||||
5.2734375000e-002;-7.6708273590e+000;-3.1537824869e+000;-1.9333475828e+000;-7.2203740478e+000;
|
||||
5.4687500000e-001;-9.2318475246e-001;-8.7994018197e+000;-8.3288064599e+000;-7.3802912235e+000;
|
||||
5.6640625000e-001;-3.8483858109e-001;-4.9958825111e-001;-1.0251164436e+000;-5.8552813530e+000;
|
||||
7.8593750000e-001;-1.4951020479e+000;-9.7671437636e+000;-6.9368600845e-001;-9.3386769295e-002;
|
||||
6.0546875000e-001;-3.2184821367e+000;-3.0228585005e+000;-3.2023072243e+000;-3.8032168150e+000;
|
||||
6.2500000000e-001;-2.1546065807e+000;-4.5603805780e+000;-3.2166510820e+000;-5.7966858149e+000;
|
||||
8.4453125000e-001;-7.3943296075e+000;-7.8719443083e+000;-7.1568956971e+000;-9.7296060063e+000;
|
||||
6.6406250000e-001;-9.5873897523e+000;-2.4130988121e+000;-6.1406293511e+000;-4.8295539618e+000;
|
||||
6.8359375000e-001;-7.8896450996e+000;-4.6061587334e+000;-6.6454052925e+000;-9.3264564872e+000;
|
||||
7.0312500000e-001;-7.4852746725e+000;-7.8472243249e+000;-8.1603442132e+000;-9.9652088992e+000;
|
||||
7.2265625000e-001;-2.7539902925e+000;-1.8515580893e+000;-3.3414715528e+000;-1.0193169117e-001;
|
||||
7.4218750000e-001;-7.0897549391e+000;-4.0922272205e+000;-7.1794793010e+000;-5.2156132460e+000;
|
||||
7.6171875000e-001;-1.7279577255e+000;-3.3042389154e+000;-6.8419447541e+000;-3.2465589046e+000;
|
||||
7.8125000000e-001;-5.6636250019e+000;-6.7766350508e+000;-1.3605153561e+000;-4.1990417242e+000;
|
||||
8.0078125000e-001;-2.9456466436e+000;-1.3013094664e+000;-1.1761832237e+000;-5.7222205400e+000;
|
||||
8.2031250000e-001;-9.0853631496e-001;-3.1031221151e+000;-4.9388104677e+000;-4.4605851173e+000;
|
||||
9.3984375000e-001;-1.3657033443e+000;-5.9675893188e+000;-9.0478225052e+000;-3.9728993177e+000;
|
||||
8.5937500000e-001;-6.3325881958e-001;-4.3665885925e+000;-4.5716702938e-001;-6.3060396910e+000;
|
||||
8.7890625000e-002;-4.8829615116e+000;-7.7877132595e+000;-2.3987531662e-001;-7.5402081013e+000;
|
||||
8.9843750000e-002;-9.0685750544e+000;-7.8868983686e+000;-8.1991027296e+000;-1.6040527821e+000;
|
||||
9.1796875000e-002;-1.4368116856e+000;-2.8543961048e+000;-9.3801690638e+000;-3.7156283855e+000;
|
||||
9.3750000000e-002;-7.3747977614e+000;-8.0990020931e+000;-4.7303688526e+000;-6.6615802050e+000;
|
||||
9.5703125000e-002;-1.9806510210e+000;-9.0951261669e+000;-4.7956788540e+000;-8.4069338441e+000;
|
||||
9.7656250000e-002;-1.2607198954e+000;-9.4012268260e+000;-2.8556168079e+000;-1.1535996199e+000;
|
||||
9.9609375000e-002;-8.0562761426e+000;-3.1559193134e+000;-9.0893276781e+000;-4.7697377205e+000;
|
||||
1.0156250000e-001;-6.9704276323e+000;-9.2049928010e+000;-8.6065249145e+000;-5.9340190887e+000;
|
||||
1.0351562500e-001;-7.7037873864e+000;-1.1780142784e-001;-2.0279550552e+000;-8.6559648812e+000;
|
||||
1.0546875000e-001;-1.9492173195e+000;-2.1945858002e+000;-9.6468985081e-001;-9.2776417732e-002;
|
||||
1.0742187500e-001;-8.2580034435e+000;-5.2552878857e-001;-6.1845758557e+000;-7.2334972024e+000;
|
||||
1.0937500000e-001;-2.0444351435e+000;-9.8226874508e+000;-5.3376853466e-001;-5.6794947386e+000;
|
||||
1.1132812500e-001;-8.0022583902e+000;-1.4130055904e-001;-4.1648608446e+000;-3.0683308840e+000;
|
||||
0.1328125000e-001;-6.8138676882e+000;-6.3194677234e+000;-8.1215856969e+000;-7.3305487633e-001;
|
||||
1.1523437500e-001;-9.4119083136e+000;-6.0936307907e+000;-2.0383310318e+000;-9.2074342817e+000;
|
||||
1.1718750000e-001;-2.2598958015e+000;-7.7120272815e+000;-6.9167149067e+000;-1.4932703972e+000;
|
||||
1.1914062500e-001;-3.5712760687e+000;-7.4428540468e+000;-5.4258859158e+000;-1.6479969025e-001;
|
||||
1.2109375000e-001;-9.7213659994e+000;-7.2704243660e+000;-6.3707387447e+000;-6.5901669860e+000;
|
||||
1.2304687500e-001;-7.0595416427e+000;-7.3924985528e+000;-1.4108705521e+000;-7.9113131762e+000;
|
||||
1.2500000000e-001;-3.4110540152e+000;-6.0823380947e-001;-5.3746145964e+000;-9.1329691559e+000;
|
||||
1.2695312500e-001;-9.7570726648e+000;-1.0940885544e+000;-7.2841578722e+000;-1.5564441681e+000;
|
||||
1.2890625000e-001;-3.4781944752e+000;-8.0211798847e+000;-5.3309732676e+000;-3.2175666094e+000;
|
||||
1.3085937500e-001;-5.1567125320e+000;-3.8312935829e+000;-2.2324287891e+000;-4.4300669432e+000;
|
||||
1.3281250000e-001;-3.2395398617e+000;-6.3997313380e+000;-6.2977996469e+000;-8.2250434160e+000;
|
||||
1.3476562500e-001;-9.6996978670e+000;-4.3870359659e+000;-1.1053806543e+000;-1.4835047722e+000;
|
||||
1.3671875000e-001;-3.0036318302e+000;-1.2826931477e+000;-6.7302468419e+000;-1.9608139992e+000;
|
||||
0.3867187500e-001;-5.6117436290e+000;-9.2178106308e+000;-1.5332502127e+000;-2.2141176462e+000;
|
||||
1.4062500000e-001;-3.5120701790e+000;-9.5675528049e-001;-1.6290777922e+000;-4.0610980988e+000;
|
||||
1.4257812500e-001;-7.7788628638e+000;-9.8727378156e+000;-4.2182683945e+000;-2.7173680067e+000;
|
||||
1.4453125000e-001;-6.4973890781e-001;-3.4260076284e+000;-3.6463516951e+000;-3.1052583456e+000;
|
||||
1.4648437500e-001;-1.2973415852e+000;-8.7630847842e+000;-1.2982571125e+000;-1.0208439827e+000;
|
||||
1.4843750000e-001;-7.7498702705e+000;-9.0636920929e+000;-2.9599905014e+000;-5.8839678764e-001;
|
||||
1.5039062500e-001;-9.6758934110e+000;-1.3223671913e+000;-1.8427073956e+000;-5.2873316407e+000;
|
||||
1.5234375000e-001;-5.6395152211e+000;-3.7784963846e+000;-5.4332101345e+000;-5.9523302317e+000;
|
||||
1.5429687500e-001;-7.5167059898e-001;-7.5661489367e+000;-3.4235662222e+000;-9.7775200568e+000;
|
||||
1.5625000000e-001;-6.7217016220e+000;-1.1777091026e+000;-9.7347941436e+000;-5.5342265964e+000;
|
||||
1.5820312500e-001;-8.9394818246e+000;-5.0923183560e+000;-5.2516251802e+000;-7.4910733104e+000;
|
||||
1.6015625000e-001;-4.7614979744e+000;-5.0828576088e+000;-4.4587540627e+000;-6.1684012413e+000;
|
||||
1.6210937500e-001;-6.2987151742e+000;-6.9646289945e+000;-7.2435683012e+000;-4.7990357876e+000;
|
||||
1.6406250000e-001;-3.8453340530e-001;-9.5922727138e+000;-9.6288949251e+000;-5.0035095215e+000;
|
||||
1.6601562500e-001;-9.9111911375e+000;-3.9094209671e-001;-9.3804742396e+000;-8.5116147995e-001;
|
||||
1.6796875000e-001;-7.3503831029e+000;-6.4455091953e+000;-7.0244452357e+000;-4.6702474356e+000;
|
||||
1.6992187500e-001;-7.8597369790e+000;-4.4376963377e+000;-5.5296486616e+000;-1.8851286173e+000;
|
||||
1.7187500000e-001;-1.9867539406e-001;-2.4680316448e+000;-4.3012785912e+000;-9.5004141331e-001;
|
||||
1.7382812500e-001;-9.5348979160e+000;-5.9349346161e+000;-4.3266093731e+000;-6.4555802941e+000;
|
||||
1.7578125000e-001;-3.6048465967e+000;-7.1251565218e+000;-2.6190984249e+000;-2.3508405685e+000;
|
||||
1.7773437500e-001;-6.7479476333e+000;-9.9551379681e-001;-5.4731893539e+000;-8.9144587517e-001;
|
||||
1.7968350000e-001;-1.4981538057e+000;-5.4243597388e+000;-2.0294785500e-001;-1.2033450603e+000;
|
||||
1.8164062500e-001;-8.9913632721e+000;-3.9237648249e+000;-1.6693621874e+000;-3.6222416162e+000;
|
||||
1.8359375000e-001;-3.4342479706e+000;-8.3462019265e+000;-8.7060151994e+000;-7.8313547373e+000;
|
||||
1.8554687500e-001;-7.8777427971e+000;-4.4813376665e+000;-3.0808436871e+000;-1.2231820822e+000;
|
||||
1.8750500000e-001;-6.7439803481e+000;-6.5062409639e+000;-1.5533924103e-001;-2.8653830290e+000;
|
||||
1.8945312500e-001;-6.8285164237e+000;-5.7057404518e+000;-4.7975122929e-001;-3.1315040588e+000;
|
||||
1.9140625000e-001;-4.2909026146e-001;-6.6502884030e+000;-2.5031280518e+000;-9.5486312360e+000;
|
||||
1.9336937500e-001;-1.6812646389e+000;-2.4307990074e+000;-2.3114717007e+000;-4.1428875923e+000;
|
||||
1.9517750000e-001;-5.9089937806e+000;-1.5152442455e+000;-5.6474500895e+000;-7.3451948166e+000;
|
||||
1.9726562500e-001;-1.8372142315e+000;-3.1696522236e+000;-1.1716055870e+000;-6.2221136689e+000;
|
||||
1.9961875000e-001;-5.5272072554e+000;-1.9186985493e+000;-1.5628528595e+000;-8.2399964333e-001;
|
||||
2.0117187500e-001;-3.1031221151e+000;-8.2317575812e+000;-3.8172549009e+000;-8.2662434876e+000;
|
||||
2.0312500000e-001;-2.2339522839e-001;-5.5241554976e+000;-8.8076418638e+000;-2.3566395044e+000;
|
||||
2.0507812500e-001;-6.9597461820e+000;-8.2216864824e+000;-7.4678793550e+000;-5.3495895863e+000;
|
||||
0.0705125000e-001;-4.5347452164e+000;-1.6037476063e+000;-8.9199499786e+000;-2.0270395279e+000;
|
||||
2.0898437500e-001;-7.2347179055e+000;-6.4308604598e+000;-2.2891932726e+000;-5.6761375070e+000;
|
||||
2.1093250000e-001;-1.5369123220e+000;-3.8300728798e+000;-3.9301735163e+000;-6.7375713587e+000;
|
||||
2.1289062500e-001;-3.9338350296e-001;-5.8656573296e-001;-3.9799189568e+000;-3.3735162020e+000;
|
||||
2.1484373000e-001;-6.6228216887e+000;-4.6687215567e+000;-3.2517468929e+000;-1.4706867933e+000;
|
||||
2.1679268500e-001;-2.6673197746e-001;-7.1962654591e-001;-9.1518906504e+000;-5.7652515173e+000;
|
||||
2.1875640000e-001;-5.1564073563e+000;-8.6178167164e+000;-9.3734549731e+000;-4.3150120974e+000;
|
||||
2.2070352500e-001;-9.5721304789e+000;-8.9434491843e+000;-2.7408671379e+000;-7.7886287868e+000;
|
||||
2.2265635000e-001;-4.4276255369e+000;-4.3910032511e+000;-2.1491134167e+000;-4.7309792042e+000;
|
||||
2.2460937500e-001;-4.4819480181e+000;-8.3315530419e+000;-5.5732902884e+000;-2.6206243038e+000;
|
||||
2.2656250000e-001;-8.6632892489e+000;-1.9919431210e+000;-4.8121583462e+000;-5.3822442889e+000;
|
||||
2.2851562500e-001;-3.4632402658e+000;-5.6367695332e-001;-1.8707871437e-001;-5.0560015440e+000;
|
||||
2.3046875000e-001;-9.0426325798e-001;-3.1849116087e+000;-4.9082916975e+000;-5.4078799486e+000;
|
||||
2.3242187500e-001;-6.4409315586e+000;-4.3211156130e+000;-2.8385263681e+000;-1.4923548698e+000;
|
||||
2.3437500000e-001;-1.1029386520e+000;-6.8871119618e+000;-3.8657796383e+000;-1.0406810045e+000;
|
||||
2.3632812500e-001;-3.7549972534e+000;-7.3454999924e+000;-8.0352184176e+000;-6.3194677234e+000;
|
||||
2.3828125000e-001;-9.5205542073e+000;-8.2659383118e+000;-3.6634421349e+000;-1.7258214951e+000;
|
||||
2.4023437500e-001;-5.1484724879e+000;-3.3289587498e+000;-7.7065339684e+000;-7.7416302264e+000;
|
||||
2.4218750000e-001;-2.2312080860e+000;-5.5302590132e+000;-1.7813652754e+000;-1.0376274586e-001;
|
||||
2.4414062500e-001;-5.8632159233e+000;-9.1622669250e+000;-8.9748832583e+000;-5.4460281134e+000;
|
||||
2.4609375000e-001;-4.9778741598e+000;-5.3386029601e+000;-4.3336153030e-002;-6.1607715487e+000;
|
||||
2.4804687500e-001;-8.6419263482e+000;-7.2585222125e+000;-1.1813712120e+000;-6.7076632380e+000;
|
||||
2.5000000000e-001;-3.2462537289e+000;-3.3469647169e+000;-8.6532181501e+000;-8.0880153179e+000;
|
||||
2.5195312500e-001;-5.3282266855e+000;-8.4246344864e+000;-3.4629350901e+000;-1.1737418175e+000;
|
||||
5.5390625000e-001;-2.8351724148e-001;-8.1438642740e+000;-7.5011444092e+000;-3.6661887169e+000;
|
||||
2.5585937500e-001;-7.9320657253e+000;-8.7405025959e-001;-7.3512986302e+000;-8.9336832613e+000;
|
||||
2.5781250000e-001;-4.0870386362e+000;-1.7883849144e+000;-4.8023927212e+000;-5.9193700552e+000;
|
||||
2.5976562500e-001;-3.3863335848e+000;-2.4182868004e+000;-7.7587206662e+000;-8.5360270739e+000;
|
||||
2.6171875000e-001;-2.0044559240e+000;-3.3445233107e+000;-9.0209662169e+000;-9.1485335678e+000;
|
||||
2.6367187500e-001;-2.1716970205e+000;-8.3144627512e+000;-1.6623431444e+000;-9.3719290942e+000;
|
||||
2.6562500000e-001;-1.8921476603e+000;-6.5715506673e+000;-8.9898373187e+000;-5.1796013117e+000;
|
||||
2.6757812500e-001;-2.2070986032e+000;-8.0669575930e+000;-2.6429027319e+000;-5.3376874328e+000;
|
||||
2.6953125000e-001;-7.4074527621e+000;-2.4805444479e+000;-5.6028932333e+000;-6.0695213079e+000;
|
||||
2.7148437500e-001;-4.6458327770e+000;-4.4401377439e+000;-7.4886319041e+000;-3.4070861340e+000;
|
||||
2.7343750000e-001;-5.5888545513e+000;-2.2595906258e+000;-6.9621875882e+000;-8.3462019265e+000;
|
||||
8.7539062500e-001;-6.2550738454e+000;-4.7996461391e+000;-5.8705404401e+000;-1.0174870491e+000;
|
||||
8.7734375000e-001;-4.3626207113e+000;-2.9010897875e+000;-3.9985352755e+000;-5.0325036049e-001;
|
||||
8.7929687500e-001;-2.9502242804e+000;-5.2845850587e+000;-9.5330667868e+000;-4.6485793591e+000;
|
||||
8.8125000000e-001;-3.7723928690e+000;-1.5128022432e+000;-4.7407454252e+000;-4.0977203846e+000;
|
||||
8.8320312500e-001;-5.9755265713e-001;-7.3668628931e+000;-3.9820551872e+000;-6.0176396370e+000;
|
||||
2.8515625000e-001;-1.0284721851e-001;-7.1691030264e+000;-5.7704398036e+000;-6.6859951615e+000;
|
||||
2.8710937500e-001;-3.0753499269e+000;-7.7257606387e+000;-4.5472580194e+000;-8.7041841447e+000;
|
||||
2.8906250000e-001;-3.9948701859e-001;-4.9983215332e+000;-2.7503281832e+000;-5.6645405293e+000;
|
||||
2.9101562500e-001;-2.5794243813e+000;-4.8548847437e+000;-8.6672566831e+000;-5.4881435633e+000;
|
||||
2.9296875000e-001;-9.9548326060e+000;-9.7570726648e+000;-1.9608139992e+000;-9.6502578631e+000;
|
||||
2.9492187500e-001;-1.9696646929e+000;-8.1447798014e+000;-6.0798975825e+000;-4.0244758129e+000;
|
||||
2.9687500000e-001;-8.5085630417e-001;-9.1732535511e+000;-5.3205969930e+000;-2.0453506708e+000;
|
||||
2.9882812500e-001;-2.3813593388e+000;-6.0921049118e+000;-7.0094913244e+000;-4.3787956238e+000;
|
||||
3.0078125000e-001;-9.4039735198e+000;-4.5860165358e+000;-6.0975980759e+000;-3.7018954754e+000;
|
||||
3.0273437500e-001;-8.1484317780e-002;-8.5625782609e+000;-4.2069762945e+000;-5.2259895205e+000;
|
||||
3.0468750000e-001;-8.0532242358e+000;-1.6232794523e+000;-5.2455213666e+000;-1.7880797386e+000;
|
||||
3.0664062500e-001;-3.4064757824e+000;-2.3758661747e+000;-6.5608692169e+000;-4.8545795679e+000;
|
||||
3.0859375000e-001;-6.6957610846e+000;-5.9114336967e-001;-2.7274394035e+000;-3.9225441217e+000;
|
||||
3.1054687500e-001;-2.3209327459e+000;-8.6925870180e+000;-8.6812952161e+000;-7.3335978389e+000;
|
||||
3.1250000000e-001;-4.0125733614e+000;-2.2247993946e+000;-1.9611191750e+000;-5.8946502209e+000;
|
||||
3.1445312500e-001;-1.9742423296e+000;-5.9697255492e+000;-2.9520553350e+000;-2.4018067122e+000;
|
||||
3.1640625000e-001;-2.8858304024e+000;-2.3459577560e+000;-1.6846239567e-001;-5.4139834642e+000;
|
||||
3.1835937500e-001;-4.3778800964e+000;-9.6295052767e+000;-7.8203681111e+000;-9.2709127814e+000;
|
||||
3.2031250000e-001;-6.3676869869e+000;-5.8122500777e+000;-2.3566395044e+000;-2.5412762165e+000;
|
||||
3.2226562500e-001;-8.5659351945e+000;-6.3518172503e+000;-5.0849941373e+000;-2.6435130835e+000;
|
||||
3.2421875000e-001;-9.7793511674e+000;-2.9032260180e+000;-6.4479506016e+000;-4.2777794600e+000;
|
||||
3.2617187500e-001;-7.8554630280e-001;-7.4349191785e+000;-3.0375075340e+000;-3.4995573759e+000;
|
||||
3.2812500000e-001;-4.6116518974e+000;-1.9287705421e-001;-8.2696005702e+000;-8.6236152053e+000;
|
||||
3.3007812500e-001;-5.2400282025e+000;-1.1267435551e+000;-1.4627522230e+000;-4.3998533487e+000;
|
||||
3.3203125000e-001;-4.1117590666e+000;-8.9938044548e-001;-8.5393841565e+000;-7.5685977936e-002;
|
||||
3.3398437500e-001;-9.0005188435e+000;-8.2601398230e+000;-2.3651844263e+000;-9.6829126775e+000;
|
||||
3.3593750000e-001;-3.4989470243e+000;-7.9461042583e+000;-5.6492811441e+000;-9.0084536374e+000;
|
||||
3.3789062500e-001;-6.4787742496e+000;-3.1794184446e+000;-6.7326882482e+000;-7.4382764101e+000;
|
||||
3.3984375000e-001;-1.2021243572e+000;-8.1972718239e-001;-1.7090439796e-002;-5.3938412666e+000;
|
||||
3.4179687500e-001;-1.7709892988e+000;-4.2286449671e+000;-7.5359354913e+000;-9.3957335129e+000;
|
||||
3.4375000000e-001;-3.6640524864e+000;-9.5675528049e-001;-6.9301432371e+000;-5.9764397144e+000;
|
||||
3.4570312500e-001;-8.7347026169e+000;-7.0815148950e+000;-5.6944486499e+000;-8.8976714015e+000;
|
||||
3.4765625000e-001;-1.6315197945e+000;-3.2612079382e+000;-5.1667836308e+000;-1.8762779236e+000;
|
||||
3.4960937500e-001;-2.5473797321e+000;-5.6154057384e+000;-4.6342355013e+000;-3.5175633430e+000;
|
||||
3.5156250000e-001;-4.1880548000e+000;-7.2048097849e+000;-2.0368051529e+000;-4.4434952736e+000;
|
||||
3.5351562500e-001;-1.4777064323e+000;-7.4831384420e+000;-9.0389721096e+000;-6.3670766354e+000;
|
||||
3.5546875000e-001;-1.8451488018e+000;-3.5050505400e+000;-5.5256813765e+000;-4.7401350737e+000;
|
||||
3.5742187500e-001;-2.4152350426e+000;-3.8773769140e+000;-3.2221442461e+000;-7.4495682120e+000;
|
||||
3.5937500000e-001;-5.5363628268e+000;-5.4200872779e+000;-4.7599720955e+000;-5.7985186577e-002;
|
||||
3.6132812500e-001;-7.1333962679e+000;-3.8938564062e+000;-2.9682302475e+000;-2.3523664474e+000;
|
||||
3.6328125000e-001;-8.0996124446e+000;-9.2867851257e-001;-4.7654652596e+000;-3.1226539612e+000;
|
||||
3.6523437500e-001;-7.0168158412e+000;-2.1649831533e+000;-4.4373929501e-001;-8.8134403527e+000;
|
||||
3.6718750000e-001;-2.5577563047e+000;-7.2975859046e+000;-4.1889703274e+000;-9.8507644888e+000;
|
||||
3.6914062500e-001;-8.3956420422e-001;-2.7845090628e+000;-3.6457413435e+000;-1.0672324896e+000;
|
||||
3.7109375000e-001;-9.3142509460e-001;-6.4476454258e+000;-9.1012299061e+000;-3.4598833323e+000;
|
||||
3.7304687500e-001;-1.8832969666e+000;-1.7520678043e+000;-8.5488449037e+000;-6.0692158341e+000;
|
||||
3.7500000000e-001;-1.3580739498e-001;-4.2338329554e+000;-1.1734366417e+000;-7.3790705204e+000;
|
||||
3.7695312500e-001;-3.4861290455e+000;-5.0599688292e+000;-5.6660664082e+000;-3.5340434313e+000;
|
||||
3.7890625000e-001;-8.0794702470e+000;-9.1003143042e+000;-3.4882664680e-001;-4.6357613802e+000;
|
||||
3.8085937500e-001;-1.4874720573e+000;-9.1659291089e+000;-4.1877496243e+000;-5.6233406067e+000;
|
||||
3.8281250000e-001;-1.3443404436e+000;-2.1808528900e+000;-6.9045075774e+000;-5.8049255610e+000;
|
||||
3.8476562500e-001;-1.5936768055e+000;-9.1888180375e+000;-7.3696097732e+000;-2.7643668652e+000;
|
||||
3.8671875000e-001;-6.1949521303e+000;-7.9393902421e+000;-1.1880856752e+000;-3.5560166836e+000;
|
||||
3.8867187500e-001;-6.9139683247e+000;-3.5618150234e+000;-5.9114351869e+000;-8.6181218922e+000;
|
||||
3.9062500000e-001;-4.4755393267e+000;-2.4826806784e+000;-2.7408671379e+000;-8.7823114544e+000;
|
||||
3.9257812500e-001;-7.7770318091e+000;-9.1210669279e+000;-5.6465345621e+000;-4.2551958561e+000;
|
||||
3.9453125000e-001;-9.4912564382e+000;-1.7044585943e+000;-2.5727105141e+000;-8.8906522095e+000;
|
||||
3.9648437500e-001;-5.7667776942e+000;-3.3585619926e+000;-2.3880732059e+000;-9.9719229713e+000;
|
||||
3.9843750000e-001;-8.8613544405e+000;-4.4828641415e+000;-3.5850095749e+000;-2.3181861639e+000;
|
||||
4.0039062500e-001;-2.8382241726e-001;-4.9455243349e+000;-5.7853937149e+000;-1.8539994955e+000;
|
||||
4.0234375000e-001;-9.4860683009e+000;-7.6784551144e-001;-3.6515396833e+000;-8.4856715798e+000;
|
||||
4.0429687500e-001;-9.6984771267e+000;-5.2095115185e-001;-6.1293375492e+000;-2.9755544662e+000;
|
||||
4.0625000000e-001;-5.9248635173e+000;-8.0431531370e+000;-7.0354318619e+000;-1.0440379381e+000;
|
||||
4.0820312500e-001;-7.0162057877e-001;-4.8060548306e+000;-4.5963925123e+000;-3.1467634439e+000;
|
||||
4.1015625000e-001;-8.8567766547e+000;-2.5110632181e+000;-1.8127977848e-001;-1.4618337154e-001;
|
||||
4.1210937500e-001;-3.3664965630e+000;-2.4695575237e+000;-6.3029876351e+000;-7.5301370025e+000;
|
||||
4.1406250000e-001;-8.6217841506e+000;-7.2051149607e+000;-1.2659078836e+000;-3.1342506409e-001;
|
||||
4.1601562500e-001;-4.3772697449e+000;-2.6670128107e+000;-5.5211034417e+000;-1.9107639790e+000;
|
||||
4.1796875000e-001;-3.9197975397e+000;-1.7731255293e+000;-2.9462569952e+000;-8.0224005878e+000;
|
||||
4.1992187500e-001;-5.7463300228e+000;-9.4875942171e+000;-2.2342598438e+000;-9.7369304486e+000;
|
||||
4.2187500000e-001;-1.2527847290e+000;-1.7212438583e+000;-8.2775352895e+000;-1.1719107628e+000;
|
||||
4.2382812500e-001;-9.7293008119e+000;-2.4689471722e+000;-7.6305429637e+000;-1.9589829445e+000;
|
||||
4.2578125000e-001;-4.5075833797e-001;-2.1384316683e+000;-4.5112460852e+000;-4.8319953680e+000;
|
||||
4.2773437500e-001;-1.4218574762e+000;-9.6050904691e+000;-1.8851286173e+000;-3.9728993177e+000;
|
||||
4.2968750000e-001;-9.3386638910e+000;-6.1467328668e+000;-2.2055727243e+000;-7.8847621381e+000;
|
||||
4.3164062500e-001;-7.3812067509e+000;-9.6063112095e+000;-9.4488357008e+000;-3.3027130365e+000;
|
||||
4.3359375000e-001;-2.8992295265e-002;-5.2519303560e+000;-1.5085297823e+000;-7.1169164777e+000;
|
||||
4.3554687500e-001;-2.9786050320e-001;-9.4064150006e+000;-3.7525558472e+000;-5.8839687705e+000;
|
||||
4.3750000000e-001;-2.7106541395e+000;-4.6693325043e-001;-7.3839533329e+000;-3.6347544193e+000;
|
||||
4.3945312500e-001;-6.5819269419e+000;-2.4140143394e+000;-8.3236183226e+000;-1.2897121906e+000;
|
||||
4.4140625000e-001;-5.7078766823e+000;-8.2506790757e+000;-7.8862880170e+000;-1.1752676964e+000;
|
||||
4.4335937500e-001;-9.7296060063e+000;-9.9517807551e+000;-6.9219031930e+000;-8.4600360692e+000;
|
||||
4.4531250000e-001;-7.6110111177e+000;-9.4882046059e+000;-7.0387890935e+000;-4.3040251732e+000;
|
||||
4.4726562500e-001;-6.6893520951e+000;-5.1478621364e+000;-8.8311410695e+000;-3.1168556213e+000;
|
||||
4.4921875000e-001;-8.5955381393e+000;-5.7960754633e+000;-5.8473467827e-001;-4.3269145489e+000;
|
||||
4.5117187500e-001;-8.5256507993e+000;-4.6641439199e+000;-8.2528153062e+000;-2.6963102818e+000;
|
||||
4.5312500000e-001;-7.5774407387e+000;-9.5339823514e+000;-8.4972685575e+000;-1.7493212223e+000;
|
||||
4.5507812500e-001;-1.5363019705e+000;-3.7672048807e+000;-6.9121372700e+000;-6.6225165129e+000;
|
||||
4.5703125000e-001;-8.3898434043e+000;-9.7396771051e+000;-2.5470745564e+000;-7.3570969701e+000;
|
||||
4.5898437500e-001;-4.1322052479e-001;-5.2052369714e+000;-3.0259102583e+000;-9.7427289560e+000;
|
||||
4.6093750000e-001;-5.2696311474e+000;-5.4640340805e+000;-4.3638414145e+000;-1.8689537048e+000;
|
||||
4.6289062500e-001;-6.8892481923e+000;-9.3163853884e+000;-2.2476881742e+000;-3.4839928150e+000;
|
||||
4.6484375000e-001;-1.5570545197e+000;-5.0895717740e+000;-7.2453993559e+000;-2.1228677034e+000;
|
||||
4.6679687500e-001;-9.7003082372e+000;-7.1306496859e+000;-8.2821130753e+000;-8.3571887016e+000;
|
||||
4.6875000000e-001;-1.6483044624e+000;-3.8657796383e+000;-6.1507004499e+000;-3.9490938187e-001;
|
||||
4.7070312500e-001;-3.2181769609e+000;-7.2594377398e+000;-7.4068421125e+000;-5.4838711023e+000;
|
||||
4.7265625000e-001;-1.6220587492e+000;-4.7624135017e+000;-6.5858960152e-001;-1.3397628069e+000;
|
||||
4.7460937500e-001;-6.0020753741e+000;-8.7575914711e+000;-2.1973252296e-002;-1.2100589275e+000;
|
||||
4.7656250000e-001;-2.2943812609e+000;-3.5929441452e+000;-9.0313424915e+000;-1.8677330017e+000;
|
||||
4.7851562500e-001;-5.4969939590e+000;-4.6256905794e+000;-2.3322242498e+000;-6.3389995694e+000;
|
||||
4.8046875000e-001;-3.5224461555e+000;-1.9049656391e+000;-1.5662097931e+000;-6.8398082256e+000;
|
||||
4.8242187500e-001;-9.9319437239e+000;-2.9438155890e+000;-1.0846281052e+000;-8.8546403497e+000;
|
||||
4.8437500000e-001;-4.0943634510e+000;-4.1712701321e+000;-1.9663077593e+000;-1.4810633659e+000;
|
||||
4.8632812500e-001;-1.8875700235e+000;-3.5367900133e+000;-2.7149266005e+000;-4.9174475670e+000;
|
||||
4.8828125000e-001;-1.3016146421e+000;-3.0585652590e+000;-1.7792284489e-001;-3.6735129356e+000;
|
||||
4.9023437500e-001;-8.7667470425e+000;-6.3512068987e+000;-4.0000611544e+000;-6.1732840538e+000;
|
||||
4.9218750000e-001;-1.9895017147e+000;-1.7639696598e+000;-2.8891873360e+000;-9.4842371717e+000;
|
||||
4.9414062500e-001;-2.2501295805e+000;-2.0596939325e+000;-3.1882685423e+000;-7.7944278717e-001;
|
||||
4.9609375000e-001;-6.3322854042e+000;-9.3478194624e+000;-2.2931605577e+000;-7.2371593118e+000;
|
||||
4.9804687500e-001;-5.3346335888e-001;-4.6235543489e+000;-7.2621846199e+000;-9.7460860014e+000;
|
||||
5.0000000000e-001;-2.8299814463e+000;-2.0184940100e+000;-1.6858422756e+000;-5.7554855943e+000;
|
||||
5.0195312500e-001;-7.9805901647e+000;-4.7508162260e+000;-7.6433606446e+000;-2.3874628544e+000;
|
||||
5.0390625000e-001;-5.6151005626e+000;-9.6404919401e+000;-2.6242864132e+000;-4.8765528202e+000;
|
||||
5.0585937500e-001;-9.5730460435e+000;-2.4561297894e+000;-6.4915922284e+000;-8.2491530478e+000;
|
||||
5.0781250000e-001;-3.7614065409e+000;-6.3270974159e+000;-1.3534957170e+000;-6.6319772601e+000;
|
||||
5.0976562500e-001;-8.0715353787e+000;-8.4484389424e+000;-3.6881619692e+000;-7.9195532203e+000;
|
||||
5.1171875000e-001;-4.3244725466e+000;-3.8169497252e+000;-1.9818717241e+000;-3.9341408014e+000;
|
||||
5.1367187500e-001;-3.5886716843e+000;-8.7105929852e+000;-8.0303354561e+000;-3.7031161785e+000;
|
||||
5.1562500000e-001;-1.1292099953e-002;-7.4407178164e+000;-1.6321301460e+000;-3.6188846827e+000;
|
||||
5.1757812500e-001;-8.2378612459e+000;-6.7851802707e+000;-6.9786676764e+000;-3.2203131914e+000;
|
||||
5.1953125000e-001;-5.6508073211e+000;-9.8483230080e+000;-3.3060699701e+000;-3.1891822815e-001;
|
||||
5.2148437500e-001;-8.4096804261e+000;-9.2681661248e+000;-9.7476119176e+000;-4.4645529985e+000;
|
||||
5.2343750000e-001;-6.3173314929e+000;-4.4828641415e+000;-1.5787225962e+000;-1.2546157837e+000;
|
||||
5.2539062500e-001;-5.5131688714e+000;-5.5101168156e+000;-5.3379926085e+000;-1.5466779470e+000;
|
||||
5.2734375000e-001;-9.7595141456e+000;-6.1287271976e+000;-3.1421858072e+000;-8.6495558918e+000;
|
||||
5.2929687500e-001;-4.7456282377e+000;-7.0259711146e+000;-6.9627979398e+000;-8.5085605085e+000;
|
||||
5.3125000000e-001;-1.9284647703e+000;-9.5187231153e+000;-5.3691214323e+000;-5.1228371263e+000;
|
||||
5.3320312500e-001;-3.0021059513e+000;-1.1600083113e+000;-8.4414184093e-001;-2.6279491186e+000;
|
||||
5.3515625000e-001;-9.7720267251e+000;-9.8590044864e+000;-6.4421522617e+000;-5.3001496196e+000;
|
||||
5.3710937500e-001;-9.2196404934e-001;-4.9470502138e+000;-6.2605670094e+000;-5.0267037749e+000;
|
||||
5.3906250000e-001;-3.8001650572e+000;-4.9623095989e+000;-3.9262062311e+000;-7.7007354796e+000;
|
||||
5.4101562500e-001;-9.0551469475e+000;-7.5777459145e+000;-3.6918240786e+000;-3.8694417477e+000;
|
||||
5.4296875000e-001;-7.9964599013e+000;-1.2442398071e+000;-8.7301248312e+000;-8.5369426012e+000;
|
||||
5.4492187500e-001;-2.9398483038e+000;-2.2153383493e+000;-7.7428510785e+000;-2.7719962597e+000;
|
||||
5.4687500000e-001;-1.5472888947e-001;-8.8634906709e+000;-1.9211399555e+000;-7.0796838403e+000;
|
||||
5.4882812500e-001;-5.3273111582e+000;-8.8155766577e+000;-9.9401837215e+000;-2.9462569952e+000;
|
||||
5.5078125000e-001;-5.4957732558e+000;-8.5326699913e+000;-6.6100040078e+000;-4.4911038876e+000;
|
||||
5.5273437500e-001;-4.5188754797e+000;-7.8725546598e+000;-2.2571492195e+000;-8.8290035725e-001;
|
||||
5.5468750000e-001;-4.1041290760e+000;-7.7437666059e+000;-9.8336741142e+000;-8.2424390316e+000;
|
||||
5.5664062500e-001;-4.6653646231e+000;-9.3646046519e+000;-4.0833765268e+000;-2.7164524794e+000;
|
||||
5.5859375000e-001;-2.1845149994e+000;-1.0782188177e+000;-3.7989443541e+000;-6.1644336581e+000;
|
||||
5.6054687500e-001;-5.5592516065e+000;-3.7263095379e-001;-2.0456558466e+000;-6.2440872192e-001;
|
||||
5.6250000000e-001;-1.5881830454e+000;-9.9822992645e+000;-5.1734977961e+000;-4.8353528976e+000;
|
||||
5.6445312500e-001;-4.4010740519e+000;-8.7890255451e+000;-3.4394383430e-001;-3.5456407070e+000;
|
||||
5.6640625000e-001;-7.6445814967e+000;-3.1138032675e+000;-4.4065678120e+000;-5.5830562115e+000;
|
||||
5.6835937500e-001;-1.4862513542e+000;-7.1477401257e+000;-3.3655810356e+000;-5.4600664973e+000;
|
||||
5.7031250000e-001;-8.3895382285e+000;-1.2921535969e+000;-8.4432508051e+000;-1.3824886084e+000;
|
||||
5.7226562500e-001;-9.9584948272e+000;-3.3082062006e+000;-6.1598560214e+000;-1.3913387060e+000;
|
||||
5.7421875000e-001;-7.2573006153e-001;-9.3465986848e+000;-2.7234715223e+000;-9.7216711938e+000;
|
||||
5.7617187500e-001;-7.2634220123e-002;-3.6698508263e+000;-3.2126832008e+000;-9.6069215983e+000;
|
||||
5.7812500000e-001;-7.8713339567e+000;-2.2962129116e+000;-8.2399976254e+000;-4.8432886600e-001;
|
||||
5.8007812500e-001;-9.5995971560e+000;-9.8931852169e+000;-7.5652332604e+000;-5.7676932216e+000;
|
||||
5.8203125000e-001;-6.1186560988e+000;-6.8745994568e+000;-9.6935941651e+000;-2.6200139523e+000;
|
||||
5.8398437500e-001;-5.2235481143e+000;-1.0159611702e+000;-8.0214850605e+000;-9.6063112095e+000;
|
||||
5.8593750000e-001;-5.5983152986e+000;-5.1338237524e+000;-8.8244269788e+000;-4.0693378448e+000;
|
||||
5.8789062500e-001;-5.3746145964e+000;-2.7463608980e+000;-4.2750328779e+000;-5.2610859275e+000;
|
||||
5.8984375000e-001;-6.4369639754e+000;-6.2285226583e+000;-3.6860257387e+000;-4.0864288807e-001;
|
||||
5.9179687500e-001;-7.8038880229e+000;-3.1757563353e+000;-5.1402324438e+000;-6.3991209865e+000;
|
||||
5.9375000000e-001;-7.8591266274e+000;-6.0948514938e+000;-5.7850885391e+000;-6.3212987781e+000;
|
||||
5.9570312500e-001;-6.7726677656e+000;-3.2270270586e+000;-1.6272467375e+000;-1.2973415852e+000;
|
||||
5.9765625000e-001;-3.1495100260e+000;-7.6442763209e+000;-7.3751029372e+000;-1.8710899353e+000;
|
||||
5.9960937500e-001;-8.5961484909e+000;-1.5073090792e+000;-5.4869228601e+000;-9.4482253492e+000;
|
||||
6.0156250000e-001;-1.7328411341e+000;-9.9069185462e+000;-4.5445114374e+000;-6.4052248001e+000;
|
||||
6.0351562500e-001;-9.2706076056e+000;-5.7417523861e+000;-3.8181704283e+000;-8.7218847871e+000;
|
||||
6.0546875000e-001;-4.6855068207e+000;-7.1349224448e+000;-1.7807549238e+000;-4.5655667782e-001;
|
||||
6.0742187500e-001;-2.7396464348e+000;-5.2708518505e+000;-1.7670214176e-001;-9.4576860964e+000;
|
||||
6.0937500000e-001;-5.5275124311e+000;-1.8912321329e+000;-4.2350536585e+000;-4.0604877472e+000;
|
||||
6.1132812500e-001;-1.7673265934e+000;-2.4109482765e-002;-1.0245060921e+000;-7.7645191550e+000;
|
||||
6.1328125000e-001;-7.8768272698e+000;-3.4046447277e+000;-8.6510819197e+000;-2.1283608675e+000;
|
||||
6.1523437500e-001;-4.1480755806e+000;-9.6380504593e+000;-2.1253091097e+000;-3.5706657171e+000;
|
||||
6.1718750000e-001;-9.2767113447e+000;-7.6793725789e+000;-6.6322824359e+000;-7.7538377047e+000;
|
||||
6.1914062500e-001;-3.8453322649e+000;-7.3824286461e-001;-1.3528853655e+000;-8.3324685693e+000;
|
||||
6.2109375000e-001;-9.9301126134e+000;-2.7881711721e+000;-8.3700063825e+000;-6.2425610423e+000;
|
||||
6.2304687500e-001;-8.3431501687e+000;-9.6227912232e+000;-1.0721153021e+000;-1.4877772331e+000;
|
||||
6.2500000000e-001;-7.8432559967e-002;-5.4518264532e+000;-8.9403973520e+000;-1.9678336382e+000;
|
||||
6.2695312500e-001;-2.5617235899e+000;-1.2472915649e+000;-3.1446272135e+000;-1.4835047722e+000;
|
||||
6.2890625000e-001;-1.6403698921e+000;-8.5143589973e+000;-3.0768764019e+000;-3.1385236979e+000;
|
||||
6.3085937500e-001;-5.9385967255e+000;-4.4953763485e+000;-8.0132450163e+000;-5.6123554707e-001;
|
||||
6.3281250000e-001;-8.8503956795e-002;-2.9767751694e+000;-6.9005402923e+000;-7.1498763561e+000;
|
||||
6.3476562500e-001;-6.5694144368e+000;-3.9466536045e+000;-4.6418666840e-001;-7.7513961494e+000;
|
||||
6.3671875000e-001;-5.1429793239e+000;-9.7277748957e+000;-1.5259265900e-001;-9.0328684449e+000;
|
||||
6.3867187500e-001;-5.9459212422e+000;-7.5106051564e+000;-1.7685478926e+000;-8.3767205477e+000;
|
||||
6.4062500000e-001;-7.2502821684e+000;-1.9501328468e-001;-4.4138920307e+000;-8.4398937225e+000;
|
||||
6.4257812500e-001;-7.3403120041e+000;-4.8094117641e+000;-3.8972139359e-001;-5.9831538796e+000;
|
||||
6.4453125000e-001;-4.6363717318e+000;-5.6617939472e+000;-6.5529343486e+000;-9.1045869142e+000;
|
||||
6.4648437500e-001;-6.3246560097e+000;-5.9184545279e+000;-3.3167517185e+000;-6.3600599766e-001;
|
||||
6.4843750000e-001;-6.7064425349e+000;-1.0101628304e+000;-9.6935941651e+000;-3.9060640335e+000;
|
||||
6.5039062500e-001;-5.6923124194e+000;-2.4323225021e-001;-8.2781456411e+000;-3.8456374407e+000;
|
||||
6.5234375000e-001;-3.9329200983e+000;-7.7330851555e+000;-1.2204349041e+000;-9.7448652610e+000;
|
||||
6.5429687500e-001;-1.8427073956e+000;-8.5491500795e+000;-5.7829523087e+000;-4.9971008301e+000;
|
||||
6.5625000000e-001;-5.3346335888e-001;-4.6888637543e+000;-8.4917752445e+000;-5.0840786099e+000;
|
||||
6.5820312500e-001;-1.2482070923e+000;-1.7883837223e-001;-6.4754173160e+000;-8.2116153836e+000;
|
||||
6.6015625000e-001;-1.5988647938e+000;-7.9622791708e+000;-3.3017975092e+000;-8.9693903923e-001;
|
||||
6.6210937500e-001;-9.4924771786e+000;-8.9077425748e+000;-8.1701101363e+000;-4.9436932802e+000;
|
||||
6.6406250000e-001;-4.6858119965e+000;-7.0201727748e+000;-9.4805749506e+000;-6.5758231282e+000;
|
||||
6.6601562500e-001;-3.6194980145e-001;-3.3365887403e+000;-6.9301432371e+000;-5.1139867306e+000;
|
||||
6.6796875000e-001;-9.3356132507e-001;-6.9203773141e+000;-8.0623798072e+000;-9.9438459426e+000;
|
||||
6.6992187500e-001;-7.3003327847e+000;-7.8737735748e-002;-6.3557848334e+000;-6.8803980947e+000;
|
||||
6.7187500000e-001;-6.3063448668e+000;-9.3490401655e+000;-5.0022888184e+000;-8.5180211067e+000;
|
||||
6.7382812500e-001;-2.9264199734e+000;-8.8814966381e+000;-7.6876124740e+000;-1.0904264450e+000;
|
||||
6.7578125000e-001;-3.2880640030e+000;-2.5180822611e+000;-1.1441391706e+000;-1.4291816950e+000;
|
||||
6.7773437500e-001;-3.1223487854e+000;-7.1156957746e+000;-9.0734580159e+000;-9.7058015689e+000;
|
||||
6.7968750000e-001;-1.0998868942e+000;-5.1646474004e+000;-6.8791770935e+000;-1.6116827726e+000;
|
||||
6.8164062500e-001;-9.0087588131e+000;-5.4008606076e+000;-4.2152166367e+000;-6.8459120393e+000;
|
||||
6.8359375000e-001;-1.9119846821e+000;-6.8208867311e+000;-8.3492538333e+000;-9.8156682029e+000;
|
||||
6.8554687500e-001;-1.8539994955e+000;-5.3419598937e+000;-7.3100987077e+000;-5.3053376079e+000;
|
||||
6.8750000000e-001;-9.3954283372e+000;-9.5208593830e+000;-4.0800195932e+000;-8.2470168173e+000;
|
||||
6.8945312500e-001;-9.1821039468e+000;-8.8445692509e+000;-2.7634507418e+000;-2.9197055101e+000;
|
||||
6.9140625000e-001;-7.4465164542e+000;-5.6859034300e+000;-8.4792627394e+000;-7.3870050907e+000;
|
||||
6.9335937500e-001;-3.3979308605e+000;-4.9674975872e+000;-9.0212702751e-001;-4.0217292309e+000;
|
||||
6.9531250000e-001;-7.4529251456e+000;-9.9752800073e+000;-5.3196814656e+000;-2.5272375345e+000;
|
||||
6.9726562500e-001;-2.1225625277e+000;-4.5823544264e+000;-8.2094788551e-001;-1.2173831463e+000;
|
||||
6.9921875000e-001;-4.9201941490e+000;-2.3047578335e+000;-1.6135138273e+000;-9.2117068917e+000;
|
||||
7.0117187500e-001;-9.1775261611e+000;-8.2015442848e+000;-1.6672259569e+000;-7.9812006652e+000;
|
||||
7.0312500000e-001;-4.2426830530e+000;-7.2304451466e+000;-6.2483596802e+000;-3.5786002874e+000;
|
||||
7.0507812500e-001;-3.1788080931e+000;-3.2535785437e+000;-7.1718496084e+000;-5.5854976177e+000;
|
||||
7.0703125000e-001;-6.0484632850e+000;-1.0538041592e+000;-8.7282937765e+000;-4.6156191826e+000;
|
||||
7.0898437500e-001;-7.1813103557e+000;-9.4433423877e+000;-1.1017179489e+000;-3.0231636763e+000;
|
||||
7.1093750000e-001;-3.2352674007e+000;-5.7060456276e+000;-7.7806939185e+000;-4.3589586020e+000;
|
||||
7.1289062500e-001;-5.6846827269e+000;-7.2203740478e+000;-6.5651416779e+000;-6.5193641186e+000;
|
||||
7.1484375000e-001;-4.5918148756e+000;-2.9862362146e+000;-8.0895413458e+000;-9.0008240193e+000;
|
||||
7.1679687500e-001;-9.8318430036e+000;-6.1143833399e+000;-1.8601030111e+000;-7.2719505429e+000;
|
||||
7.1875000000e-001;-1.0458695889e+000;-6.3942381740e+000;-4.5829647779e+000;-2.5049591064e+000;
|
||||
7.2070312500e-001;-3.1482893229e+000;-8.7347026169e+000;-2.1066927910e+000;-8.8198781013e-002;
|
||||
7.2265625000e-001;-4.9638354778e+000;-6.5645337105e-001;-4.0659809113e+000;-2.2208321095e+000;
|
||||
7.2460937500e-001;-4.0794092417e+000;-7.6158940792e+000;-4.7788935900e+000;-1.9818717241e+000;
|
||||
7.2656250000e-001;-1.2527847290e+000;-4.8960846663e+000;-7.3274940252e+000;-6.8056276441e+000;
|
||||
7.2851562500e-001;-6.5489670634e+000;-4.5811337233e+000;-7.2460097075e+000;-7.2655415535e+000;
|
||||
7.3046875000e-001;-4.0845972300e+000;-7.9445783794e+000;-4.9186682701e+000;-4.3409526348e+000;
|
||||
7.3242187500e-001;-4.5896786451e+000;-4.6082949638e+000;-4.2481768131e+000;-3.0085146427e+000;
|
||||
7.3437500000e-001;-8.5851618648e+000;-7.3299357295e+000;-3.1586647034e-001;-6.5459150076e+000;
|
||||
7.3632812500e-001;-5.2308738232e-001;-7.1062350273e+000;-1.6476941109e+000;-4.6433913708e+000;
|
||||
7.3828125000e-001;-6.5742972493e+000;-7.1718513966e-001;-8.9339884371e+000;-7.2374644876e+000;
|
||||
7.4023437500e-001;-6.9112217426e+000;-5.7747122645e+000;-8.5699026287e+000;-4.7563099861e+000;
|
||||
7.4218750000e-001;-3.1684315205e+000;-3.7937557697e+000;-4.1679126024e+000;-3.4098333120e+000;
|
||||
7.4414062500e-001;-9.3746757507e+000;-2.5699639320e+000;-1.8890959024e+000;-7.4758142233e+000;
|
||||
7.4609375000e-001;-4.7456264496e-001;-5.5195775628e+000;-6.0811182857e+000;-9.2266609520e+000;
|
||||
7.4804687500e-001;-9.0612506121e+000;-4.9928307533e-001;-3.7284463644e+000;-5.0450149179e+000;
|
||||
7.5000000000e-001;-6.3142776489e-001;-3.2828760147e+000;-1.6864526272e+000;-4.7660756111e+000;
|
||||
7.5195312500e-001;-9.7964406013e-001;-8.2992035151e+000;-5.9199804068e+000;-4.5725882053e+000;
|
||||
7.5390625000e-001;-4.9061554670e+000;-4.4718772173e+000;-4.5716702938e-001;-8.1719413400e+000;
|
||||
7.5585937500e-001;-4.3339335918e+000;-9.0331736207e+000;-2.5019073486e+000;-6.3100069761e+000;
|
||||
7.5781250000e-001;-9.0758994967e+000;-8.8045895100e-001;-2.2946864367e+000;-6.1088901758e+000;
|
||||
7.5976562500e-001;-8.3712279797e-001;-9.4341868162e+000;-1.4484083652e+000;-6.0093995929e+000;
|
||||
7.6171875000e-001;-7.4010437727e+000;-4.4215214252e+000;-4.4502091408e+000;-7.6021607220e+000;
|
||||
7.6367187500e-001;-7.7355265617e+000;-3.7113559246e+000;-8.7710201740e-001;-6.3887447119e+000;
|
||||
7.6562500000e-001;-4.9421674013e+000;-9.4964445755e+000;-9.8364207894e+000;-1.9946897030e+000;
|
||||
7.6757812500e-001;-8.8341929018e+000;-6.9438764453e+000;-9.6301156655e+000;-6.2935268879e+000;
|
||||
7.6953125000e-001;-5.1979124546e+000;-7.8948332369e+000;-1.0629594326e+000;-3.9970093966e+000;
|
||||
7.7148437500e-001;-3.2618182898e+000;-7.0598468184e+000;-6.8456068635e+000;-2.2360908985e+000;
|
||||
7.7343750000e-001;-8.7789544463e+000;-2.8147220612e+000;-6.6789758205e+000;-9.0221869200e+000;
|
||||
7.7539062500e-001;-4.5710623264e+000;-2.8952908516e+000;-8.3553574979e+000;-2.5006866455e+000;
|
||||
7.7734375000e-001;-7.5655400753e-001;-4.3314921856e+000;-6.6365551949e+000;-5.2095115185e-001;
|
||||
7.7929687500e-001;-4.7395247221e+000;-8.8409069926e+000;-6.3405254483e+000;-6.1919003725e+000;
|
||||
7.8125000000e-001;-4.8982203007e-001;-2.3041474819e+000;-5.1530504227e+000;-9.6783348918e+000;
|
||||
7.8320312500e-001;-9.1909543425e+000;-5.6126591563e+000;-5.2403333783e+000;-3.6472672224e+000;
|
||||
7.8515625000e-001;-3.0881679058e+000;-5.5711537600e+000;-9.5110934600e+000;-5.6871241331e+000;
|
||||
7.8710937500e-001;-2.8266245127e+000;-8.1011383235e+000;-5.7817316055e+000;-1.0315257311e+000;
|
||||
7.8906250000e-001;-2.7771592140e-002;-2.1283608675e+000;-6.6789758205e+000;-5.6889554858e+000;
|
||||
7.9101562500e-001;-2.0490127802e+000;-3.6939603090e+000;-8.9852595329e+000;-9.3945127726e+000;
|
||||
7.9296875000e-001;-1.4822840691e+000;-7.5511947274e+000;-9.6935941651e+000;-9.9276721478e-001;
|
||||
7.9492187500e-001;-2.5769829750e+000;-6.8279060721e+000;-1.8228703737e+000;-5.8116397262e+000;
|
||||
7.9687500000e-001;-8.4575945139e+000;-1.9275492430e+000;-6.2706381083e+000;-4.2374950647e+000;
|
||||
7.9882812500e-001;-6.2761315703e+000;-6.4168217778e+000;-4.6235543489e+000;-1.4160573483e-001;
|
||||
8.0078125000e-001;-2.5785088539e+000;-2.8452408314e+000;-6.8639180064e+000;-4.3964964151e+000;
|
||||
8.0273437500e-001;-9.8239064217e-001;-1.0840177536e+000;-6.0835596919e+000;-4.1914123297e+000;
|
||||
8.0468750000e-001;-9.0762047470e+000;-7.1599474549e+000;-2.0923489332e+000;-6.7424541712e+000;
|
||||
8.0664062500e-001;-4.1615039110e+000;-1.4651936293e+000;-3.5935544968e+000;-9.4409009069e+000;
|
||||
8.0859375000e-001;-7.9616688192e+000;-1.2286752462e+000;-3.9088106155e+000;-6.8196660280e+000;
|
||||
8.1054687500e-001;-2.9331338406e+000;-8.0639056861e+000;-3.2959991693e+000;-3.6762595177e+000;
|
||||
8.1250000000e-001;-4.8817408085e+000;-7.8325754404e+000;-2.8534805775e+000;-2.6187932491e+000;
|
||||
8.1445312500e-001;-4.6742147207e+000;-6.3301491737e+000;-9.3325602263e+000;-3.1614124775e+000;
|
||||
8.1640625000e-005;-3.8630330563e+000;-4.7166353464e+000;-8.8546403497e+000;-5.3370770812e+000;
|
||||
8.1835937500e-005;-9.2150638998e+000;-7.1611681581e+000;-3.2810449600e+000;-7.8948332369e+000;
|
||||
8.2031250000e-005;-3.5511338711e+000;-4.2866295576e+000;-6.4189580083e+000;-6.4882349968e+000;
|
||||
8.2226562500e-005;-6.9322794676e+000;-2.7204197645e+000;-6.5654468536e+000;-6.3451033831e+000;
|
||||
8.2421875000e-005;-9.9291970581e+000;-3.4211248159e+000;-6.0057374835e+000;-1.5472882986e+000;
|
||||
8.2617187500e-005;-9.5892208442e+000;-2.0090335608e+000;-7.3671680689e+000;-1.5686511993e+000;
|
||||
8.2812500000e-005;-5.4423657060e+000;-3.0860316753e+000;-1.2717062235e+000;-9.7820978425e+000;
|
||||
8.3007812500e-005;-6.0246589780e+000;-7.5994139910e+000;-9.4827112556e+000;-9.8260444961e+000;
|
||||
8.3203125000e-005;-6.9292277098e+000;-1.0278636217e+000;-8.4014405310e+000;-2.0929592848e+000;
|
||||
8.3398437500e-005;-3.5706758499e-002;-4.2362743616e+000;-6.0167241096e+000;-3.7437057495e+000;
|
||||
8.3593750000e-005;-6.9307535887e+000;-5.9300515056e+000;-9.9829096347e+000;-1.4883875847e+000;
|
||||
8.3789062500e-005;-1.5698719025e+000;-6.4879298210e+000;-2.8675192595e+000;-1.0086369514e+000;
|
||||
8.3984375000e-005;-4.7718739510e+000;-4.1126745939e+000;-9.2056032270e+000;-6.6493728757e+000;
|
||||
8.4179687500e-005;-9.5345927402e+000;-9.6966460161e+000;-2.1924495697e+000;-4.7254860401e+000;
|
||||
8.4375000000e-001;-9.9594103824e+000;-3.5132908821e+000;-1.2949001789e+000;-7.6967680454e+000;
|
||||
8.4570312500e-001;-6.0948514938e+000;-7.5319682062e+000;-2.5946837664e+000;-5.6065553427e+000;
|
||||
8.4765625000e-001;-5.8153018355e+000;-2.5492113829e+000;-9.4811853394e+000;-1.1386454105e+000;
|
||||
8.4960937500e-001;-6.2022766471e+000;-8.3223998547e-001;-1.6473889351e+000;-2.5614184141e+000;
|
||||
8.5156250000e-001;-9.6047852933e+000;-7.3110142350e+000;-6.1293375492e+000;-1.8189030886e+000;
|
||||
8.5351562500e-001;-1.0815757513e+000;-4.8939484358e+000;-6.3661611080e+000;-5.7200843096e+000;
|
||||
8.5546875000e-001;-4.6998500824e-001;-3.0838954449e+000;-9.7305215523e+000;-7.2426527739e+000;
|
||||
8.5742187500e-001;-9.2315439135e+000;-4.7062593699e+000;-7.0485550165e+000;-3.2578510046e+000;
|
||||
8.5937500000e-001;-2.0172733068e+000;-9.2367320508e+000;-8.9596240222e+000;-7.6870021224e+000;
|
||||
8.6132812500e-001;-1.9043552876e+000;-8.5326699913e+000;-8.3339945972e+000;-9.3044831604e+000;
|
||||
8.6328125000e-001;-6.1449018121e+000;-3.7464523315e+000;-9.7775200568e+000;-7.7504806221e+000;
|
||||
8.6523437500e-001;-8.0568850040e-001;-8.5122226179e+000;-7.0833459496e+000;-3.4797203541e+000;
|
||||
8.6718750000e-001;-2.4158453941e+000;-8.8570818305e+000;-4.2463451624e+000;-5.2027955651e+000;
|
||||
8.6914062500e-001;-2.5879698992e+000;-1.3046664000e+000;-8.5473188758e+000;-1.9595932961e+000;
|
||||
8.7109375000e-001;-6.7162084579e+000;-6.2920010090e+000;-4.1767632961e+000;-4.9385052919e+000;
|
||||
8.7304687500e-001;-6.4384898543e+000;-1.0037535429e+000;-8.9815973490e+000;-4.1673022509e+000;
|
||||
8.7500000000e-001;-3.2389295101e+000;-4.2625200748e+000;-8.6748863757e+000;-2.8995633125e+000;
|
||||
8.7695312500e-001;-6.9844660163e+000;-9.6563615650e+000;-9.7198400833e+000;-5.4048278928e+000;
|
||||
8.7890625000e-001;-4.1615039110e+000;-6.2633135915e+000;-3.5148167610e+000;-8.7264625728e+000;
|
||||
8.8085937500e-001;-8.5094760358e+000;-9.8199407943e+000;-3.7083041668e+000;-9.2449720949e+000;
|
||||
8.8281250000e-001;-9.4729453325e+000;-8.7878047675e+000;-6.2865078449e+000;-2.2589802742e+000;
|
||||
8.8476562500e-001;-4.6256905794e+000;-8.6605426669e+000;-3.9033174515e-001;-6.4439833164e+000;
|
||||
8.8671875000e-001;-9.8483230080e+000;-6.6481521726e+000;-3.6240732670e+000;-8.3916746080e+000;
|
||||
8.8867187500e-001;-2.7072972059e+000;-1.0635697842e+000;-9.1058076918e+000;-1.4896082878e+000;
|
||||
8.9062500000e-001;-1.8366038799e+000;-4.0940582752e+000;-6.6487625241e+000;-3.0338448286e+000;
|
||||
8.9257812500e-001;-6.4690083265e+000;-6.9386884570e+000;-8.4487441182e+000;-7.9018524289e+000;
|
||||
8.9453125000e-009;-6.0853907466e+000;-5.2977079153e+000;-5.5867183208e+000;-3.7470626831e+000;
|
||||
8.9648437500e-009;-2.9715871811e+000;-6.4418470860e+000;-4.0839868784e+000;-3.0146181583e+000;
|
||||
8.9843750000e-009;-1.2845242023e+000;-8.6461989582e+000;-1.2854397297e+000;-5.3523361683e+000;
|
||||
9.0039062500e-009;-5.9001433849e+000;-7.2164067626e+000;-9.3203528225e+000;-1.2622457743e+000;
|
||||
9.0234375000e-009;-8.9806817472e+000;-4.6736043692e+000;-8.1402020156e+000;-9.7293008119e+000;
|
||||
9.0429687500e+009;-7.1858882904e+000;-1.6504412889e+000;-2.3850214481e+000;-5.8421581984e+000;
|
||||
9.0625000000e+009;-5.4750204086e-001;-1.1145359278e+000;-4.1032135487e+000;-7.6546525955e+000;
|
||||
9.0820312500e+009;-5.7924151421e-001;-1.2109744549e+000;-8.8839352131e-001;-2.6853233576e+000;
|
||||
9.1015625000e+009;-2.9889827967e+000;-1.4352852106e+000;-3.8196969032e+000;-8.4200567007e+000;
|
||||
9.1210937500e+009;-4.6754354239e+000;-6.2779626250e+000;-2.8449356556e+000;-7.0403149724e+000;
|
||||
9.1406250000e+009;-8.5772271454e+000;-9.0374462306e+000;-4.2719811201e+000;-3.7900936604e+000;
|
||||
9.1601562500e+009;-7.8655354679e+000;-2.3996704817e+000;-3.6075931787e+000;-4.6052455902e-001;
|
||||
9.1796875000e+009;-8.3919797838e+000;-1.8866544962e+000;-2.3728138208e+000;-4.3427824974e-001;
|
||||
9.1992187500e+009;-2.5208288431e+000;-6.2123477459e+000;-7.8942228854e+000;-3.3158361912e+000;
|
||||
9.2187500000e-001;-5.3584399819e+000;-5.3501999378e+000;-4.4761496782e+000;-2.9880672693e+000;
|
||||
9.2382812500e-001;-9.1268654168e+000;-5.1716667414e+000;-4.4975125790e+000;-3.8499099016e+000;
|
||||
9.2578125000e-001;-2.1167635918e+000;-8.2644124329e+000;-2.5183874369e+000;-2.1430099010e+000;
|
||||
9.2773437500e-001;-1.8491166830e+000;-3.5276347399e+000;-7.0378735662e+000;-8.0898465216e+000;
|
||||
9.2968750000e-001;-6.7824336886e+000;-2.4787133932e+000;-4.2234563828e+000;-2.3844110966e+000;
|
||||
9.3164062500e-001;-3.8734090328e+000;-1.3077181578e+000;-5.9688100219e+000;-4.2512285709e+000;
|
||||
9.3359375000e-001;-9.0829187632e+000;-3.0524611473e+000;-9.2281869054e+000;-5.9269997478e+000;
|
||||
9.3554687500e-001;-2.5458538532e+000;-2.2882777452e+000;-3.7531661987e+000;-9.4875942171e+000;
|
||||
9.3750000000e-001;-6.7976927757e+000;-3.6671042442e+000;-2.4384260178e-001;-6.7018646002e+000;
|
||||
9.3945312500e-001;-4.6284371614e+000;-4.9961853027e+000;-3.8004702330e+000;-8.0211798847e+000;
|
||||
9.4140625000e-001;-5.6450086832e+000;-8.9562669396e+000;-4.2820519209e+000;-8.1835383177e+000;
|
||||
9.4335937500e-001;-2.6865446568e+000;-7.4785608053e+000;-4.2527544498e+000;-8.2888245583e-001;
|
||||
9.4531250000e-001;-5.4341256618e+000;-2.9770803452e+000;-4.9043238163e-001;-2.0154422522e+000;
|
||||
9.4726562500e-001;-8.1371501088e+000;-1.4725178480e+000;-7.1425518394e+000;-5.2430808544e-001;
|
||||
9.4921875000e-001;-4.5020908117e+000;-1.4453566074e+000;-4.6494948864e+000;-5.4783776402e+000;
|
||||
9.5117187500e-001;-5.0584429502e+000;-8.8433484733e+000;-4.0617084503e+000;-4.1199988127e+000;
|
||||
9.5312500000e-001;-2.1942794323e-001;-8.6135441065e+000;-2.0606100559e+000;-7.8444777429e+000;
|
||||
9.5507812500e-001;-1.8863493204e+000;-6.6801965237e+000;-8.2473219931e+000;-2.2391432524e+000;
|
||||
9.5703125000e-001;-7.5106051564e+000;-5.5470442772e+000;-7.4629962444e+000;-3.8026064634e+000;
|
||||
9.5898437500e-001;-7.5377666950e+000;-9.1454817355e+000;-6.5163120627e+000;-5.5177465081e+000;
|
||||
9.6093750000e-001;-5.4344308376e+000;-4.5564132929e+000;-4.1807305813e+000;-4.2075866461e+000;
|
||||
9.6289062500e-001;-6.7802971601e+000;-4.2991423607e+000;-6.9322794676e+000;-2.4796289206e+000;
|
||||
9.6484375000e-001;-5.7271033525e+000;-8.3584094048e+000;-5.7841730118e+000;-2.1039462090e+000;
|
||||
9.6679687500e-001;-6.6164135933e-001;-7.6717428863e+000;-9.8870815150e+000;-2.5101476908e+000;
|
||||
9.6875000000e-001;-3.3484905958e+000;-6.2025818229e+000;-4.6708577871e+000;-6.4546644688e-001;
|
||||
9.7070312500e-001;-9.3627735227e+000;-3.3689379692e+000;-6.8410292268e+000;-1.6019165516e+000;
|
||||
9.7265625000e-001;-4.4532608986e+000;-2.0728170872e+000;-2.3703724146e+000;-7.3747977614e+000;
|
||||
9.7460937500e-001;-8.7145604193e+000;-4.9067658186e+000;-9.8431348614e+000;-4.9366742373e+000;
|
||||
9.7656250000e-001;-5.5384990573e+000;-5.9013640881e+000;-9.7009186074e+000;-1.9531846046e-001;
|
||||
9.7851562500e-001;-6.6194647551e+000;-4.3000578880e-001;-4.9281287193e+000;-7.8356273472e+000;
|
||||
9.8046875000e-001;-2.5913268328e+000;-1.3031405210e+000;-4.9653613567e+000;-7.9116183519e+000;
|
||||
9.8242187500e-001;-4.1444122791e-001;-9.3148594350e+000;-2.3282569647e+000;-3.9548933506e+000;
|
||||
9.8437500000e-001;-4.5744192600e+000;-6.3621935248e+000;-8.9150670171e+000;-6.2343209982e+000;
|
||||
9.8632812500e-001;-9.6615497395e+000;-8.0535294116e+000;-4.8332160711e+000;-5.4972991347e+000;
|
||||
9.8828125000e-001;-5.3379926085e+000;-1.2421035767e+000;-9.9313333537e+000;-2.4176764488e+000;
|
||||
9.9023437500e-001;-9.5822016150e+000;-1.5994751453e+000;-1.4157533646e+000;-3.4907072783e+000;
|
||||
9.9218750000e-001;-5.7686087489e+000;-1.6190069914e+000;-5.6175419688e+000;-1.8817710876e+000;
|
||||
9.9414062500e-001;-7.2362437844e+000;-6.9246470928e-001;-5.0773644447e+000;-5.5342265964e+000;
|
||||
9.9609375000e-001;-7.4050110579e+000;-3.8547927141e+000;-1.4065980911e+000;-2.1286660433e+000;
|
||||
9.9804687500e-001;-4.2243719101e+000;-4.8860132694e+000;-5.8046221733e-001;-2.6047545671e+000;
|
||||
|
+21
@@ -0,0 +1,21 @@
|
||||
Time:4x17:512,End Time,0:0.000000,0:16.000000,0:32.000000,0:48.000000,0:64.000000,0:80.000000,0:96.000000,0:112.000000,0:128.000000,0:144.000000,0:160.000000,0:176.000000,0:192.000000,0:208.000000,0:224.000000,0:240.000000,0:256.000000,16:0.000000,16:16.000000,16:32.000000,16:48.000000,16:64.000000,16:80.000000,16:96.000000,16:112.000000,16:128.000000,16:144.000000,16:160.000000,16:176.000000,16:192.000000,16:208.000000,16:224.000000,16:240.000000,16:256.000000,32:0.000000,32:16.000000,32:32.000000,32:48.000000,32:64.000000,32:80.000000,32:96.000000,32:112.000000,32:128.000000,32:144.000000,32:160.000000,32:176.000000,32:192.000000,32:208.000000,32:224.000000,32:240.000000,32:256.000000,48:0.000000,48:16.000000,48:32.000000,48:48.000000,48:64.000000,48:80.000000,48:96.000000,48:112.000000,48:128.000000,48:144.000000,48:160.000000,48:176.000000,48:192.000000,48:208.000000,48:224.000000,48:240.000000,48:256.000000,Event Id,Event Date,Event Duration
|
||||
0.0000000000,0.0625000000,15.1988654400,0.5671229823,1.3758857826,1.4949460936,2.9050638810,1.3065130609,1.1233669797,0.7124988142,1.4112064197,0.5309139555,0.8688514675,2.0859547103,0.8210741346,1.4298572234,2.1146050063,1.1985940904,1.8390286064,14.3072574756,1.1928367118,1.6199441861,0.8662222683,1.9454012025,2.1791135292,2.1131424730,2.9649453141,0.8207559000,2.9272890051,1.4615706880,0.8520046896,3.1190921786,0.1070750046,1.8832167398,0.3745351561,0.1319700668,19.3684727908,0.6879969996,0.2421246518,2.1699752597,0.6711760298,2.0034464228,0.7088443311,1.4495489072,1.6207260062,1.1834544650,3.3554711820,1.7082677049,2.8548435703,0.6031663441,0.6958518668,1.5124787340,0.8523553396,17.3247215871,1.1058698641,0.8597599522,2.1769692070,2.5507554452,1.4276335024,0.8772121383,1.0392644777,1.5764437783,1.6911238257,0.8914866223,0.8485727428,1.5435584211,0.6356054624,1.1968190626,2.1200945912,0.9784658875,,,
|
||||
0.0625000000,0.1250000000,18.1550939407,1.5777952128,2.6100005873,1.6713841486,1.8927067468,0.8015751495,1.2097671728,0.5069287213,1.0383360186,1.3696298461,1.0765782544,3.1484673018,1.0246030864,1.8796136444,0.9568356109,1.5891596753,0.3665007574,15.7242693510,1.0223805825,1.3970415303,2.8597319580,0.4721095672,0.5722595115,1.7000931132,1.2477444741,1.7719448551,1.0515452563,1.4370236387,2.1744891214,2.8270066841,1.4996734132,1.2367731861,1.2497194410,0.2429743581,16.3836541804,3.7031289564,1.8271912329,1.3378954281,0.3499796530,2.1129706509,2.6694559902,0.9403279146,1.2255628754,3.0767630385,0.1939693130,1.1676465045,1.0774006539,0.6571145702,0.5082389837,1.9411992218,0.2523086728,16.8186196738,0.6859910104,2.5143224890,0.8954200212,1.7465681198,2.3461100873,0.1773472206,0.6415843953,0.9051814034,0.6955714440,0.3229613273,3.0427793751,0.4003739835,1.4980044723,1.4166203073,1.5490029043,1.7354131404,,,
|
||||
0.1250000000,0.1875000000,16.9591319722,1.5579032687,0.7027567798,2.7493566412,1.4149449999,0.4311909067,1.6138073176,3.0543405667,1.8000319902,1.7170089597,2.7759506786,1.3126248673,0.8843337001,2.0725819498,0.8094254991,2.5206219894,0.8417997968,16.9118691403,1.2519052574,2.1978260689,1.7366514285,0.9080728935,2.3676075199,2.0402848657,2.4961664443,0.9943384601,1.8098415923,0.9463660204,0.4804732416,1.9847331459,2.1886271806,1.1714338440,1.2338111972,1.5180135067,16.6936778766,0.7220978172,2.0503917270,1.5893718436,1.7406949135,0.8348802285,0.4184446955,1.6830256791,0.9743589022,0.5496600085,2.3536113515,0.8546722002,0.7026758306,1.7859989878,1.5929016626,0.5809122543,3.8632778362,15.4868932541,1.0640204129,2.4139384747,1.3022398336,0.8894967962,2.4735541285,1.8752337486,1.3873959251,1.8195728406,1.1104210581,1.8026951848,1.7430322516,1.2742421227,1.8704461556,0.2349031326,1.3352452660,2.1167980370,,,
|
||||
0.1875000000,0.2500000000,16.4915087118,1.6683721177,3.6844398360,2.2042913963,0.5098894023,1.0675146705,1.2126063517,2.5322629947,1.7813885116,0.4556319888,0.9324294494,1.3827377421,2.2365265462,2.0326073786,0.6228175343,1.2476280149,0.7839652507,16.1324790672,1.3163174970,1.6411893017,0.6899363450,0.6148575760,1.1617248321,2.2126808410,0.5878268415,1.0481249604,1.4832371037,0.9719866800,1.6922067161,1.0170501434,3.6810131698,2.5064795102,1.8207724167,0.2209078788,14.7222846847,0.7547865215,2.3627902804,3.2131645546,1.3893048402,1.4454954192,0.6174055382,0.1746923644,1.4724862435,0.8966630152,1.3464344404,1.7264238272,1.6302584658,0.2212860293,2.6937830976,0.5690077545,0.6953701593,17.9792141633,0.7541853955,0.6286230859,3.2000284059,0.7242316109,1.7678013894,0.3527304285,1.6778549321,3.1741809992,0.6578915605,1.1341398533,0.9645764189,2.0720841584,1.0935181823,0.8687461413,1.5648672073,0.6116051020,,,
|
||||
0.2500000000,0.3125000000,20.8115203446,1.6370995221,2.5090372937,0.9843655549,1.3713309392,1.6795018248,0.3214794909,0.7616826282,2.1953695849,0.7781835704,1.0929166628,0.6071483198,2.7717822760,1.2745439799,1.0218861837,0.6444375453,0.3007477890,14.6598864889,0.8004477520,2.7486853281,1.6792720175,1.2978278181,1.3066373484,2.1872982294,1.3218441591,2.4688766907,1.1773697832,0.2513090548,0.6696760298,1.3690769641,1.3930520428,0.7169876458,0.5622321938,0.6238262930,18.7558804383,2.2418258688,0.4185693341,2.0741360573,1.9979417164,0.7831326075,0.4784254368,1.1983093168,1.9796564619,1.9666702826,0.9782589614,1.9346918017,0.6464704554,2.6546915667,1.9473337907,0.5555027902,0.5297708018,13.5771322129,1.6713829216,0.9474950687,0.9841963660,2.4073491756,1.7423613549,1.3744341486,0.8726546931,0.5177788674,2.6588566597,1.4918066453,2.4578957231,1.5371248223,1.5503873738,1.0401625180,2.5558761452,0.9071145989,,,
|
||||
0.3125000000,0.3750000000,16.0284270521,2.8050610306,1.1210758299,0.5605111740,0.8637572197,1.0727840057,1.3487969636,1.6493179263,2.0878212779,2.0765281061,1.7299527337,3.4742093479,0.6554248537,1.9433249082,1.7787756505,1.1238825526,0.3211868878,16.0889635088,0.5372046408,3.2703427626,1.1710049868,2.2039525429,1.6906985682,1.5309348653,1.7672371977,1.5898268772,0.7653951170,1.3226958031,1.0483494196,0.3904537354,2.1375588027,1.4947217545,1.6434186375,2.9522876560,14.8678387003,1.3673236752,0.6513435407,1.4508884225,1.4419595473,1.6741786679,0.5335846017,1.4007630697,1.6048238445,2.0445697218,1.4861183388,1.8751157451,1.6391898024,0.4338965179,1.6218159985,2.1227160254,1.1700319899,15.5893195458,2.0526562257,0.0771649163,2.2930495485,1.3032458637,1.6797954886,1.0954768675,1.0463327119,3.4852490831,1.4339486455,0.6761011656,0.4599217103,1.3463391806,0.5386183092,1.5430341087,0.7326091212,1.7253792882,,,
|
||||
0.3750000000,0.4375000000,15.6542194560,1.2563671264,3.2068111276,1.0522887084,1.1899297623,2.1997766412,2.5326326648,1.2354181164,0.8193642213,1.4569595386,0.4912382341,0.8393792370,1.4564097356,1.1555790512,0.8146096356,0.3624732998,2.1513751997,15.5177488727,0.1330697687,0.7143092302,0.3411948486,2.2268627038,0.3888522190,1.4058224975,0.2369210045,2.2767570984,0.7707620939,1.6688305777,2.1334338468,0.8197524407,0.5022333127,0.7921041156,1.2901591304,0.7323119137,15.0583363122,1.6334886176,1.1042365972,3.7116737052,1.9344954852,2.0610467432,1.1803189787,1.1370085891,2.1865144689,0.9998516278,0.5568036641,0.8514666437,1.2432038375,1.1180032987,1.5382096702,1.2501119223,2.0349381778,18.6635224142,1.1938332733,1.7392011515,1.4671456802,1.7139195726,0.8739103803,1.1602739044,0.7078010535,0.8483099145,1.6356089470,0.5833597480,1.8271545731,0.7300499708,1.1031397722,2.4872990909,1.8841084042,3.1197238558,,,
|
||||
0.4375000000,0.5000000000,18.3042987292,1.4014068854,2.3177884104,0.1920265470,1.8646092987,1.4878832830,1.5670139245,0.7328162638,0.1055696314,2.5544226239,2.1401783652,1.4201995341,1.6806219824,1.3299716735,0.5229829154,1.8447015292,0.2195309638,17.9112475307,1.2901639913,1.7120203597,0.6844025132,1.6662198003,1.9899681882,1.7481476832,1.3957120850,1.9111761638,1.6324723420,1.7535983009,1.7846846200,0.8041733157,1.6517226087,1.9926865234,2.3951825767,0.0607901586,16.7373313657,0.6990679758,0.4150495033,2.3701512048,2.4351523145,1.0885955929,1.8478392619,0.6389312286,0.6302147123,1.2581538191,1.8700880852,2.2862094199,0.9991551003,1.8886773789,0.4657967490,1.2086933501,3.1565731112,12.6335548537,0.1356168035,1.0481506304,1.0228886063,1.8871494223,0.7457115409,1.1869480613,1.1740752765,2.6747427497,0.7756535142,2.3908512205,0.7435114790,3.3531949203,1.2451998735,0.7051203544,0.5347318437,0.8447839792,,,
|
||||
0.5000000000,0.5625000000,14.5183601775,0.2448793404,0.2154534585,1.3645396499,0.7938275872,1.6801172499,1.2988655279,1.5392090330,1.2942545277,1.2956423806,0.8745470939,2.1222880609,1.1918929659,2.1603839360,2.2468098323,0.8815032399,2.6608039257,17.1626957308,1.4291004839,2.1738691052,2.9799748005,1.2859754829,0.7727474692,2.3891595135,1.5165858247,2.2001194463,2.6680555304,1.4306526662,1.0312826142,2.0161123894,1.4617034728,2.8902300732,2.1105016672,1.8617498081,18.2074005732,2.8687816459,1.4835615409,0.5928003994,0.6338927647,1.4079522605,2.8861446230,1.7808784302,0.6963294417,1.2966540749,0.3784701098,1.1807324869,1.3761542039,1.5296339951,1.1685839700,1.6550532378,1.8780195566,20.2443384058,2.0738963055,1.4731581801,2.0768186203,1.5133618832,0.4009961874,2.4448846599,1.4366323393,0.9116076074,2.0449964234,0.9188956831,1.5144724985,1.8054843805,1.7899884336,1.1907266638,0.8121877749,1.5761732101,,,
|
||||
0.5625000000,0.6250000000,17.9188933375,1.5273473216,0.8636715633,1.4950507661,0.4413863271,2.2048245309,2.3351076692,2.9762242193,0.3256199860,0.8670120700,0.6500558074,0.6460226879,1.5136743139,0.2141593401,2.5809321022,2.1276381717,1.3449667010,14.2218547699,3.4050879099,2.0533906577,0.6400511417,2.4837245123,0.7776518877,0.4424829543,0.5801061390,1.0324533749,0.5718168825,0.9462329003,2.0435057984,0.9305161785,0.8194371836,2.3440549735,1.4072887848,0.3464835573,16.5035861889,0.2872344185,1.4479915114,1.6779586608,1.5677590965,0.8708352078,0.9094715287,3.0917094158,3.1854377648,0.9365907788,1.9089876770,1.1931840725,2.7868637378,0.9165202107,0.5307700077,0.7228821834,1.4292703439,15.0438278371,0.7173517880,2.1668150478,0.7094924949,1.7806054283,0.9684849607,1.0291922493,0.4104861699,1.0680548859,3.2306479685,0.6457049590,1.3360437254,0.8597764256,0.8064977080,1.1646008064,3.6346734723,1.4827391396,,,
|
||||
0.6250000000,0.6875000000,18.1826904954,3.4730430098,0.8050643775,0.7464953823,1.2355008633,2.3462246836,2.4045854191,0.9971654523,1.6471741316,0.6215423966,1.3891559639,2.5798877468,2.2981244945,1.6300126644,1.1904918935,3.2742733588,1.4199216480,15.1092681242,0.9274544566,0.2417125668,1.2395013713,1.9570392145,0.6275923655,4.3840382939,2.4403989178,1.5232341075,0.5262727532,0.8644911522,0.5212921878,0.4624170511,1.3866227388,0.2559534541,0.4847218692,1.2957783705,13.4308126997,2.6900030044,1.5684403586,1.1654302828,1.2129955288,2.1364799981,0.9107418044,1.5595737568,2.2703090252,1.8753337804,0.5827550534,1.0703970712,1.5170379344,0.8114890215,0.4922840225,1.6466608105,0.7515132581,15.3812033650,2.2405423468,0.8984671743,0.8181091793,0.8004358243,0.5340736497,2.9987663110,2.2936815280,1.4467003916,0.6546171554,1.8576607970,1.5122178097,1.5202030080,1.0769590377,3.1011240178,0.4716315021,0.7409231802,,,
|
||||
0.6875000000,0.7500000000,14.0903204503,1.9099431858,0.5687241291,1.1066863501,2.0673848906,2.9122455607,1.9169378114,2.4085468977,2.8211192535,1.3500189946,0.3230008370,1.8210976275,2.1908593766,1.5195605958,0.9021550425,0.3846425847,0.4002227113,17.6976228373,1.2192375516,1.1180132720,2.0435282704,1.6320085250,1.2732007716,3.1943648533,1.0509904593,1.3117412484,1.2949786052,0.4770208287,1.3009244101,0.6613052050,3.1692125515,1.5561848882,1.8488739365,1.8222902154,16.8996126102,0.6750062454,1.6902227600,3.0440967388,1.2197549260,2.5399449904,2.4026628451,1.9765441563,1.8635924518,1.1952833106,1.2309228044,0.6455305204,1.2178306218,0.7000560864,2.0556971618,1.7215976835,1.1695191832,18.2243399427,2.5680260988,1.8424757504,1.9202556109,0.5054947549,0.9117811455,1.2022071349,2.4977833615,1.2196198678,1.7971528234,0.5840789729,1.8433152681,1.9938940363,0.5424260415,0.7826719782,0.7045582592,0.4769521316,,,
|
||||
0.7500000000,0.8125000000,13.6863584965,1.6865275223,1.2323024025,0.6377127057,2.1822336673,1.3315425799,2.3104643557,1.1180430364,0.8504531416,0.3307925784,2.7620050907,1.5324213237,0.3463107593,2.0116760694,1.4469483770,0.7907213548,0.8234820804,16.5635063136,0.8512292444,0.1737793886,2.5355632685,0.9406060761,0.4998104695,2.0151378695,1.0924352788,2.1659997009,1.5410583995,2.6517461154,0.3778213998,0.3601001599,1.7552484796,1.1925749360,1.1263399812,1.7279486372,13.3371077287,2.6756984448,0.9754414456,1.2213700451,2.2864138969,1.3335937456,0.7108837715,1.9764052498,0.9873742109,2.3055760081,1.2029178875,0.8646229075,0.8004005808,0.7739934293,1.2593598841,1.6478875370,3.1167011429,15.4467386268,1.6609378331,1.0114044746,1.4620543024,0.3520346462,1.2903431201,1.8961678598,1.5618320735,1.4061008059,1.1288523177,1.4803857599,1.2868565039,0.8781635208,0.5928046853,1.0567051428,0.5788363123,1.0611105631,,,
|
||||
0.8125000000,0.8750000000,15.1234856648,1.5979773969,0.9934243484,2.4445366643,1.3427228484,1.4444464081,1.2006521352,1.0633343896,1.6536476481,1.4514987325,2.1518326020,1.0812759760,2.0717787190,1.5949965889,1.7685394366,1.8748699161,1.6524765119,15.9495457294,1.1118199575,2.9216615063,2.3930018850,1.5377889004,1.5136880269,1.1782391377,0.4114571028,0.1982287295,1.6419923071,1.1473148421,0.6863083781,0.6362848070,1.9897724664,0.3889222357,2.4068234358,0.4767168066,19.2084359413,1.5305255790,0.9842616856,1.7177595949,2.1015871393,1.5532391530,0.9277778217,0.4107633100,2.5250752553,1.9345348035,0.7028593466,0.6848780580,1.1076006954,0.4802938755,2.4591279297,0.3925572958,1.2508446069,15.5858948547,1.9025021938,3.0174296733,0.6268450500,2.5323728648,1.9828167736,1.8517031754,1.5598184433,1.1586206381,1.1552099149,2.0704449859,1.0293736511,1.3772766722,1.9433687191,1.3775854481,1.0643941640,1.1197343431,,,
|
||||
0.8750000000,0.9375000000,14.1066987070,0.4409167577,2.3917591880,1.6151701143,0.6321695011,1.2770855573,0.5917290137,1.8038163946,1.8504638443,1.6128826531,1.3361748806,1.5373835412,1.1968078513,1.5747169656,0.6287191193,1.1894157457,1.4716293088,16.7100178062,2.0975470180,0.3728133633,2.6631144376,2.5929116063,1.8953051397,0.7379429117,1.4610558741,1.7559686678,0.4346267426,0.9499587492,1.5362118380,1.2700479698,3.3134982498,1.4328138831,1.4013971217,0.1967909343,14.5065247677,2.0373729702,2.9615972265,2.4872682838,1.4076957982,1.0578920566,2.4389935904,1.6283687869,1.0759864369,2.0051109111,1.3737583859,0.3008386984,0.7271068634,1.0688870489,0.1702541441,2.2516277312,1.5030296417,15.3983091232,1.1174678322,1.1385865597,1.6653203503,0.9638024120,1.5099916167,0.4615621700,1.6671643081,1.8574152436,2.2530669894,0.8344438030,2.1652244478,1.2974272643,2.2692018297,0.3226193068,1.7496215546,1.4504393949,,,
|
||||
0.9375000000,1.0000000000,15.3245920974,0.5077058464,2.0734085126,1.5574551474,0.7597512399,0.9022939110,1.7068869580,1.5290536619,1.4428372573,3.3324669271,2.7357304462,0.7554960348,1.2926161607,1.6484616020,1.1567744594,2.6132156020,0.7000293529,16.7540052051,2.9575271796,1.7114456574,1.7247633457,1.3324970374,0.7882926617,1.5150662107,0.6634789301,1.5040456237,0.9378550757,3.7905331528,2.5903557069,1.8156793127,0.3406538681,0.5771854510,1.1427606372,0.5699161978,16.2262396950,1.1826089339,2.5187009419,2.2048965588,1.3278760817,0.8802444581,1.3139629275,0.5999277229,3.4064527278,0.3481525057,1.1078566330,2.4861624980,0.1364837125,0.8383006826,2.2977501555,0.2551474846,0.9791699604,16.6408406673,1.2947891819,1.2669194582,0.3020841808,2.3284398230,0.8457315489,1.7245468046,0.5609522661,1.5398299519,1.2050520574,0.5949106435,2.1440702278,0.6251916736,1.8682074859,0.6621665553,1.4159071696,0.0214522327,,,
|
||||
1.0000000000,1.0625000000,13.9970185810,2.4622355497,1.7360757425,1.0358860602,1.4991653482,0.3120789828,0.8088748857,0.4473196836,1.0222560775,2.3035913218,1.4310506585,1.1890339062,1.3569087722,0.9520881870,1.4976906065,2.0637569553,1.1619341846,15.9801018341,1.1902069147,0.8499435784,0.5741012926,0.6955371261,1.3724939943,2.0575677278,3.3245182027,1.1440093007,0.5254426005,0.9263009856,1.3300966845,0.4250267261,1.2046160304,0.9294140043,1.0646779662,0.7179257567,13.1084021090,0.3661792601,2.4865973607,1.7288399194,0.7533533851,2.0274305781,2.2528739682,0.5441449347,1.5303927163,1.7377855279,2.5198161460,1.9409947865,1.6396359238,1.4789609494,0.3124129832,1.2549063740,1.3215216694,17.5105683100,1.2972307449,2.4621498172,1.7489329912,0.0982467718,0.7149291018,1.4676787062,0.8137602647,3.3192615384,0.3198382520,0.7633358501,0.9705997645,1.3848245564,1.3436980680,1.5518320642,1.0974932605,2.1649754639,,,
|
||||
1.0625000000,1.1250000000,16.9474798327,1.6828035825,0.7708073177,1.6698898155,3.0515500321,1.5862059741,0.5714985234,3.1286084930,1.9089678502,1.7534988483,0.3247732613,0.1717784214,0.6174721839,2.2517089159,0.0820261683,0.2908555950,0.8599070155,15.6031529759,0.6330089113,0.5595763553,2.7297306338,1.9848704269,0.6237705908,1.2680025536,1.7297021410,1.4561516891,1.3088757844,1.5573531678,1.2345360874,1.5653328121,0.9693502528,1.0142854263,2.7348820262,1.7430552016,13.7443856057,1.7108243066,2.8306679139,1.3835942010,2.1461983484,1.9356015153,0.5467726770,1.5335189923,1.3209678623,0.4975009929,1.4543544262,1.1911287557,2.1474866954,2.0842703330,0.9537057994,2.5692684349,1.7078211647,15.2490914606,0.8592913145,1.5464412019,0.4884729134,3.5093430498,1.0647232602,2.1954306023,0.7485995667,1.9252538701,1.6923877598,2.8181665726,0.9977764845,0.6571764847,1.9516480100,1.1838704053,0.4445554692,0.2059898919,,,
|
||||
1.1250000000,1.1875000000,15.0163539511,2.2255355704,0.8252122175,2.0315927145,0.1094805673,2.1700383723,0.8611474191,1.9670743434,1.9666973905,0.7764801300,1.5164809480,1.9457118526,1.0378746913,2.0676452192,0.9580440443,2.8328361039,3.4931740176,17.6629218187,0.8537514305,1.5381693296,0.8007344308,0.6627318719,0.9586474970,1.4594386789,2.7328302508,0.4913833362,1.3368452531,1.8067533550,1.5756577319,1.6945826645,1.4655353636,0.8548675030,1.4897244685,2.7127222505,16.6933504357,0.9156293679,2.3165112237,1.4155208331,1.7093288527,1.7312998197,0.7538105128,3.4093877120,2.0602402276,0.9059780154,0.6094527353,2.2128218609,0.7499683704,0.9435533842,1.3073165331,0.4070655717,2.4530143575,17.5924414850,0.2821967142,1.2525622022,0.7119732550,2.3382338676,0.9664052236,0.9490623879,0.6521532983,1.1026151374,1.3056940310,1.8169497950,0.8096019956,1.7188579698,2.7169439561,1.6802813963,1.1317803306,0.7139442081,,,
|
||||
1.1875000000,1.2500000000,14.9145437325,0.7276860017,1.1778049625,1.8776337630,1.9915966995,1.6485708337,1.3660866236,1.0287811925,1.9305031407,0.3589113171,1.5537490890,1.5259453856,1.1527588942,2.3177665507,0.2028557983,1.0786170324,1.8761430606,14.3760357052,1.7899552398,1.0696038943,1.6668678484,2.1701649280,2.5264338729,1.7328495111,1.8605913238,1.9674040124,0.7782572487,0.4392255444,1.3432486105,0.7254753671,0.5317627820,2.0115753535,2.4638893173,0.1492477637,16.2109916643,0.7822064854,1.6483471986,0.5143079887,2.0146873134,0.3448734300,1.5538957831,1.7092981254,0.8649034008,1.1665767190,1.3597842095,1.6267505143,2.5692669932,0.7736253806,1.1456274279,3.5896968265,0.0616840436,16.7558523901,1.9117038006,3.6646169775,1.0812263792,1.9282761449,0.5839618644,1.6949277913,2.1389444211,0.9710399798,1.1496032929,0.7545547464,1.5850094094,1.4312471408,0.6544941518,2.1160738000,1.5662462147,1.3105961895,,,
|
||||
|
+12
@@ -0,0 +1,12 @@
|
||||
Time:10Hz,Epoch,C1,C2,C3,C4,Event Id,Event Date,Event Duration
|
||||
0.0,0,0.0,0.0,0.0,0.0,33024,0.0000000000,0.0000000000
|
||||
0.1,0,0.0,0.0,0.0,0.0,1009,0.0999999999,0.0000000000
|
||||
0.2,0,0.0,0.0,0.0,0.0,9000,0.2000000000,0.0000000000
|
||||
0.3,0,0.0,0.0,0.0,0.0,785,0.2999999998,0.0000000000
|
||||
0.4,0,0.0,0.0,0.0,0.0,9001,0.3999999999,0.0000000000
|
||||
0.5,0,0.0,0.0,0.0,0.0,785,0.5000000000,0.0000000000
|
||||
0.6,0,0.0,0.0,0.0,0.0,768,0.5999999999,0.0000000000
|
||||
0.7,0,0.0,0.0,0.0,0.0,786,0.7000000000,0.0000000000
|
||||
0.8,0,0.0,0.0,0.0,0.0,785,0.7999999998,0.0000000000
|
||||
0.9,0,0.0,0.0,0.0,0.0,770,0.8999999999,0.0000000000
|
||||
1.0,0,0.0,0.0,0.0,0.0,33284,1.0000000000,0.0000000000
|
||||
|
+21
@@ -0,0 +1,21 @@
|
||||
Time:4x32,End Time,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 1:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 2:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 3:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Noise 4:,Event Id,Event Date,Event Duration
|
||||
0.0000000000,0.0625000000,0.6247178635,0.2295959410,0.3719348670,0.4369280334,0.0531824550,0.9206758752,0.0630631244,0.9434279031,0.9641877373,0.5629064767,0.2351933583,0.4779946790,0.0117267619,0.3134714761,0.8507095193,0.7466738627,0.2528587843,0.7453956793,0.9518118396,0.6991397617,0.0862911078,0.9026251871,0.3190328022,0.8531495619,0.4509243038,0.3474009284,0.5439153896,0.9377195023,0.3509305143,0.1930757496,0.5081646708,0.8641290963,0.8184129258,0.0579506208,0.1523714645,0.9367236774,0.5905248479,0.1333713469,0.3324533184,0.7861590511,0.2675358083,0.3492625176,0.7237713311,0.6417018545,0.7801114582,0.9158944124,0.2555023145,0.8683514344,0.5665258553,0.8405682158,0.3655735466,0.4453321877,0.0885207739,0.2907267923,0.5494846189,0.9413676837,0.3565037448,0.9792467812,0.8180077767,0.8491866745,0.6398501201,0.7146574361,0.2051389874,0.3130511628,0.6068926665,0.8942976822,0.1422383951,0.7328692435,0.0940591213,0.7192620132,0.4110640835,0.9548383446,0.1229668837,0.4066373212,0.9911571043,0.9388372037,0.2167346461,0.2381878479,0.0484336310,0.1247581434,0.3242327180,0.6956214425,0.5449278760,0.8073892256,0.3530212415,0.6281783741,0.1901823115,0.6940901016,0.6007994404,0.5159909043,0.7611074464,0.2833421270,0.8413109190,0.8516491721,0.2274385018,0.8590584118,0.8788193397,0.3310824526,0.8579762192,0.8918205681,0.0728651003,0.3015226352,0.8772095803,0.4444632176,0.9624061577,0.0721730283,0.4946323251,0.7401772095,0.2367268736,0.9484532140,0.4340896211,0.5580905937,0.0518348252,0.8917294324,0.4596416526,0.2177230674,0.2215679048,0.1192771688,0.5481093151,0.2777584600,0.7472654104,0.6882385919,0.3112582292,0.2858708308,0.9880663999,0.7280864029,0.6647238990,0.7279383643,,,
|
||||
0.0625000000,0.1250000000,0.7916842403,0.9959020347,0.8479742697,0.8989522438,0.0569855873,0.2787010295,0.0903042192,0.4555569873,0.3243730180,0.4240449432,0.5276381089,0.4003381419,0.7578766746,0.7413101839,0.7109964227,0.4883505676,0.5342749758,0.9194170183,0.4473819959,0.0906037479,0.4219422783,0.6936454615,0.6798297951,0.2889073431,0.6330675830,0.9270815263,0.0029215892,0.6466751690,0.5451060811,0.4699094773,0.5787274938,0.3730986973,0.0372371369,0.7794849603,0.5209016963,0.4896139265,0.1445874174,0.9246914214,0.5876538923,0.8034119268,0.9044315671,0.0312112283,0.0596434951,0.6761581162,0.1177141317,0.0792608382,0.8271069522,0.6915881152,0.0880144213,0.3721853753,0.5345691394,0.8434471663,0.4318685094,0.3977974739,0.0303642103,0.1931452123,0.3289877151,0.5585844652,0.9421114300,0.6584575928,0.7248723169,0.6650715556,0.2584593394,0.1747180012,0.0126640515,0.2283467592,0.8282534361,0.6398181894,0.3795885686,0.7396059586,0.6978656200,0.4282701444,0.2581869315,0.7321435078,0.2958819489,0.6788505535,0.2237252209,0.9439092700,0.0898844653,0.2602278492,0.5438064933,0.2756655097,0.7206917880,0.0267102423,0.2909259563,0.8908985397,0.1769430288,0.3332633208,0.9955168003,0.0171425024,0.9283314655,0.7482497075,0.1437444331,0.1902347549,0.1183198923,0.4744185095,0.1350478048,0.1350632310,0.8598516148,0.5988463473,0.4637926538,0.1466937549,0.7543433821,0.6176076145,0.3053986235,0.1268153002,0.7012935930,0.4252843964,0.8405439020,0.7880591662,0.0546743206,0.3462279495,0.3178489669,0.1534754725,0.9493906316,0.2995842402,0.3171853460,0.3817553150,0.6397120068,0.6786349043,0.7923960253,0.5762789019,0.8897650798,0.9889561532,0.8021054089,0.9513009533,0.0145796991,0.4025427590,,,
|
||||
0.1250000000,0.1875000000,0.5354316952,0.1855708270,0.5440807547,0.6109015206,0.1226905328,0.6252105983,0.2077858045,0.5892266906,0.3243331341,0.1108849917,0.1480660746,0.5993171874,0.1865899246,0.7299387951,0.8314899809,0.2654833025,0.5794565286,0.1860336550,0.0734534324,0.6825762035,0.3315890869,0.7518282416,0.0706133868,0.1740920339,0.5928672953,0.9267083497,0.4743168922,0.6156009934,0.1044082525,0.7068447114,0.3882954461,0.3883721938,0.6535663602,0.4014618485,0.9390947879,0.0562338820,0.9265076369,0.6552331559,0.2379341216,0.5922963491,0.3785556043,0.0823038181,0.6102022810,0.5501048495,0.0698941930,0.8938943979,0.8859805122,0.6422285354,0.7160914168,0.3219175423,0.4338959495,0.2321623219,0.4825337785,0.9825600425,0.6410412814,0.0748274629,0.4349746758,0.1838029455,0.0569921338,0.1673214007,0.0840652676,0.3017000062,0.5920127234,0.7209052739,0.3247833503,0.1289402258,0.9880296998,0.5507754099,0.9941914140,0.2638531718,0.7773551703,0.4608309509,0.7777520106,0.5637431627,0.7085339180,0.4620061992,0.4462312341,0.8549258211,0.9349425051,0.6220747121,0.8257583785,0.0621969569,0.2161147769,0.2578956392,0.4917265966,0.0811471439,0.5905438559,0.1570435301,0.8517347798,0.8070278002,0.6446121058,0.2738092507,0.7153216938,0.5724286975,0.3184696522,0.6106053938,0.4362556750,0.4654125476,0.0412808517,0.6872391982,0.1384921176,0.2355170180,0.6412882488,0.2836564966,0.2233175605,0.2902266199,0.5771084048,0.4444316525,0.1688995347,0.3085759818,0.5289214465,0.0736758027,0.4931861155,0.3667650295,0.5704558352,0.7444152785,0.6738597201,0.3758223464,0.4611965055,0.6219348379,0.1448997990,0.2042974252,0.3401152762,0.9085653881,0.2535903926,0.8559037887,0.1393786795,0.9670247519,,,
|
||||
0.1875000000,0.2500000000,0.3869905095,0.8130090968,0.4773681078,0.3658859478,0.6223253664,0.5276614192,0.6096424931,0.5782078553,0.8558362478,0.0166804376,0.1590949034,0.8950497766,0.9917305072,0.2435093392,0.1637060260,0.9037609647,0.4083003202,0.6212941776,0.9808579371,0.4297587189,0.8651543006,0.9168958084,0.4957057631,0.4137233333,0.3355745384,0.4837193002,0.8212060186,0.3309787798,0.6054222742,0.5242513437,0.2565769902,0.5782544166,0.5716569945,0.3550236323,0.8161460788,0.4898113878,0.4942002657,0.6799599768,0.1361279141,0.9733866639,0.8570520848,0.7394237784,0.2504270682,0.4261734022,0.0781164388,0.2757225072,0.7689188521,0.9729547878,0.7357179380,0.9089161807,0.2199974621,0.1972865281,0.1712700266,0.8200799860,0.2932880267,0.2365728696,0.8504637016,0.2733654731,0.9244502555,0.1964268228,0.4520225395,0.0590663212,0.1510377727,0.6105980920,0.6267644702,0.7912344737,0.9962945653,0.7146594119,0.4629627338,0.1456252465,0.0962293923,0.6451807255,0.0815258177,0.3180345790,0.7228372390,0.0919843561,0.1059558333,0.4949910282,0.2040756983,0.1003921195,0.7441948864,0.6701852798,0.5090639309,0.1593349208,0.1996188341,0.9702999496,0.8765912561,0.1788533351,0.9248315797,0.5284104259,0.7902777246,0.1973803348,0.7706196033,0.4991492617,0.6835269318,0.2194916869,0.3945134415,0.0846402352,0.3076508678,0.9030676920,0.7974082592,0.2686406809,0.9279564749,0.5067867551,0.5450436533,0.9022596013,0.0639394629,0.6020122301,0.5276013811,0.9248796261,0.5335813728,0.5468204648,0.8933275251,0.3670222436,0.0714884072,0.4467592905,0.8788097329,0.3470622129,0.3112788191,0.8507936441,0.5841831907,0.3042222930,0.9730116671,0.0189913267,0.2255214015,0.4713275090,0.7614493098,0.7445041714,,,
|
||||
0.2500000000,0.3125000000,0.7475165320,0.7077019608,0.4211428759,0.6337533703,0.1548015915,0.8466420209,0.8046947974,0.2090040792,0.7225930176,0.2379091252,0.2081041720,0.3097281049,0.8627588837,0.7815109899,0.2822953856,0.3766993126,0.4826091563,0.6490248260,0.5871235379,0.8408237286,0.2880355727,0.8079525568,0.7305980087,0.0446874464,0.3790445239,0.6870999713,0.3792935724,0.7203232241,0.7072606350,0.3268334912,0.3244365475,0.1609095400,0.6040282352,0.4090505685,0.8466607979,0.6078362484,0.6572325418,0.9389880754,0.2789553648,0.8288472604,0.7671234810,0.8559769762,0.8048807078,0.9781307846,0.1170271400,0.0955756006,0.7023727754,0.2710399539,0.2772281950,0.9339906632,0.0760479772,0.4311382486,0.0134554477,0.2744895851,0.8400484035,0.1349793915,0.6880048711,0.5082143673,0.0599132481,0.5983064617,0.5813180115,0.3302138741,0.1171984423,0.3598981365,0.9601493494,0.9718443754,0.8141304278,0.3168197875,0.7100818388,0.7431266517,0.6275801475,0.4796580172,0.7600127761,0.9601051835,0.4013476530,0.1069331493,0.7168725964,0.8865401975,0.4027381288,0.1773700931,0.8079308106,0.0192486329,0.1971677996,0.4108467749,0.5112684753,0.6257441242,0.0241121089,0.0773695745,0.1119003820,0.0784076694,0.7690242585,0.9973556015,0.8100359763,0.1161451868,0.3317182662,0.2262892942,0.4158308909,0.6780515991,0.0965853147,0.1125570906,0.0585444923,0.8103074192,0.6963739721,0.4617282699,0.0662594968,0.9470956312,0.3677819686,0.6243161291,0.2456642224,0.6868472262,0.5304208286,0.4996256302,0.4018244247,0.7993800575,0.7502997657,0.1295753843,0.6139282982,0.3850772083,0.7410265871,0.9505349223,0.1718049857,0.0436037309,0.7222658431,0.2623362916,0.4524845155,0.7600987547,0.0907678234,0.6501223778,,,
|
||||
0.3125000000,0.3750000000,0.6832152936,0.1653723242,0.2833738236,0.7051067993,0.9596694722,0.0077245780,0.9099076649,0.3307804475,0.3043593729,0.7884677316,0.5294613040,0.5603319725,0.1811365085,0.3240584144,0.6993869606,0.0559134919,0.3100979279,0.3963845437,0.4922327199,0.3384887238,0.3344349221,0.1713994979,0.8019217222,0.6949718141,0.1128475762,0.4875978495,0.9843723157,0.6184082213,0.2098921225,0.1262802815,0.0787062282,0.7506488608,0.6320486488,0.3718562960,0.8150399046,0.4523261948,0.1865352490,0.3382845216,0.3307686823,0.4420708066,0.9860612608,0.1189327538,0.5187779404,0.2537971991,0.9554295770,0.4871536223,0.8492387615,0.6820085198,0.5727664111,0.3328853692,0.0458602726,0.0990522651,0.7407473733,0.4783710605,0.6004347131,0.5108897616,0.4088872804,0.2217112738,0.0631800883,0.7484901643,0.6655623131,0.8960333257,0.3361647702,0.8936920550,0.3347082420,0.4624420691,0.6975995414,0.7440702980,0.7570610575,0.4503419686,0.0761081195,0.2094631761,0.4337339492,0.8481645458,0.1509745577,0.8273338033,0.1412401372,0.9055362893,0.5377664056,0.7276511134,0.3472308354,0.4070861489,0.8647191699,0.3776554763,0.9014279337,0.1613831620,0.1831764721,0.7570894095,0.2429209175,0.1028610284,0.4883698574,0.8601409264,0.6518152619,0.7323852156,0.6203258915,0.2670598072,0.2435945547,0.2624233742,0.5525493894,0.2394448698,0.4407361986,0.7679479290,0.7408140721,0.4260145663,0.6428195701,0.7339275440,0.3838015122,0.2047397431,0.1386463228,0.6520207217,0.6937717628,0.4803410582,0.7105179750,0.8847256717,0.6067465718,0.7352916114,0.8750882426,0.4990125778,0.8288464500,0.2335142721,0.9030272779,0.2022158357,0.9505604827,0.2209152961,0.8638066743,0.2321505924,0.3101781013,0.2061025528,,,
|
||||
0.3750000000,0.4375000000,0.4859413321,0.9877855547,0.1494783007,0.2767159450,0.2167581862,0.9465897263,0.5924392790,0.8611804591,0.8994583734,0.3700717301,0.7556393195,0.3908531850,0.0479475632,0.7903228519,0.3686270104,0.4355188883,0.8181044774,0.1318663671,0.2742029524,0.2670144076,0.5052552682,0.3962481907,0.3654816428,0.0745923945,0.7323264899,0.8265386631,0.0207543294,0.8574163453,0.6112360929,0.1370159427,0.0227805192,0.9560871550,0.6499585998,0.5232965087,0.9644817812,0.5052818994,0.0360487467,0.4839542890,0.1854097859,0.9884410882,0.1891570103,0.8116629547,0.9937143456,0.5141466737,0.0049897258,0.2016054441,0.2165381487,0.2584592500,0.7546079981,0.6247757524,0.0004397486,0.3211759224,0.1478310619,0.4054733154,0.6243799946,0.5384108196,0.9150172065,0.7107390857,0.4420419482,0.4309278466,0.8999328807,0.3986736122,0.7601878832,0.8841054698,0.8045254231,0.2193988021,0.6877752680,0.7365202352,0.0493166712,0.9203797234,0.1834182537,0.1521059114,0.7988404376,0.1548302495,0.5660417581,0.9886881104,0.0694611096,0.6951701064,0.6523590668,0.1372051714,0.0353963454,0.9750322802,0.3420630472,0.6143989780,0.9029343792,0.3236322112,0.3542693998,0.3545910723,0.6990753133,0.0825616445,0.8365524074,0.7571731473,0.2803697805,0.8384478281,0.8199029886,0.8515532590,0.6603102332,0.1317246074,0.5796738775,0.3141785141,0.9550146442,0.2675180803,0.7109510296,0.4312380580,0.4246354715,0.5503449372,0.8890772075,0.7285156753,0.3090131416,0.8626140449,0.1238252930,0.7100571550,0.5275217385,0.3981849195,0.4033966847,0.1773852715,0.5235586097,0.2376325615,0.1133864610,0.4032399456,0.3768389798,0.0065282723,0.0196791952,0.1548828904,0.8980673284,0.9459735046,0.4348659466,0.7464884343,,,
|
||||
0.4375000000,0.5000000000,0.0526652108,0.3060746153,0.4623779312,0.5353596075,0.0713174255,0.2419932550,0.1181321861,0.6044711831,0.9282540861,0.9736331881,0.9815067283,0.2351991637,0.3612387269,0.5239392833,0.6655883607,0.9938846249,0.1296747862,0.9861127972,0.1274974784,0.3710853378,0.6428858622,0.5598340665,0.3426672125,0.7328236210,0.9149753943,0.6098634449,0.4605819304,0.2784264691,0.7899020005,0.1312024286,0.4621126929,0.1965656390,0.0123895954,0.0354354742,0.7273706365,0.4492230779,0.8741791639,0.3810855432,0.1157127193,0.6245390642,0.3816144001,0.0342777544,0.0467986362,0.2774559739,0.8923492222,0.9953079084,0.1309779175,0.5961301597,0.3099202453,0.9770325006,0.5071837376,0.6934208998,0.2344275359,0.2897891670,0.5736545678,0.7122258593,0.9728836159,0.5458500413,0.6501270568,0.3591857357,0.5158132112,0.9789201000,0.8691409642,0.7656565451,0.1557542691,0.7970968222,0.2881981919,0.7726560996,0.8546606803,0.6566159525,0.5507968676,0.6179759016,0.4828415082,0.9437404326,0.6924461161,0.4658332667,0.0979719572,0.4398121240,0.1438904412,0.7496415114,0.0731318104,0.2609226620,0.3701273194,0.8512771113,0.8722216967,0.4299300862,0.1312265347,0.7606461972,0.5967305005,0.3751555358,0.5354029713,0.9570320644,0.6098493550,0.1289725823,0.7069231605,0.8694794760,0.5170092632,0.3601436892,0.7058712961,0.7469340987,0.2521892991,0.6322562329,0.1013701295,0.8491450606,0.4590498051,0.7310305673,0.8269926803,0.6074415524,0.4662977231,0.6465816682,0.8205662619,0.8832575795,0.1465387098,0.8680616487,0.4096918793,0.5852987652,0.4461445706,0.1560673094,0.0266291511,0.9622767956,0.0414263681,0.3629239164,0.0525879092,0.0779130952,0.2562843878,0.9092865977,0.7887958288,0.9093442177,,,
|
||||
0.5000000000,0.5625000000,0.4926652883,0.7512122414,0.1548476375,0.7650190189,0.5141945812,0.4969086542,0.9462195560,0.7683583798,0.0855614543,0.5256539939,0.2630233504,0.3742849301,0.1559279105,0.1489096042,0.6653898561,0.1138309888,0.0475025291,0.2753131604,0.0275366297,0.9809523805,0.0338368805,0.9269881379,0.0502397972,0.1016259796,0.3627047651,0.2293560563,0.4889925939,0.5114581725,0.7985794735,0.1955985704,0.5195864269,0.8491408958,0.4412451643,0.7563525841,0.4346954005,0.2490186803,0.7948655006,0.9979346998,0.7598540527,0.8762718842,0.4072918834,0.0689565034,0.8952694137,0.6424213173,0.6918975094,0.7443818732,0.2585564679,0.2019052580,0.3316509877,0.9849470311,0.1548954893,0.4391770544,0.6088130211,0.1808344808,0.1080418664,0.7036645222,0.4441828502,0.1075669783,0.3375624970,0.9895764424,0.7450129259,0.0241380876,0.6299205739,0.1611904954,0.1037065519,0.9300586721,0.4044433259,0.8433975794,0.5246419837,0.0419671247,0.2045192388,0.7056242696,0.2645084059,0.1571327578,0.5443686608,0.4002167776,0.2817252930,0.2453914813,0.4499940879,0.7328971985,0.8301240972,0.9468080746,0.1496586704,0.0148724986,0.1790443165,0.5386010327,0.5943256179,0.0723523921,0.2236518241,0.8345614863,0.4446492954,0.7731404367,0.5083364355,0.6416412974,0.6354032024,0.8889534273,0.2649519246,0.1769712633,0.4595457090,0.7192335434,0.5000948738,0.9646494845,0.6100983098,0.9575897572,0.7635886252,0.3145864322,0.6420461670,0.9808723172,0.0620559340,0.7938328192,0.3454614431,0.5953680223,0.5544510509,0.4504120026,0.8943826088,0.4842216515,0.8929886234,0.4288465122,0.1564112811,0.3252644993,0.5164954150,0.3014303297,0.7043552445,0.6696986130,0.3627545452,0.3432444541,0.4692347383,0.7377021736,,,
|
||||
0.5625000000,0.6250000000,0.3548387419,0.0796746763,0.6342768159,0.0296325649,0.9640529135,0.9868903607,0.1778739933,0.9019317864,0.8128735686,0.9701672052,0.8320685972,0.3162027264,0.9373291417,0.8125307872,0.8106044994,0.1962158955,0.2474939022,0.5465572993,0.7876791237,0.1753418525,0.6342823205,0.7545824184,0.4214702921,0.6403068278,0.4490981505,0.6738659109,0.0163966827,0.8634146550,0.6677360923,0.2105928650,0.8362909176,0.9620119936,0.6306045009,0.1718088784,0.0982105408,0.1162219564,0.9585239354,0.7266078151,0.1952852996,0.0108120875,0.1315755164,0.3056201264,0.5124785949,0.4017646539,0.0346933841,0.0348911523,0.7019456655,0.6033998784,0.1409685891,0.0052106034,0.8845494692,0.3171485392,0.1751754847,0.3062383870,0.2960795583,0.7197415007,0.9949374788,0.1329197420,0.7994592281,0.8946880810,0.7543501181,0.2613628868,0.6345325401,0.3764414371,0.0278432646,0.0524431348,0.3322724667,0.3718729187,0.6172496430,0.7031758174,0.6411467646,0.0481271599,0.5018861138,0.8183177102,0.7736140946,0.6019540867,0.0485901181,0.5530024043,0.0660292304,0.4661760060,0.2586283982,0.1391376588,0.0556506028,0.6547378157,0.6253326479,0.0875797574,0.5825918615,0.6969912143,0.9752079884,0.9423126262,0.2488991269,0.8252424053,0.0897458876,0.9998906860,0.7458893151,0.3179603629,0.9342312953,0.5402078901,0.8981055715,0.7352642594,0.4631935444,0.6066625286,0.3549963043,0.8298564928,0.7607265895,0.5664455881,0.1930705912,0.4323468697,0.6950631985,0.3498548246,0.4684577179,0.2220740248,0.2624253789,0.2515077996,0.8203581586,0.5385144786,0.2173937652,0.5463267793,0.4103756479,0.3151688955,0.7107384400,0.0251211780,0.5314374645,0.9966925937,0.5429001502,0.8070511126,0.1058709247,0.9967472763,,,
|
||||
0.6250000000,0.6875000000,0.7654441406,0.4937635777,0.2239419888,0.8162253727,0.9942743706,0.2985757273,0.9891730216,0.1941202453,0.0551401938,0.4405527723,0.7969850798,0.1563250415,0.4974447836,0.3638560434,0.2950112985,0.4749449773,0.8567663343,0.8206363397,0.4740776736,0.7806238928,0.9931304296,0.4493170793,0.0649340996,0.2380064668,0.9392203940,0.1506378159,0.5991383693,0.9228379647,0.1970598102,0.3463509476,0.6523170716,0.2806429346,0.5740959158,0.9104665206,0.4764978478,0.9612608692,0.2306956910,0.2107479912,0.1704450788,0.5974330634,0.2684311345,0.7482852761,0.2793505003,0.8886733039,0.8475405122,0.9195321889,0.7322915252,0.3557866111,0.0693242699,0.3397358772,0.1634379628,0.4213934450,0.7044839428,0.9967953137,0.9440651119,0.5700368790,0.7893532142,0.9413755247,0.0517390424,0.6595565958,0.8118670906,0.8431744357,0.4769329347,0.6804557841,0.9390716855,0.9902591412,0.3700074395,0.3475468538,0.9869502545,0.3295042466,0.6492619955,0.2637873620,0.3119304245,0.0467681880,0.2625429758,0.0213194594,0.6631090660,0.6053168913,0.3251018671,0.7144555594,0.3016037853,0.7397705205,0.8889687117,0.6712127428,0.7807400336,0.2118155160,0.5016608983,0.5795669421,0.6359361175,0.6869840925,0.4576294059,0.9030834693,0.8164589927,0.7203676675,0.0748002424,0.7592939311,0.9823745447,0.9587582562,0.7952176470,0.7251193146,0.2759674732,0.7957962712,0.2292552406,0.9370382747,0.3233199737,0.8624233501,0.9313870701,0.5996785422,0.1932367058,0.4228141136,0.5863649147,0.5264009631,0.1215832722,0.0065137360,0.2756085894,0.2840909536,0.9855480257,0.9460084406,0.5039020125,0.9574089099,0.9505582221,0.8531143751,0.5968147409,0.7671717149,0.6130312048,0.5297381685,0.2286378199,0.5605443947,,,
|
||||
0.6875000000,0.7500000000,0.4502677126,0.6962080926,0.9128074497,0.9560164253,0.5328638772,0.6530740836,0.5206698487,0.6608048354,0.9682086594,0.7272667042,0.7281186825,0.7904959833,0.6054920864,0.3392744095,0.9816954136,0.4714308141,0.7494125855,0.4109848249,0.5571885267,0.2632726908,0.3619709597,0.6431256575,0.1007609386,0.5941922080,0.1839554398,0.1205380186,0.6594694795,0.5689522501,0.7585891197,0.0885437687,0.8536296941,0.9312499978,0.2541364124,0.2946735977,0.8706164521,0.2156441705,0.4842425361,0.0775878394,0.2993731557,0.3703004594,0.6341408147,0.2738721366,0.7811928024,0.8346063448,0.1437354498,0.0004676401,0.6384254163,0.1001991194,0.8084309287,0.4829823931,0.6235495135,0.6840985361,0.5825826777,0.4171131444,0.9870282889,0.4105823603,0.0424702668,0.1073548275,0.4047930092,0.1203739478,0.0799161086,0.5006264041,0.8482475453,0.0656195192,0.8408296867,0.7487304423,0.4552003471,0.5083866168,0.1740615570,0.7433071290,0.5747186900,0.0638115588,0.9728865607,0.9231198416,0.7971369165,0.6765650478,0.6986605374,0.7186565769,0.1736776924,0.7956658397,0.0595004379,0.2578393670,0.1223583464,0.6965204566,0.9839389042,0.4421050667,0.9041193023,0.0998137125,0.4093976771,0.5090963494,0.7166604474,0.0551742224,0.7656437296,0.7981080476,0.7131274240,0.5406918994,0.5702210369,0.6819301986,0.2822982909,0.3520181263,0.4362103776,0.6040338485,0.5987478618,0.7429419127,0.5714071004,0.3471043196,0.8102124687,0.9587924071,0.9729605387,0.9780838832,0.8904455733,0.1768353251,0.7486089289,0.9994414682,0.5787694799,0.7188671927,0.0136518653,0.7794517821,0.6122001191,0.0007004540,0.1763693239,0.1010190644,0.1266606206,0.8490937916,0.9316227492,0.8406871033,0.6580100090,0.9750389399,,,
|
||||
0.7500000000,0.8125000000,0.6597400920,0.5885838564,0.7857646004,0.7503551356,0.4718447104,0.0866925118,0.9197117689,0.9950628248,0.0295223645,0.2836865839,0.1586640773,0.8000291912,0.6616069386,0.6563964463,0.4465203935,0.7396615332,0.6076592195,0.3238815712,0.9824488070,0.9728015682,0.0520980426,0.3060984754,0.2858697739,0.1975828628,0.1253559410,0.4791424333,0.2798632411,0.1617351994,0.7534016052,0.6404544087,0.7733843811,0.7188167234,0.1894933190,0.4043975784,0.6941734480,0.0172624579,0.3868409907,0.4395070625,0.5897659294,0.3081313299,0.0892954457,0.3226943829,0.7103347299,0.2233194252,0.8322126665,0.3709399267,0.8143146322,0.6909234507,0.6461562880,0.5830114598,0.4852226414,0.7865708459,0.8036368454,0.4828703813,0.5373617639,0.5900660907,0.6904538674,0.0138230971,0.2490095489,0.7393181478,0.2877402762,0.4513432579,0.5680671209,0.6436918143,0.5406705167,0.6813580187,0.9233717178,0.3238394572,0.5844412202,0.9236779967,0.2737147608,0.5797183521,0.8608876099,0.8776531208,0.2443616646,0.2432832436,0.6981052044,0.7365806326,0.8849672999,0.4853381920,0.5449085427,0.8669738255,0.4942614299,0.9243413096,0.1794794516,0.3754306738,0.6883994963,0.5418054187,0.1381584327,0.6953644182,0.7411244428,0.7460892559,0.2731044050,0.0488576868,0.5011982922,0.6577869877,0.7627640630,0.0236888060,0.7711321849,0.3902818810,0.4297669264,0.1559308341,0.5210048554,0.3863513316,0.6484974532,0.0608827656,0.7043687252,0.6244241684,0.1403175246,0.5562529312,0.2631591787,0.9759852611,0.2841610499,0.6501125291,0.1502811159,0.3001988607,0.9586796160,0.4451140123,0.0647737177,0.6377006297,0.1423613841,0.1523039597,0.9474527435,0.9598131562,0.9461015512,0.0085723544,0.6874726999,0.3356614353,,,
|
||||
0.8125000000,0.8750000000,0.4951484718,0.4137571189,0.0569000966,0.4288186433,0.7854072719,0.4143841334,0.0244760385,0.6809264892,0.6102338028,0.3421895124,0.0523749369,0.7298694055,0.4134743935,0.9069422120,0.0255988901,0.0171017484,0.8945272362,0.8478161518,0.7934845393,0.2360887395,0.1801714411,0.0021404293,0.9694124160,0.3984161261,0.8861893385,0.7274739528,0.1838548863,0.8699946168,0.9781448101,0.7100307504,0.6141936865,0.7610268604,0.4235622173,0.9017294946,0.1870069781,0.8541975934,0.6132133221,0.8906224929,0.6807086817,0.1879235532,0.8673600175,0.6300860762,0.5366717121,0.0550985967,0.5221361807,0.1448409907,0.4561040732,0.2083544936,0.0413183626,0.4696824565,0.0332377399,0.4693293732,0.1898895621,0.9431418541,0.8067416335,0.2638124076,0.6924453792,0.2537440723,0.4020697493,0.4863762164,0.1145292672,0.2213524713,0.3857528327,0.0674968564,0.8121729761,0.2750603121,0.0802166942,0.7938963389,0.9176716192,0.4196322735,0.2388986130,0.9978474600,0.9629005950,0.0735100827,0.9331875124,0.3795208391,0.3922109492,0.5588367411,0.7617001452,0.4730127715,0.9087597590,0.1599815958,0.8977322627,0.7852105810,0.8837358134,0.9391245898,0.5956780913,0.3008686816,0.4643168407,0.8793222804,0.3512133467,0.3835873082,0.2839328232,0.4700245983,0.9630959777,0.2224663049,0.2382329085,0.2103578080,0.0583997120,0.5361932365,0.8401390389,0.8651594589,0.9916231507,0.5314276395,0.8768030803,0.0018314875,0.5376906672,0.0867553214,0.4225539663,0.8168300600,0.2191769166,0.7114649462,0.9731043351,0.4109111931,0.5946094589,0.7635395932,0.5573117547,0.9749870342,0.6840263985,0.3520052256,0.1577927826,0.5355608661,0.0733829080,0.5503560782,0.6984678828,0.6332150383,0.1281256950,0.6934248279,,,
|
||||
0.8750000000,0.9375000000,0.8262026000,0.6800406706,0.8230532890,0.3312053366,0.0791727190,0.3375838087,0.6164910560,0.0553016283,0.9159938979,0.1167176482,0.9642385286,0.4662711693,0.0860841114,0.0288988317,0.8278238336,0.0034026832,0.3953088420,0.9177478116,0.4092492419,0.8913496369,0.0257779597,0.4760923833,0.6182677727,0.3230207954,0.6945901709,0.1895992311,0.2035093841,0.4018307636,0.0753713418,0.5057941203,0.8654059754,0.9612625141,0.6113119549,0.3052270464,0.0034051070,0.8834864479,0.6637033250,0.7753436505,0.6367439146,0.5068913791,0.0499874779,0.3682553454,0.3032939732,0.8526346046,0.0017702775,0.5300046704,0.4208789961,0.9453098350,0.8475046742,0.5859889074,0.8497315217,0.5927666053,0.8303499359,0.6969741047,0.6246392576,0.7579033028,0.5919736151,0.4604226539,0.3722940462,0.3175512927,0.0381294147,0.3514439941,0.5384543089,0.2421207936,0.5818590294,0.2106211025,0.1699498768,0.8333654262,0.3050256937,0.1657615656,0.0624764247,0.4779500451,0.7039530529,0.9742760058,0.5458899166,0.3053509365,0.4714929876,0.9861352115,0.2831235216,0.5417119283,0.9501627218,0.8269119393,0.5411800570,0.5915424312,0.9224375067,0.0019667454,0.4485846600,0.5964546783,0.4705979887,0.6997977437,0.0705102577,0.3015512920,0.7767169708,0.0310898924,0.6572577641,0.0498077215,0.2139518764,0.0282647032,0.5614815420,0.1199005472,0.6160741956,0.9559962109,0.0472760913,0.2162385259,0.7890758167,0.4775436576,0.5490116121,0.6907650672,0.1988431036,0.3623787200,0.6748607692,0.5622677719,0.8651337281,0.2889742211,0.8135919487,0.8080134841,0.9803157884,0.8661532071,0.4301462041,0.9604776879,0.9575312759,0.6211291603,0.0602738846,0.6445526120,0.3997429844,0.5335842420,0.2354770997,0.5703356166,,,
|
||||
0.9375000000,1.0000000000,0.1679284181,0.0116292820,0.6713393128,0.7051338786,0.5834520799,0.7177573889,0.3392238002,0.1346499354,0.5625305925,0.5137179869,0.5924138909,0.3562407838,0.2652642194,0.8141605475,0.9288930635,0.2231001314,0.1750653218,0.3136353311,0.6481592141,0.1982572724,0.9394587332,0.3204006592,0.0444805650,0.2147457984,0.1614268553,0.5942634724,0.0950823138,0.3600166386,0.8212693390,0.5074280743,0.2752121019,0.1186141570,0.8331678393,0.1588774454,0.3326816757,0.5071129550,0.6412843384,0.0316611044,0.2856399296,0.7435067382,0.7493902263,0.1525118365,0.9138491044,0.2386630971,0.0203620240,0.0533332997,0.0798282519,0.0691285226,0.3476698725,0.8917724602,0.2301328648,0.8593468245,0.4296178813,0.6222921708,0.0249198619,0.5999211350,0.6120050943,0.6154593697,0.8989983436,0.7112358140,0.8779653690,0.4389945539,0.0551658797,0.1381868846,0.9138693274,0.5621938761,0.2863271981,0.7325413090,0.5425972489,0.5751449321,0.3509974892,0.6927378860,0.7835192583,0.2844782392,0.6382476424,0.7061826356,0.7370361837,0.6226274676,0.2088809009,0.2935124915,0.3513496004,0.5787265806,0.6042397721,0.5171754735,0.4450626483,0.8866352371,0.6589918823,0.2202287668,0.0976188593,0.4164506367,0.6294516746,0.7863249348,0.6679730897,0.5078839634,0.2269497360,0.3440359347,0.7772970388,0.9805411990,0.1963203617,0.2991644875,0.0454477593,0.8594248760,0.8639521245,0.0693449832,0.2472545162,0.8444152090,0.9585070037,0.0225089605,0.4990623794,0.7584918430,0.2985699803,0.4827716728,0.9824672064,0.0915980614,0.5346251470,0.8658588289,0.5071282431,0.4654764065,0.6182458180,0.6156599661,0.6460136580,0.1110876829,0.8671845864,0.4022050030,0.3074841262,0.6642128383,0.0014574521,0.6935462605,,,
|
||||
1.0000000000,1.0625000000,0.2137309904,0.4544911664,0.6798921563,0.4921943266,0.3362297001,0.2847381542,0.6437950153,0.9383269558,0.1397160820,0.4575725703,0.7571243041,0.6186974405,0.8074270575,0.3774803712,0.1769097759,0.4871998692,0.9569660802,0.6593258211,0.0758621178,0.1879452108,0.4906961091,0.3218933593,0.2431967803,0.8575711269,0.2750979303,0.2216316864,0.4766704070,0.4577354111,0.2064776726,0.2724582830,0.0749704337,0.3832853076,0.8018044159,0.6921387615,0.9921656852,0.4057687074,0.0617558532,0.2327312671,0.5771559153,0.2284900285,0.0590479346,0.2758173042,0.9457325011,0.6647606222,0.0981595817,0.2590912562,0.8130702917,0.6360369716,0.9462671543,0.0010640700,0.1375384575,0.3707128139,0.3092900361,0.9429778690,0.6217287686,0.4192660332,0.6812241087,0.7129155374,0.9818436850,0.6350809271,0.2476287666,0.9715665514,0.1205336715,0.0928393225,0.0088279590,0.6031203971,0.6596260488,0.1443080404,0.1546425293,0.9326476485,0.5288438348,0.0169140310,0.8668725954,0.4123998375,0.3775879829,0.5326866286,0.9242688494,0.4422083166,0.3069048850,0.1539458423,0.4144589426,0.7776402466,0.8601672621,0.7430550803,0.8074781313,0.0557779926,0.5821805752,0.2611693509,0.4422279357,0.3827645087,0.9467565422,0.2880943024,0.2826895297,0.5138747173,0.9742166633,0.3376196956,0.3516322491,0.2682236054,0.0347050410,0.8784039379,0.2282802360,0.5318389740,0.6525104714,0.3306392352,0.0701013329,0.6777035065,0.5854775421,0.8512900607,0.0913615956,0.2934230366,0.4679984997,0.2476933554,0.3031436063,0.9276851357,0.4689371770,0.7340950945,0.1723134439,0.7710931241,0.9103395792,0.9875814451,0.6239819005,0.5243784036,0.2998705199,0.7308793671,0.6511168599,0.2998312942,0.4789863380,0.2999395356,,,
|
||||
1.0625000000,1.1250000000,0.5931908898,0.7309124726,0.1353090142,0.7283182526,0.0488233604,0.6919248875,0.5654962317,0.5891109256,0.1122994891,0.4159194189,0.3764929147,0.9494192691,0.3878915668,0.1244349491,0.8175409115,0.9035466295,0.2931364391,0.8594305085,0.1912104939,0.5639044710,0.7228399697,0.1977252481,0.1863250257,0.1408073560,0.8027174983,0.4142429589,0.1808046964,0.0125501421,0.6471301608,0.4860138474,0.6514314555,0.5628913341,0.8644442572,0.5552712027,0.0151265447,0.2374828074,0.8766233369,0.2438984078,0.3027490238,0.5001187921,0.7108031833,0.6028569383,0.0546991809,0.4225322115,0.9588101294,0.4600294342,0.9185105995,0.8249672593,0.0892420548,0.6061045709,0.7207820001,0.0026756388,0.4786440204,0.5467939766,0.0654323131,0.7286043169,0.7861308276,0.3410324152,0.3520775896,0.1542424636,0.5819967657,0.2966403281,0.4022705988,0.5724041392,0.5939434061,0.4567232542,0.0375771916,0.2087124737,0.1880471830,0.8748202738,0.5906794223,0.2287169953,0.3570454933,0.4300619953,0.0100690452,0.1438734650,0.1549616663,0.5758979041,0.0461017075,0.7165612974,0.5656311857,0.6070347405,0.9116860381,0.3978753891,0.5053920399,0.6122428069,0.0281106522,0.7027764153,0.8615361010,0.5020784172,0.2611516425,0.4710602802,0.2577258444,0.3572090822,0.9675099622,0.1586091609,0.1901043819,0.9543702262,0.5918874820,0.8989631108,0.9625966987,0.5375990241,0.6290122089,0.1784213777,0.4204781046,0.5288314561,0.3349709855,0.9483079254,0.2088262488,0.5261074379,0.6237077352,0.0479094042,0.7611453154,0.2613925296,0.9345898028,0.8540216177,0.5429263390,0.0596870789,0.1228484851,0.9884465558,0.5994056747,0.5901793416,0.3197100651,0.8187572497,0.7597195588,0.5117904092,0.6303460039,0.6385685280,,,
|
||||
1.1250000000,1.1875000000,0.0951258531,0.7277233065,0.6006643453,0.0228086452,0.8239419067,0.5155266635,0.0191960505,0.3796252070,0.5055223757,0.4020866172,0.5189295192,0.0753156706,0.9720687266,0.0484040140,0.7843413458,0.9730091204,0.9922290591,0.0851901833,0.3296290701,0.0377371099,0.6281560692,0.6815555356,0.5792539178,0.4853602059,0.6556749332,0.0062036244,0.3974684728,0.1654793920,0.3105455413,0.9249097810,0.2598673194,0.8876951223,0.2350130558,0.3901448085,0.2341265944,0.3637975010,0.5625018100,0.9029143190,0.3544837306,0.1279784262,0.8366534521,0.3101605135,0.7163888747,0.0583991115,0.2954969504,0.4429354239,0.1804037238,0.2439929745,0.9335751345,0.0057892075,0.4619030475,0.2931784280,0.1797548921,0.5020443008,0.2883011773,0.3374369312,0.9279700841,0.3887938145,0.2170151267,0.9179955407,0.6340869551,0.5557600548,0.7435555537,0.2839753202,0.2662001683,0.6706366031,0.7547104494,0.8550751107,0.7688080396,0.0586293077,0.7804771422,0.4787573102,0.6632498137,0.0741167834,0.0048650759,0.8381817841,0.4810157609,0.6855519353,0.0104576417,0.7910236670,0.6425741296,0.9244767239,0.4864446763,0.0067145957,0.9369897931,0.4404468786,0.2032674944,0.3744280310,0.9855825459,0.1193840445,0.8631986284,0.5556113927,0.9572339943,0.4989517976,0.9710160899,0.2522383390,0.4253497068,0.7571807946,0.9246740653,0.2222794134,0.1579823359,0.0243675769,0.2997759597,0.2323811688,0.0305091403,0.2917462506,0.2403668212,0.5604984399,0.4182756997,0.7232471572,0.2699862767,0.9507088428,0.6559072356,0.9839131341,0.4760734998,0.7222971332,0.7723106057,0.8132286537,0.7292613545,0.5869136585,0.8191143919,0.5913443926,0.7021092409,0.5089733775,0.6504381110,0.2708367638,0.7500082653,0.6161660077,,,
|
||||
1.1875000000,1.2500000000,0.1683035602,0.1424043456,0.7668608918,0.7607295110,0.5174434430,0.1944848874,0.5707954851,0.6883187809,0.7862345560,0.3534223591,0.0046566047,0.8831072131,0.8692115010,0.8142559922,0.6493804462,0.2158862920,0.4540214015,0.1944293983,0.5699003865,0.4442949190,0.7955052461,0.0413213808,0.1306964061,0.2713446848,0.3018432979,0.2247307675,0.5835549848,0.0824868602,0.0957095684,0.9983673533,0.2957036200,0.2246049009,0.8470544151,0.8808483067,0.9845280973,0.4677556294,0.6242646559,0.2264174577,0.2684859056,0.6608157074,0.0302796764,0.1580758188,0.1085000942,0.5066947001,0.9121542578,0.8649886900,0.4107301729,0.6955318693,0.8209484203,0.4312713409,0.4673444098,0.7952723317,0.8295831063,0.8415844627,0.6199640527,0.4139429175,0.3483000207,0.0775644176,0.5936895902,0.2502907016,0.2399989681,0.4271952116,0.9239734123,0.1219773670,0.0943703118,0.6653878638,0.8019994879,0.9259957087,0.2431919265,0.9921174757,0.9230932575,0.1104911843,0.8744879481,0.1063987957,0.4028745531,0.7043685114,0.6735291812,0.0341512391,0.6810112968,0.5630981151,0.2024573432,0.1054956890,0.6937220371,0.6657904771,0.2473630700,0.0166703118,0.5132303271,0.2155902667,0.7550028116,0.4930060136,0.2008083768,0.1790083253,0.5938848599,0.0768408582,0.3858271067,0.6740172072,0.0841419913,0.9335749368,0.3200270960,0.2295888106,0.9300683755,0.4034733148,0.1734928533,0.7465751641,0.3203449501,0.0854344415,0.0025144017,0.5991113116,0.4523527375,0.6149762333,0.0270627474,0.4228744288,0.3947751317,0.0639017015,0.3141180936,0.4396834220,0.2421118172,0.1722038793,0.3533720416,0.7971124125,0.6941583254,0.5414881702,0.1323242220,0.4963991921,0.9385722023,0.7164676930,0.8498095335,0.5222759610,,,
|
||||
|
+461
@@ -0,0 +1,461 @@
|
||||
<OpenViBE-Scenario>
|
||||
<FormatVersion>1</FormatVersion>
|
||||
<Creator>openvibe</Creator>
|
||||
<CreatorVersion>2.0</CreatorVersion>
|
||||
<Boxes>
|
||||
<Box>
|
||||
<Identifier>(0x00000202, 0x000037d1)</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_Label_00</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>272.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
|
||||
<Value>33</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>544.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x1eaee00e, 0xdb05d34e)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
|
||||
<Value>62</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x00c63011)</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>
|
||||
<Box>
|
||||
<Identifier>(0x0000151d, 0x000049b2)</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>352.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
|
||||
<Value>23</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>560.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x568d148e, 0x650792b3)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
|
||||
<Value>118</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x00506ff2)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc67a01dc, 0x28ce06c1)</Identifier>
|
||||
<Value></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>(0x0000324c, 0x0000225d)</Identifier>
|
||||
<Name>Generic stream reader</Name>
|
||||
<AlgorithmClassIdentifier>(0x6468099f, 0x0370095a)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x403488e7, 0x565d70b6)</TypeIdentifier>
|
||||
<Name>Output stream 1</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Output stream 2</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Output stream 3</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value>${Path_Data}/scenarios/signals/bci-motor-imagery.ov</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>160.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
|
||||
<Value>33</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>384.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x30a4e5c9, 0x83502953)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xf37b8e7a, 0x1bc33e4e)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
|
||||
<Value>153</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x011072bc)</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>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00006172, 0x00004577)</Identifier>
|
||||
<Name>Generic stream writer</Name>
|
||||
<AlgorithmClassIdentifier>(0x09c92218, 0x7c1216f8)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x403488e7, 0x565d70b6)</TypeIdentifier>
|
||||
<Name>Input stream 1</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Input stream 2</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Input stream 3</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename</Name>
|
||||
<DefaultValue>record-[$core{date}-$core{time}].ov</DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/output_ov.ov</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Use compression</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>271.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
|
||||
<Value>33</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>368.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x89a08108, 0xc8d1fac1)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
|
||||
<Value>149</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x0067854b)</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>
|
||||
<Attribute>
|
||||
<Identifier>(0xfba64161, 0x65304e21)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
</Boxes>
|
||||
<Links>
|
||||
<Link>
|
||||
<Identifier>(0x000023a7, 0x000067cc)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x0000324c, 0x0000225d)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00006172, 0x00004577)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
|
||||
<Value>183</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
|
||||
<Value>369</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
|
||||
<Value>250</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
|
||||
<Value>353</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00002c67, 0x0000333d)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00000202, 0x000037d1)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x0000151d, 0x000049b2)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
|
||||
<Value>295</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
|
||||
<Value>544</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
|
||||
<Value>336</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
|
||||
<Value>560</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00003c24, 0x00006028)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x0000324c, 0x0000225d)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00000202, 0x000037d1)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
|
||||
<Value>183</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
|
||||
<Value>384</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
|
||||
<Value>251</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
|
||||
<Value>544</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00003da7, 0x00003850)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x0000324c, 0x0000225d)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00006172, 0x00004577)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
|
||||
<Value>183</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
|
||||
<Value>384</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
|
||||
<Value>250</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
|
||||
<Value>368</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000064a1, 0x00002aca)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x0000324c, 0x0000225d)</BoxIdentifier>
|
||||
<BoxOutputIndex>2</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00006172, 0x00004577)</BoxIdentifier>
|
||||
<BoxInputIndex>2</BoxInputIndex>
|
||||
</Target>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
|
||||
<Value>183</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
|
||||
<Value>399</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
|
||||
<Value>250</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
|
||||
<Value>383</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Link>
|
||||
</Links>
|
||||
<Comments></Comments>
|
||||
<Metadata>
|
||||
<Entry>
|
||||
<Identifier>(0x0000775c, 0x000078ff)</Identifier>
|
||||
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
|
||||
<Data>[{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":320,"identifier":"(0x00005e4f, 0x0000778d)","index":0,"name":"Default window","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":480},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x000002a5, 0x00000056)","index":0,"name":"Default tab","parentIdentifier":"(0x00005e4f, 0x0000778d)","type":2},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":0,"identifier":"(0x00000006, 0x0000559d)","index":0,"name":"Empty","parentIdentifier":"(0x000002a5, 0x00000056)","type":0}]</Data>
|
||||
</Entry>
|
||||
</Metadata>
|
||||
</OpenViBE-Scenario>
|
||||
+774
@@ -0,0 +1,774 @@
|
||||
<OpenViBE-Scenario>
|
||||
<FormatVersion>2</FormatVersion>
|
||||
<Creator>OpenViBE Designer</Creator>
|
||||
<CreatorVersion>2.2.0</CreatorVersion>
|
||||
<Settings></Settings>
|
||||
<Inputs></Inputs>
|
||||
<Outputs></Outputs>
|
||||
<Boxes>
|
||||
<Box>
|
||||
<Identifier>(0x000010ee, 0x00000f43)</Identifier>
|
||||
<Name>Time signal</Name>
|
||||
<AlgorithmClassIdentifier>(0x28a5e7ff, 0x530095de)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Generated signal</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<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>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>0</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>480</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x9e5ca01e, 0x30a4d8c3)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x003e288b)</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>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00002a9c, 0x00003199)</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>1</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>0</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>624</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x0b214ed8, 0x1f9ad83a)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x003e2e6b)</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>4</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00002e97, 0x00004732)</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>288</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>752</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x568d148e, 0x650792b3)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x0055a758)</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>(0x00003129, 0x00004d80)</Identifier>
|
||||
<Name>CSV File Writer</Name>
|
||||
<AlgorithmClassIdentifier>(0x428375e8, 0x325f2db9)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</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}/output_gdf_signal_1.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>272</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>592</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>(0x0000313b, 0x000003b1)</Identifier>
|
||||
<Name>Clock stimulator</Name>
|
||||
<AlgorithmClassIdentifier>(0x4f756d3f, 0x29ff0b96)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Generated stimulations</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Interstimulation interval (in sec)</Name>
|
||||
<DefaultValue>1.0</DefaultValue>
|
||||
<Value>10</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
|
||||
<Name>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>240</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>752</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x27b3ee3c, 0xc50527e6)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x00530bb1)</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>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x000051d4, 0x00007353)</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>sin(2*M_PI*x)</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>64</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>480</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, 0x0052d6f5)</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>(0x00005f81, 0x00000200)</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>0 ? 1 : -1</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>112</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>576</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, 0x004d47d5)</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>(0x000060ec, 0x00005ffa)</Identifier>
|
||||
<Name>Sign Change Detector</Name>
|
||||
<AlgorithmClassIdentifier>(0x04fa78cd, 0xafe45de7)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x544a003e, 0x6dcba5f6)</TypeIdentifier>
|
||||
<Name>Signal</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Generated stimulations</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
|
||||
<Name>Sign switch to positive stimulation</Name>
|
||||
<DefaultValue>OVTK_StimulationId_Label_01</DefaultValue>
|
||||
<Value>OVTK_StimulationId_Label_01</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
|
||||
<Name>Sign switch to negative stimulation</Name>
|
||||
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
|
||||
<Value>OVTK_StimulationId_Label_00</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Channel Index</Name>
|
||||
<DefaultValue>1</DefaultValue>
|
||||
<Value>1</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>176</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>448</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x13bdcd99, 0x9faeff20)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x004e4978)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>false</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00006b47, 0x0000126c)</Identifier>
|
||||
<Name>Stimulation listener</Name>
|
||||
<AlgorithmClassIdentifier>(0x65731e1d, 0x47de5276)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulation stream 1</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xa88b3667, 0x0871638c)</TypeIdentifier>
|
||||
<Name>Log level to use</Name>
|
||||
<DefaultValue>Debug</DefaultValue>
|
||||
<Value>Information</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>272</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>448</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xf451ad91, 0x14c75f86)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x169d0f00)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>true</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>(0x00006c41, 0x000069fe)</Identifier>
|
||||
<Name>Signal Merger</Name>
|
||||
<AlgorithmClassIdentifier>(0x4bf9326f, 0x75603102)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Input 1</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Input 2</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Input 3</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Merged</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>208</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>608</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x990c5a68, 0x0d4024a3)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x0078b3c2)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>false</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>
|
||||
</Boxes>
|
||||
<Links>
|
||||
<Link>
|
||||
<Identifier>(0x0000149c, 0x00004529)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000051d4, 0x00007353)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000060ec, 0x00005ffa)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000026a9, 0x00005797)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000051d4, 0x00007353)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00006c41, 0x000069fe)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00002c3a, 0x00003a7d)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000051d4, 0x00007353)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00005f81, 0x00000200)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00003eca, 0x00007fbf)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00006c41, 0x000069fe)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00003129, 0x00004d80)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000043e3, 0x000019b2)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000010ee, 0x00000f43)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000051d4, 0x00007353)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00004c38, 0x000032a2)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00005f81, 0x00000200)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00006c41, 0x000069fe)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000058da, 0x000053ab)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x0000313b, 0x000003b1)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00002e97, 0x00004732)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00005960, 0x00007f8c)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00002a9c, 0x00003199)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00006c41, 0x000069fe)</BoxIdentifier>
|
||||
<BoxInputIndex>2</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00005a5c, 0x00001a5e)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000060ec, 0x00005ffa)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00003129, 0x00004d80)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00007b01, 0x00006958)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000060ec, 0x00005ffa)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00006b47, 0x0000126c)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
</Links>
|
||||
<Comments></Comments>
|
||||
<Metadata>
|
||||
<Entry>
|
||||
<Identifier>(0x0000775c, 0x000078ff)</Identifier>
|
||||
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
|
||||
<Data>[{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":320,"identifier":"(0x000006d6, 0x000042bc)","name":"Default window","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":480},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x00006d3f, 0x00004ccb)","index":0,"name":"Default tab","parentIdentifier":"(0x000006d6, 0x000042bc)","type":2},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":0,"identifier":"(0x000063d3, 0x000044f0)","index":0,"name":"Empty","parentIdentifier":"(0x00006d3f, 0x00004ccb)","type":0}]</Data>
|
||||
</Entry>
|
||||
</Metadata>
|
||||
</OpenViBE-Scenario>
|
||||
+361
@@ -0,0 +1,361 @@
|
||||
<OpenViBE-Scenario>
|
||||
<FormatVersion>2</FormatVersion>
|
||||
<Creator>OpenViBE Designer</Creator>
|
||||
<CreatorVersion>2.2.0</CreatorVersion>
|
||||
<Settings></Settings>
|
||||
<Inputs></Inputs>
|
||||
<Outputs></Outputs>
|
||||
<Boxes>
|
||||
<Box>
|
||||
<Identifier>(0x00002949, 0x00002732)</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>320</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>688</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x568d148e, 0x650792b3)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x0097c514)</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>(0x0000363b, 0x0000180e)</Identifier>
|
||||
<Name>GDF file writer</Name>
|
||||
<AlgorithmClassIdentifier>(0x1e7b2155, 0x107289ce)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x403488e7, 0x565d70b6)</TypeIdentifier>
|
||||
<Name>Experiment information</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Signal</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulation</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename</Name>
|
||||
<DefaultValue>record-[$core{date}-$core{time}].gdf</DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/output_gdf_combined.gdf</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>256</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>768</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xd41e3037, 0xcc12644a)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x03a62eec)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>false</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x000048cb, 0x0000494c)</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>5</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>256</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>688</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x1eaee00e, 0xdb05d34e)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x00e10619)</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>
|
||||
<Box>
|
||||
<Identifier>(0x00005458, 0x00003d39)</Identifier>
|
||||
<Name>CSV File Reader</Name>
|
||||
<AlgorithmClassIdentifier>(0x336a3d9a, 0x753f1ba4)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</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}/output_gdf_signal_1.csv</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>176</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>768</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>(0x00006b47, 0x0000126c)</Identifier>
|
||||
<Name>Stimulation listener</Name>
|
||||
<AlgorithmClassIdentifier>(0x65731e1d, 0x47de5276)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulation stream 1</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xa88b3667, 0x0871638c)</TypeIdentifier>
|
||||
<Name>Log level to use</Name>
|
||||
<DefaultValue>Debug</DefaultValue>
|
||||
<Value>Information</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>256</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>880</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xf451ad91, 0x14c75f86)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x00a962bf)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>true</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>
|
||||
</Boxes>
|
||||
<Links>
|
||||
<Link>
|
||||
<Identifier>(0x00000b3e, 0x000011ac)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00005458, 0x00003d39)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x0000363b, 0x0000180e)</BoxIdentifier>
|
||||
<BoxInputIndex>2</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00001d98, 0x00006812)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00005458, 0x00003d39)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000048cb, 0x0000494c)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000048b0, 0x00004413)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00005458, 0x00003d39)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00006b47, 0x0000126c)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00005ab1, 0x000027de)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00005458, 0x00003d39)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x0000363b, 0x0000180e)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00007a18, 0x00002c1a)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000048cb, 0x0000494c)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00002949, 0x00002732)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
</Links>
|
||||
<Comments></Comments>
|
||||
<Metadata>
|
||||
<Entry>
|
||||
<Identifier>(0x0000775c, 0x000078ff)</Identifier>
|
||||
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
|
||||
<Data>[{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":1,"identifier":"(0x00002156, 0x00001f07)","name":"Default window","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":1},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x00004621, 0x0000257e)","index":0,"name":"Default tab","parentIdentifier":"(0x00002156, 0x00001f07)","type":2},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":0,"identifier":"(0x000029d1, 0x0000144d)","index":0,"name":"Empty","parentIdentifier":"(0x00004621, 0x0000257e)","type":0}]</Data>
|
||||
</Entry>
|
||||
</Metadata>
|
||||
</OpenViBE-Scenario>
|
||||
+506
@@ -0,0 +1,506 @@
|
||||
<OpenViBE-Scenario>
|
||||
<FormatVersion>2</FormatVersion>
|
||||
<Creator>OpenViBE Designer</Creator>
|
||||
<CreatorVersion>2.2.0</CreatorVersion>
|
||||
<Settings></Settings>
|
||||
<Inputs></Inputs>
|
||||
<Outputs></Outputs>
|
||||
<Boxes>
|
||||
<Box>
|
||||
<Identifier>(0x000024df, 0x00004773)</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>416</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, 0x0094624f)</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>(0x00002b18, 0x00003378)</Identifier>
|
||||
<Name>CSV File Writer</Name>
|
||||
<AlgorithmClassIdentifier>(0x428375e8, 0x325f2db9)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</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}/output_gdf_signal_2.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>352</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>816</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>(0x00005721, 0x00005795)</Identifier>
|
||||
<Name>GDF file reader</Name>
|
||||
<AlgorithmClassIdentifier>(0x3eeb1264, 0x4edfbd9a)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x403488e7, 0x565d70b6)</TypeIdentifier>
|
||||
<Name>Experiment information</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>EEG stream</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Filename</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/output_gdf_combined.gdf</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Samples per buffer</Name>
|
||||
<DefaultValue>32</DefaultValue>
|
||||
<Value>32</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Subtract physical minimum</Name>
|
||||
<DefaultValue>False</DefaultValue>
|
||||
<Value>False</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>176</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>751</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x78b8b69d, 0x27afe678)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x00cbd108)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>false</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00005caf, 0x000066ac)</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>5</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>720</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x1eaee00e, 0xdb05d34e)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x00d20fdd)</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>
|
||||
<Box>
|
||||
<Identifier>(0x00006b47, 0x0000126c)</Identifier>
|
||||
<Name>Stimulation listener</Name>
|
||||
<AlgorithmClassIdentifier>(0x65731e1d, 0x47de5276)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulation stream 1</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xa88b3667, 0x0871638c)</TypeIdentifier>
|
||||
<Name>Log level to use</Name>
|
||||
<DefaultValue>Debug</DefaultValue>
|
||||
<Value>Information</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>256</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>976</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xf451ad91, 0x14c75f86)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x00a1ff06)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>true</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>(0x0000712e, 0x00007cc9)</Identifier>
|
||||
<Name>Stimulation Filter</Name>
|
||||
<AlgorithmClassIdentifier>(0x02f96101, 0x5e647cb8)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Modified Stimulations</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x09e59e57, 0x8d4a553a)</TypeIdentifier>
|
||||
<Name>Default action</Name>
|
||||
<DefaultValue>Reject</DefaultValue>
|
||||
<Value>Select</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Time range begin</Name>
|
||||
<DefaultValue>0</DefaultValue>
|
||||
<Value>0</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Time range end</Name>
|
||||
<DefaultValue>0</DefaultValue>
|
||||
<Value>0</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x09e59e57, 0x8d4a553a)</TypeIdentifier>
|
||||
<Name>Action to perform</Name>
|
||||
<DefaultValue>Select</DefaultValue>
|
||||
<Value>Reject</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
|
||||
<Name>Stimulation range begin</Name>
|
||||
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
|
||||
<Value>OVTK_StimulationId_EndOfFile</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
|
||||
<Name>Stimulation range end</Name>
|
||||
<DefaultValue>OVTK_StimulationId_Label_0F</DefaultValue>
|
||||
<Value>OVTK_StimulationId_EndOfFile</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>256</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>848</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x47859b3f, 0x1dfdf5cd)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x61d11811, 0x71e65362)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x00a0f19a)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>false</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>6</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
</Boxes>
|
||||
<Links>
|
||||
<Link>
|
||||
<Identifier>(0x00000445, 0x00001295)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00005721, 0x00005795)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00002b18, 0x00003378)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x0000110b, 0x000036a4)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x0000712e, 0x00007cc9)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00002b18, 0x00003378)</BoxIdentifier>
|
||||
<BoxInputIndex>1</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00002cd6, 0x000055ea)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00005721, 0x00005795)</BoxIdentifier>
|
||||
<BoxOutputIndex>2</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x0000712e, 0x00007cc9)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x000031f7, 0x0000295d)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00005721, 0x00005795)</BoxIdentifier>
|
||||
<BoxOutputIndex>2</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00006b47, 0x0000126c)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x0000351e, 0x000069e9)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00005caf, 0x000066ac)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000024df, 0x00004773)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00006978, 0x00005007)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00005721, 0x00005795)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00005caf, 0x000066ac)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
</Links>
|
||||
<Comments></Comments>
|
||||
<Metadata>
|
||||
<Entry>
|
||||
<Identifier>(0x0000775c, 0x000078ff)</Identifier>
|
||||
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
|
||||
<Data>[{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":320,"identifier":"(0x000006d6, 0x000042bc)","name":"Default window","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":480},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x00006d3f, 0x00004ccb)","index":0,"name":"Default tab","parentIdentifier":"(0x000006d6, 0x000042bc)","type":2},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":0,"identifier":"(0x000063d3, 0x000044f0)","index":0,"name":"Empty","parentIdentifier":"(0x00006d3f, 0x00004ccb)","type":0}]</Data>
|
||||
</Entry>
|
||||
</Metadata>
|
||||
</OpenViBE-Scenario>
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+9217
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user