<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.biophysics.science.ru.nl/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lof</id>
	<title>biophysics - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.biophysics.science.ru.nl/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lof"/>
	<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/Special:Contributions/Lof"/>
	<updated>2026-08-21T22:18:44Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4938</id>
		<title>EXP programs</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4938"/>
		<updated>2026-08-17T07:51:02Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* EXP framework */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
EXP programs are MATLAB programs for each auditory lab with an RZ6 DSP. The software is based on the EXP framework. The EXP framework is a MATLAB toolbox developed by [[Ruurd Lof]]. The framework is a collection of classes and functions that are the basis for Lab programs. The toolbox is mainly programmed object oriented programming style. It is modular with respect to the hardware that can be used.&lt;br /&gt;
&lt;br /&gt;
Each lab program is created by defining a gui and a few sub classes of certain classes in the EXP framework.&lt;br /&gt;
&lt;br /&gt;
The following programs are available:&lt;br /&gt;
*TL_Program for the test lab&lt;br /&gt;
*PL_Program for the auditory perception lab (patient lab)&lt;br /&gt;
*EG_Program for the EEG/NIRS lab &lt;br /&gt;
*RA_Program for the auditory persuit lab (robot arm)&lt;br /&gt;
*VC_Program for the vestibular chair lab&lt;br /&gt;
&lt;br /&gt;
==EXP framework==&lt;br /&gt;
&lt;br /&gt;
The EXP framework consists of over 200 files and is written in the Object Oriented Programming (OOP) paradigm.&lt;br /&gt;
&lt;br /&gt;
The main classes in the EXP framework are:&lt;br /&gt;
&lt;br /&gt;
    EXP_programParameters&lt;br /&gt;
    EXP_hardwareSystems &lt;br /&gt;
    EXP_experiment&lt;br /&gt;
    EXP_recordingsHandler &lt;br /&gt;
    EXP_experimentPlayer&lt;br /&gt;
    EXP_guiHandler&lt;br /&gt;
    EXP_gui&lt;br /&gt;
&lt;br /&gt;
*These EXP_ classes and a few others are the templates for building a lab specific program. &lt;br /&gt;
&lt;br /&gt;
*All programs use the same GUI that is always responsive and displays sounds, sound locations, led locations and acquisition results for every trial.&lt;br /&gt;
&lt;br /&gt;
*In the GUI you select an .exp file specifies the whole experiment.&lt;br /&gt;
&lt;br /&gt;
*The program outputs a .mat file for every trial (and block) with a struct called &#039;trialInfo&#039;.&lt;br /&gt;
&lt;br /&gt;
*There is no need for the experimenter to do any Matlab programming.&lt;br /&gt;
&lt;br /&gt;
==Lab program example==&lt;br /&gt;
&lt;br /&gt;
An example of a Lab program is the TestLabProgram. All programs have the same basic structure:&lt;br /&gt;
&lt;br /&gt;
A few objects (TestLab classes are starting with TL_) are created in a fixed order and linked by passing references to the objects. &lt;br /&gt;
 &lt;br /&gt;
    programPar      = TL_programParameters;&lt;br /&gt;
    hardwareSystems = TL_hardwareSystems(programPar);                      &lt;br /&gt;
    experiment      = TL_experiment(programPar);             &lt;br /&gt;
    trialRecordings = TL_recordingsHandler(programPar, experiment, hardwareSystems);     &lt;br /&gt;
    player          = TL_experimentPlayer(hardwareSystems, trialRecordings, programPar, experiment);&lt;br /&gt;
    guiHandler      = TL_guiHandler(player, programPar, experiment, hardwareSystems);&lt;br /&gt;
&lt;br /&gt;
At last a GUI is launched with a link to the guihandler object.&lt;br /&gt;
    &lt;br /&gt;
    TL_Gui(guiHandler);&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4937</id>
		<title>EXP programs</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4937"/>
		<updated>2026-08-17T07:50:40Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Lab program example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
EXP programs are MATLAB programs for each auditory lab with an RZ6 DSP. The software is based on the EXP framework. The EXP framework is a MATLAB toolbox developed by [[Ruurd Lof]]. The framework is a collection of classes and functions that are the basis for Lab programs. The toolbox is mainly programmed object oriented programming style. It is modular with respect to the hardware that can be used.&lt;br /&gt;
&lt;br /&gt;
Each lab program is created by defining a gui and a few sub classes of certain classes in the EXP framework.&lt;br /&gt;
&lt;br /&gt;
The following programs are available:&lt;br /&gt;
*TL_Program for the test lab&lt;br /&gt;
*PL_Program for the auditory perception lab (patient lab)&lt;br /&gt;
*EG_Program for the EEG/NIRS lab &lt;br /&gt;
*RA_Program for the auditory persuit lab (robot arm)&lt;br /&gt;
*VC_Program for the vestibular chair lab&lt;br /&gt;
&lt;br /&gt;
==EXP framework==&lt;br /&gt;
&lt;br /&gt;
The EXP framework consists of over 200 files and is written in the Object Oriented Programming (OOP) paradigm.&lt;br /&gt;
&lt;br /&gt;
The main classes in the EXP framework are:&lt;br /&gt;
&lt;br /&gt;
    EXP_programParameters&lt;br /&gt;
    EXP_hardwareSystems &lt;br /&gt;
    EXP_experiment&lt;br /&gt;
    EXP_recordingsHandler &lt;br /&gt;
    EXP_experimentPlayer&lt;br /&gt;
    EXP_guiHandler&lt;br /&gt;
    EXP_gui&lt;br /&gt;
&lt;br /&gt;
*These EXP_ classes and a few others are the templates for building a lab specific program. &lt;br /&gt;
&lt;br /&gt;
*All programs use the same GUI that is always responsive and displays sounds, sound locations, led locations and acquisition results for every trial.&lt;br /&gt;
&lt;br /&gt;
*In the GUI you select an .exp file specifies the whole experiment.&lt;br /&gt;
&lt;br /&gt;
*The program outputs a .mat file for every trial (and block) with a struct called &#039;trialInfo&#039;.&lt;br /&gt;
&lt;br /&gt;
*There is no need for the experimenter to do any programming.&lt;br /&gt;
&lt;br /&gt;
==Lab program example==&lt;br /&gt;
&lt;br /&gt;
An example of a Lab program is the TestLabProgram. All programs have the same basic structure:&lt;br /&gt;
&lt;br /&gt;
A few objects (TestLab classes are starting with TL_) are created in a fixed order and linked by passing references to the objects. &lt;br /&gt;
 &lt;br /&gt;
    programPar      = TL_programParameters;&lt;br /&gt;
    hardwareSystems = TL_hardwareSystems(programPar);                      &lt;br /&gt;
    experiment      = TL_experiment(programPar);             &lt;br /&gt;
    trialRecordings = TL_recordingsHandler(programPar, experiment, hardwareSystems);     &lt;br /&gt;
    player          = TL_experimentPlayer(hardwareSystems, trialRecordings, programPar, experiment);&lt;br /&gt;
    guiHandler      = TL_guiHandler(player, programPar, experiment, hardwareSystems);&lt;br /&gt;
&lt;br /&gt;
At last a GUI is launched with a link to the guihandler object.&lt;br /&gt;
    &lt;br /&gt;
    TL_Gui(guiHandler);&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4936</id>
		<title>EXP programs</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4936"/>
		<updated>2026-08-17T07:48:17Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* EXP framework */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
EXP programs are MATLAB programs for each auditory lab with an RZ6 DSP. The software is based on the EXP framework. The EXP framework is a MATLAB toolbox developed by [[Ruurd Lof]]. The framework is a collection of classes and functions that are the basis for Lab programs. The toolbox is mainly programmed object oriented programming style. It is modular with respect to the hardware that can be used.&lt;br /&gt;
&lt;br /&gt;
Each lab program is created by defining a gui and a few sub classes of certain classes in the EXP framework.&lt;br /&gt;
&lt;br /&gt;
The following programs are available:&lt;br /&gt;
*TL_Program for the test lab&lt;br /&gt;
*PL_Program for the auditory perception lab (patient lab)&lt;br /&gt;
*EG_Program for the EEG/NIRS lab &lt;br /&gt;
*RA_Program for the auditory persuit lab (robot arm)&lt;br /&gt;
*VC_Program for the vestibular chair lab&lt;br /&gt;
&lt;br /&gt;
==EXP framework==&lt;br /&gt;
&lt;br /&gt;
The EXP framework consists of over 200 files and is written in the Object Oriented Programming (OOP) paradigm.&lt;br /&gt;
&lt;br /&gt;
The main classes in the EXP framework are:&lt;br /&gt;
&lt;br /&gt;
    EXP_programParameters&lt;br /&gt;
    EXP_hardwareSystems &lt;br /&gt;
    EXP_experiment&lt;br /&gt;
    EXP_recordingsHandler &lt;br /&gt;
    EXP_experimentPlayer&lt;br /&gt;
    EXP_guiHandler&lt;br /&gt;
    EXP_gui&lt;br /&gt;
&lt;br /&gt;
*These EXP_ classes and a few others are the templates for building a lab specific program. &lt;br /&gt;
&lt;br /&gt;
*All programs use the same GUI that is always responsive and displays sounds, sound locations, led locations and acquisition results for every trial.&lt;br /&gt;
&lt;br /&gt;
*In the GUI you select an .exp file specifies the whole experiment.&lt;br /&gt;
&lt;br /&gt;
*The program outputs a .mat file for every trial (and block) with a struct called &#039;trialInfo&#039;.&lt;br /&gt;
&lt;br /&gt;
*There is no need for the experimenter to do any programming.&lt;br /&gt;
&lt;br /&gt;
==Lab program example==&lt;br /&gt;
&lt;br /&gt;
An example of a Lab program is the TestLabProgram. All programs have the same basic structure:&lt;br /&gt;
&lt;br /&gt;
Six objects (TestLab classes are starting with TL_) are created in a fixed order and linked by passing references to the objects. &lt;br /&gt;
 &lt;br /&gt;
    programPar      = TL_programParameters;&lt;br /&gt;
    hardwareSystems = TL_hardwareSystems(programPar);                      &lt;br /&gt;
    experiment      = TL_experiment(programPar);             &lt;br /&gt;
    trialRecordings = TL_recordingsHandler(programPar, experiment, hardwareSystems);     &lt;br /&gt;
    player          = TL_experimentPlayer(hardwareSystems, trialRecordings, programPar, experiment);&lt;br /&gt;
    guihandler      = TL_guiHandler(player, programPar, experiment, hardwareSystems);&lt;br /&gt;
&lt;br /&gt;
At last a GUI is launched with a link to the guihandler object.&lt;br /&gt;
    &lt;br /&gt;
    TL_Gui(guihandler);&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4935</id>
		<title>EXP programs</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4935"/>
		<updated>2026-08-17T07:45:55Z</updated>

		<summary type="html">&lt;p&gt;Lof: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
EXP programs are MATLAB programs for each auditory lab with an RZ6 DSP. The software is based on the EXP framework. The EXP framework is a MATLAB toolbox developed by [[Ruurd Lof]]. The framework is a collection of classes and functions that are the basis for Lab programs. The toolbox is mainly programmed object oriented programming style. It is modular with respect to the hardware that can be used.&lt;br /&gt;
&lt;br /&gt;
Each lab program is created by defining a gui and a few sub classes of certain classes in the EXP framework.&lt;br /&gt;
&lt;br /&gt;
The following programs are available:&lt;br /&gt;
*TL_Program for the test lab&lt;br /&gt;
*PL_Program for the auditory perception lab (patient lab)&lt;br /&gt;
*EG_Program for the EEG/NIRS lab &lt;br /&gt;
*RA_Program for the auditory persuit lab (robot arm)&lt;br /&gt;
*VC_Program for the vestibular chair lab&lt;br /&gt;
&lt;br /&gt;
==EXP framework==&lt;br /&gt;
&lt;br /&gt;
The EXP framework consists of over 200 files and is written in the Object Oriented Programming (OOP) paradigm.&lt;br /&gt;
&lt;br /&gt;
The main classes in the EXP framework are:&lt;br /&gt;
&lt;br /&gt;
    EXP_programParameters&lt;br /&gt;
    EXP_hardwareSystems &lt;br /&gt;
    EXP_experiment&lt;br /&gt;
    EXP_recordingsHandler &lt;br /&gt;
    EXP_experimentPlayer&lt;br /&gt;
    EXP_guiHandler&lt;br /&gt;
    EXP_gui&lt;br /&gt;
&lt;br /&gt;
*All programs use the same GUI that is always responsive and displays sounds, sound locations, led locations and acquisition results for every trial.&lt;br /&gt;
&lt;br /&gt;
*In the GUI you select an .exp file specifies the whole experiment.&lt;br /&gt;
&lt;br /&gt;
*The program outputs a .mat file for every trial (and block) with a struct called &#039;trialInfo&#039;.&lt;br /&gt;
&lt;br /&gt;
*There is no need for the experimenter to do any programming.&lt;br /&gt;
&lt;br /&gt;
==Lab program example==&lt;br /&gt;
&lt;br /&gt;
An example of a Lab program is the TestLabProgram. All programs have the same basic structure:&lt;br /&gt;
&lt;br /&gt;
Six objects (TestLab classes are starting with TL_) are created in a fixed order and linked by passing references to the objects. &lt;br /&gt;
 &lt;br /&gt;
    programPar      = TL_programParameters;&lt;br /&gt;
    hardwareSystems = TL_hardwareSystems(programPar);                      &lt;br /&gt;
    experiment      = TL_experiment(programPar);             &lt;br /&gt;
    trialRecordings = TL_recordingsHandler(programPar, experiment, hardwareSystems);     &lt;br /&gt;
    player          = TL_experimentPlayer(hardwareSystems, trialRecordings, programPar, experiment);&lt;br /&gt;
    guihandler      = TL_guiHandler(player, programPar, experiment, hardwareSystems);&lt;br /&gt;
&lt;br /&gt;
At last a GUI is launched with a link to the guihandler object.&lt;br /&gt;
    &lt;br /&gt;
    TL_Gui(guihandler);&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4934</id>
		<title>EXP programs</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4934"/>
		<updated>2026-08-17T07:42:58Z</updated>

		<summary type="html">&lt;p&gt;Lof: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
EXP programs are MATLAB programs for each auditory lab with an RZ6 DSP. The software is based on the EXP framework. The EXP framework is a MATLAB toolbox developed by [[Ruurd Lof]]. The framework is a collection of classes and functions that are the basis for Lab programs. The toolbox is mainly programmed object oriented programming style. It is modular with respect to the hardware that can be used.&lt;br /&gt;
&lt;br /&gt;
Each lab program is created by defining a gui and a few sub classes of certain classes in the EXP framework.&lt;br /&gt;
&lt;br /&gt;
The following programs are available:&lt;br /&gt;
*TL_Program for the test lab&lt;br /&gt;
*PL_Program for the auditory perception lab (patient lab)&lt;br /&gt;
*EG_Program for the EEG/NIRS lab &lt;br /&gt;
*RA_Program for the auditory persuit lab (robot arm)&lt;br /&gt;
*VC_Program for the vestibular chair lab&lt;br /&gt;
&lt;br /&gt;
==EXP framework==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main classes in the EXP framework are:&lt;br /&gt;
&lt;br /&gt;
    EXP_programParameters&lt;br /&gt;
    EXP_hardwareSystems &lt;br /&gt;
    EXP_experiment&lt;br /&gt;
    EXP_recordingsHandler &lt;br /&gt;
    EXP_experimentPlayer&lt;br /&gt;
    EXP_guiHandler&lt;br /&gt;
    EXP_gui&lt;br /&gt;
&lt;br /&gt;
*All programs use the same GUI that is always responsive and displays sounds, sound locations, led locations and acquisition results for every trial.&lt;br /&gt;
&lt;br /&gt;
*In the GUI you select an .exp file specifies the whole experiment.&lt;br /&gt;
&lt;br /&gt;
*The program outputs a .mat file for every trial (and block) with a struct called &#039;trialInfo&#039;.&lt;br /&gt;
&lt;br /&gt;
*There is no need for the experimenter to do any programming.&lt;br /&gt;
&lt;br /&gt;
==Lab program example==&lt;br /&gt;
&lt;br /&gt;
An example of a Lab program is the TestLabProgram. All programs have the same basic structure:&lt;br /&gt;
&lt;br /&gt;
Six objects (TestLab classes are starting with TL_) are created in a fixed order and linked by passing references to the objects. &lt;br /&gt;
 &lt;br /&gt;
    programPar      = TL_programParameters;&lt;br /&gt;
    hardwareSystems = TL_hardwareSystems(programPar);                      &lt;br /&gt;
    experiment      = TL_experiment(programPar);             &lt;br /&gt;
    trialRecordings = TL_recordingsHandler(programPar, experiment, hardwareSystems);     &lt;br /&gt;
    player          = TL_experimentPlayer(hardwareSystems, trialRecordings, programPar, experiment);&lt;br /&gt;
    guihandler      = TL_guiHandler(player, programPar, experiment, hardwareSystems);&lt;br /&gt;
&lt;br /&gt;
At last a GUI is launched with a link to the guihandler object.&lt;br /&gt;
    &lt;br /&gt;
    TL_Gui(guihandler);&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4933</id>
		<title>EXP programs</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4933"/>
		<updated>2026-08-17T07:39:16Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Lab program example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
EXP programs are MATLAB programs for each auditory lab with an RZ6 DSP. The software is based on the EXP framework. The EXP framework is a MATLAB toolbox developed by [[Ruurd Lof]]. The framework is a collection of classes and functions that are the basis for Lab programs. The toolbox is mainly programmed object oriented programming style. It is modular with respect to the hardware that can be used.&lt;br /&gt;
&lt;br /&gt;
Each lab program is created by defining a gui and a few sub classes of certain classes in the EXP framework.&lt;br /&gt;
&lt;br /&gt;
The following programs are available:&lt;br /&gt;
*TL_Program for the test lab&lt;br /&gt;
*PL_Program for the auditory perception lab (patient lab)&lt;br /&gt;
*EG_Program for the EEG/NIRS lab &lt;br /&gt;
*RA_Program for the auditory persuit lab (robot arm)&lt;br /&gt;
*VC_Program for the vestibular chair lab&lt;br /&gt;
&lt;br /&gt;
==EXP framework==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main classes in the EXP framework are:&lt;br /&gt;
&lt;br /&gt;
    EXP_programParameters&lt;br /&gt;
    EXP_hardwareSystems &lt;br /&gt;
    EXP_experiment&lt;br /&gt;
    EXP_recordingsHandler &lt;br /&gt;
    EXP_experimentPlayer&lt;br /&gt;
    EXP_guiHandler&lt;br /&gt;
    EXP_gui&lt;br /&gt;
&lt;br /&gt;
*All programs use the same GUI that is always responsive and displays sounds, sound locations, led locations and acquisition results for every trial.&lt;br /&gt;
&lt;br /&gt;
*In the GUI you select an .exp file specifies the whole experiment.&lt;br /&gt;
&lt;br /&gt;
*The program outputs a .mat file for every trial (and block) with a struct called &#039;trialInfo&#039;.&lt;br /&gt;
&lt;br /&gt;
*There is no need for the experimenter to do any programming.&lt;br /&gt;
&lt;br /&gt;
==Lab program example==&lt;br /&gt;
&lt;br /&gt;
An example of a Lab program is the TestLabProgram. All programs have the same basic structure:&lt;br /&gt;
&lt;br /&gt;
Six objects (TestLab classes are starting with TL_) are created in a fixed order and linked by passing references to the objects. &lt;br /&gt;
 &lt;br /&gt;
    programPar      = TL_programParameters;&lt;br /&gt;
    hardwareSystems = TL_hardwareSystems(programPar);                      &lt;br /&gt;
    experiment      = TL_experiment(programPar);             &lt;br /&gt;
    trialRecordings = TL_recordingsHandler(programPar, experiment, hardwareSystems);     &lt;br /&gt;
    player          = TL_experimentPlayer(hardwareSystems, trialRecordings, programPar, experiment);&lt;br /&gt;
    guihandler      = TL_guiHandler(player, programPar, experiment, hardwareSystems);&lt;br /&gt;
&lt;br /&gt;
At last a GUI is launched with a link to the guihandler object.&lt;br /&gt;
    &lt;br /&gt;
    TL_Gui(guihandler);&lt;br /&gt;
&lt;br /&gt;
===Program parameters===&lt;br /&gt;
The programPar object ....&lt;br /&gt;
&lt;br /&gt;
===Hardware systems===&lt;br /&gt;
The hardwareSystems object ....&lt;br /&gt;
&lt;br /&gt;
===Experiment===&lt;br /&gt;
The eperiment object ....&lt;br /&gt;
&lt;br /&gt;
===Trial recordings===&lt;br /&gt;
The trialRecordings object ....&lt;br /&gt;
&lt;br /&gt;
===Experiment player===&lt;br /&gt;
The experimentPlayer object ....&lt;br /&gt;
&lt;br /&gt;
===Gui handler===&lt;br /&gt;
The guiHandler object ....&lt;br /&gt;
&lt;br /&gt;
===The GUI===&lt;br /&gt;
The Gui object ...&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4932</id>
		<title>EXP programs</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4932"/>
		<updated>2026-08-17T07:38:15Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* EXP framework */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
EXP programs are MATLAB programs for each auditory lab with an RZ6 DSP. The software is based on the EXP framework. The EXP framework is a MATLAB toolbox developed by [[Ruurd Lof]]. The framework is a collection of classes and functions that are the basis for Lab programs. The toolbox is mainly programmed object oriented programming style. It is modular with respect to the hardware that can be used.&lt;br /&gt;
&lt;br /&gt;
Each lab program is created by defining a gui and a few sub classes of certain classes in the EXP framework.&lt;br /&gt;
&lt;br /&gt;
The following programs are available:&lt;br /&gt;
*TL_Program for the test lab&lt;br /&gt;
*PL_Program for the auditory perception lab (patient lab)&lt;br /&gt;
*EG_Program for the EEG/NIRS lab &lt;br /&gt;
*RA_Program for the auditory persuit lab (robot arm)&lt;br /&gt;
*VC_Program for the vestibular chair lab&lt;br /&gt;
&lt;br /&gt;
==EXP framework==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main classes in the EXP framework are:&lt;br /&gt;
&lt;br /&gt;
    EXP_programParameters&lt;br /&gt;
    EXP_hardwareSystems &lt;br /&gt;
    EXP_experiment&lt;br /&gt;
    EXP_recordingsHandler &lt;br /&gt;
    EXP_experimentPlayer&lt;br /&gt;
    EXP_guiHandler&lt;br /&gt;
    EXP_gui&lt;br /&gt;
&lt;br /&gt;
*All programs use the same GUI that is always responsive and displays sounds, sound locations, led locations and acquisition results for every trial.&lt;br /&gt;
&lt;br /&gt;
*In the GUI you select an .exp file specifies the whole experiment.&lt;br /&gt;
&lt;br /&gt;
*The program outputs a .mat file for every trial (and block) with a struct called &#039;trialInfo&#039;.&lt;br /&gt;
&lt;br /&gt;
*There is no need for the experimenter to do any programming.&lt;br /&gt;
&lt;br /&gt;
==Lab program example==&lt;br /&gt;
&lt;br /&gt;
An example of a Lab program is the TestLabProgram. All programs have the same basic structure:&lt;br /&gt;
&lt;br /&gt;
Six objects (TestLab classes are starting with TL_) are created in a fixed order and linked by passing references to the objects. &lt;br /&gt;
 &lt;br /&gt;
    programPar      = TL_programParameters(version);&lt;br /&gt;
    hardwareSystems = TL_hardwareSystems(programPar);                      &lt;br /&gt;
    experiment      = TL_experiment(programPar);             &lt;br /&gt;
    trialRecordings = TL_recordingsHandler(programPar, experiment, hardwareSystems);     &lt;br /&gt;
    player          = TL_experimentPlayer(hardwareSystems, trialRecordings, programPar, experiment);&lt;br /&gt;
    guihandler      = TL_guiHandler(player, programPar, experiment, hardwareSystems);&lt;br /&gt;
&lt;br /&gt;
At last a GUI is launched with a link to the guihandler object.&lt;br /&gt;
    &lt;br /&gt;
    TL_Gui(guihandler);&lt;br /&gt;
&lt;br /&gt;
===Program parameters===&lt;br /&gt;
The programPar object ....&lt;br /&gt;
&lt;br /&gt;
===Hardware systems===&lt;br /&gt;
The hardwareSystems object ....&lt;br /&gt;
&lt;br /&gt;
===Experiment===&lt;br /&gt;
The eperiment object ....&lt;br /&gt;
&lt;br /&gt;
===Trial recordings===&lt;br /&gt;
The trialRecordings object ....&lt;br /&gt;
&lt;br /&gt;
===Experiment player===&lt;br /&gt;
The experimentPlayer object ....&lt;br /&gt;
&lt;br /&gt;
===Gui handler===&lt;br /&gt;
The guiHandler object ....&lt;br /&gt;
&lt;br /&gt;
===The GUI===&lt;br /&gt;
The Gui object ...&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4931</id>
		<title>EXP programs</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4931"/>
		<updated>2026-08-17T07:37:39Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* EXP framework */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
EXP programs are MATLAB programs for each auditory lab with an RZ6 DSP. The software is based on the EXP framework. The EXP framework is a MATLAB toolbox developed by [[Ruurd Lof]]. The framework is a collection of classes and functions that are the basis for Lab programs. The toolbox is mainly programmed object oriented programming style. It is modular with respect to the hardware that can be used.&lt;br /&gt;
&lt;br /&gt;
Each lab program is created by defining a gui and a few sub classes of certain classes in the EXP framework.&lt;br /&gt;
&lt;br /&gt;
The following programs are available:&lt;br /&gt;
*TL_Program for the test lab&lt;br /&gt;
*PL_Program for the auditory perception lab (patient lab)&lt;br /&gt;
*EG_Program for the EEG/NIRS lab &lt;br /&gt;
*RA_Program for the auditory persuit lab (robot arm)&lt;br /&gt;
*VC_Program for the vestibular chair lab&lt;br /&gt;
&lt;br /&gt;
==EXP framework==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main classes in the EXP framework are:&lt;br /&gt;
&lt;br /&gt;
    EXP_programParameters&lt;br /&gt;
    EXP_hardwareSystems &lt;br /&gt;
    EXP_experiment&lt;br /&gt;
    EXP_recordingsHandler &lt;br /&gt;
    EXP_experimentPlayer&lt;br /&gt;
    EXP_guiHandler&lt;br /&gt;
    EXP_gui&lt;br /&gt;
&lt;br /&gt;
*All programs use the same GUI that is always responsive and displays sounds, sound locations, led locations and acquisition results like head movements for every trial.&lt;br /&gt;
&lt;br /&gt;
*In the GUI you select an .exp file specifies the whole experiment.&lt;br /&gt;
&lt;br /&gt;
*The program outputs a .mat file for every trial (and block) with a struct called &#039;trialInfo&#039;.&lt;br /&gt;
&lt;br /&gt;
*There is no need for the experimenter to do any programming.&lt;br /&gt;
&lt;br /&gt;
==Lab program example==&lt;br /&gt;
&lt;br /&gt;
An example of a Lab program is the TestLabProgram. All programs have the same basic structure:&lt;br /&gt;
&lt;br /&gt;
Six objects (TestLab classes are starting with TL_) are created in a fixed order and linked by passing references to the objects. &lt;br /&gt;
 &lt;br /&gt;
    programPar      = TL_programParameters(version);&lt;br /&gt;
    hardwareSystems = TL_hardwareSystems(programPar);                      &lt;br /&gt;
    experiment      = TL_experiment(programPar);             &lt;br /&gt;
    trialRecordings = TL_recordingsHandler(programPar, experiment, hardwareSystems);     &lt;br /&gt;
    player          = TL_experimentPlayer(hardwareSystems, trialRecordings, programPar, experiment);&lt;br /&gt;
    guihandler      = TL_guiHandler(player, programPar, experiment, hardwareSystems);&lt;br /&gt;
&lt;br /&gt;
At last a GUI is launched with a link to the guihandler object.&lt;br /&gt;
    &lt;br /&gt;
    TL_Gui(guihandler);&lt;br /&gt;
&lt;br /&gt;
===Program parameters===&lt;br /&gt;
The programPar object ....&lt;br /&gt;
&lt;br /&gt;
===Hardware systems===&lt;br /&gt;
The hardwareSystems object ....&lt;br /&gt;
&lt;br /&gt;
===Experiment===&lt;br /&gt;
The eperiment object ....&lt;br /&gt;
&lt;br /&gt;
===Trial recordings===&lt;br /&gt;
The trialRecordings object ....&lt;br /&gt;
&lt;br /&gt;
===Experiment player===&lt;br /&gt;
The experimentPlayer object ....&lt;br /&gt;
&lt;br /&gt;
===Gui handler===&lt;br /&gt;
The guiHandler object ....&lt;br /&gt;
&lt;br /&gt;
===The GUI===&lt;br /&gt;
The Gui object ...&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4930</id>
		<title>EXP programs</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4930"/>
		<updated>2026-08-17T07:37:00Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* EXP framework */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
EXP programs are MATLAB programs for each auditory lab with an RZ6 DSP. The software is based on the EXP framework. The EXP framework is a MATLAB toolbox developed by [[Ruurd Lof]]. The framework is a collection of classes and functions that are the basis for Lab programs. The toolbox is mainly programmed object oriented programming style. It is modular with respect to the hardware that can be used.&lt;br /&gt;
&lt;br /&gt;
Each lab program is created by defining a gui and a few sub classes of certain classes in the EXP framework.&lt;br /&gt;
&lt;br /&gt;
The following programs are available:&lt;br /&gt;
*TL_Program for the test lab&lt;br /&gt;
*PL_Program for the auditory perception lab (patient lab)&lt;br /&gt;
*EG_Program for the EEG/NIRS lab &lt;br /&gt;
*RA_Program for the auditory persuit lab (robot arm)&lt;br /&gt;
*VC_Program for the vestibular chair lab&lt;br /&gt;
&lt;br /&gt;
==EXP framework==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main classes in the EXP framework are:&lt;br /&gt;
&lt;br /&gt;
    EXP_programParameters&lt;br /&gt;
    EXP_hardwareSystems &lt;br /&gt;
    EXP_experiment&lt;br /&gt;
    EXP_recordingsHandler &lt;br /&gt;
    EXP_experimentPlayer&lt;br /&gt;
    EXP_guiHandler&lt;br /&gt;
    EXP_gui&lt;br /&gt;
&lt;br /&gt;
*All lab programs uses the same GUI that is always responsive and displays sounds, sound locations, led locations and acquisition results like head movements for every trial.&lt;br /&gt;
&lt;br /&gt;
*In the GUI you select an .exp file specifies the whole experiment.&lt;br /&gt;
&lt;br /&gt;
*The program outputs a .mat file for every trial (and block) with a struct called &#039;trialInfo&#039;.&lt;br /&gt;
&lt;br /&gt;
*There is no need for the experimenter to do any programming.&lt;br /&gt;
&lt;br /&gt;
==Lab program example==&lt;br /&gt;
&lt;br /&gt;
An example of a Lab program is the TestLabProgram. All programs have the same basic structure:&lt;br /&gt;
&lt;br /&gt;
Six objects (TestLab classes are starting with TL_) are created in a fixed order and linked by passing references to the objects. &lt;br /&gt;
 &lt;br /&gt;
    programPar      = TL_programParameters(version);&lt;br /&gt;
    hardwareSystems = TL_hardwareSystems(programPar);                      &lt;br /&gt;
    experiment      = TL_experiment(programPar);             &lt;br /&gt;
    trialRecordings = TL_recordingsHandler(programPar, experiment, hardwareSystems);     &lt;br /&gt;
    player          = TL_experimentPlayer(hardwareSystems, trialRecordings, programPar, experiment);&lt;br /&gt;
    guihandler      = TL_guiHandler(player, programPar, experiment, hardwareSystems);&lt;br /&gt;
&lt;br /&gt;
At last a GUI is launched with a link to the guihandler object.&lt;br /&gt;
    &lt;br /&gt;
    TL_Gui(guihandler);&lt;br /&gt;
&lt;br /&gt;
===Program parameters===&lt;br /&gt;
The programPar object ....&lt;br /&gt;
&lt;br /&gt;
===Hardware systems===&lt;br /&gt;
The hardwareSystems object ....&lt;br /&gt;
&lt;br /&gt;
===Experiment===&lt;br /&gt;
The eperiment object ....&lt;br /&gt;
&lt;br /&gt;
===Trial recordings===&lt;br /&gt;
The trialRecordings object ....&lt;br /&gt;
&lt;br /&gt;
===Experiment player===&lt;br /&gt;
The experimentPlayer object ....&lt;br /&gt;
&lt;br /&gt;
===Gui handler===&lt;br /&gt;
The guiHandler object ....&lt;br /&gt;
&lt;br /&gt;
===The GUI===&lt;br /&gt;
The Gui object ...&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4929</id>
		<title>EXP programs</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4929"/>
		<updated>2026-08-17T07:33:07Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* EXP framework */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
EXP programs are MATLAB programs for each auditory lab with an RZ6 DSP. The software is based on the EXP framework. The EXP framework is a MATLAB toolbox developed by [[Ruurd Lof]]. The framework is a collection of classes and functions that are the basis for Lab programs. The toolbox is mainly programmed object oriented programming style. It is modular with respect to the hardware that can be used.&lt;br /&gt;
&lt;br /&gt;
Each lab program is created by defining a gui and a few sub classes of certain classes in the EXP framework.&lt;br /&gt;
&lt;br /&gt;
The following programs are available:&lt;br /&gt;
*TL_Program for the test lab&lt;br /&gt;
*PL_Program for the auditory perception lab (patient lab)&lt;br /&gt;
*EG_Program for the EEG/NIRS lab &lt;br /&gt;
*RA_Program for the auditory persuit lab (robot arm)&lt;br /&gt;
*VC_Program for the vestibular chair lab&lt;br /&gt;
&lt;br /&gt;
==EXP framework==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main classes in the EXP framework are:&lt;br /&gt;
&lt;br /&gt;
    EXP_programParameters&lt;br /&gt;
    EXP_hardwareSystems &lt;br /&gt;
    EXP_experiment&lt;br /&gt;
    EXP_recordingsHandler &lt;br /&gt;
    EXP_experimentPlayer&lt;br /&gt;
    EXP_guiHandler&lt;br /&gt;
    EXP_gui&lt;br /&gt;
&lt;br /&gt;
Each lab program has a dedicated GUI that is always responsive and displays sounds, sound locations, led locations and acquisition results like head movements for every trial.&lt;br /&gt;
&lt;br /&gt;
In each program GUI you select an experiment file that can consist of several blocks with trials.&lt;br /&gt;
&lt;br /&gt;
The program outputs a .mat file for every trial with a struct called &#039;trialInfo&#039;.&lt;br /&gt;
&lt;br /&gt;
==Lab program example==&lt;br /&gt;
&lt;br /&gt;
An example of a Lab program is the TestLabProgram. All programs have the same basic structure:&lt;br /&gt;
&lt;br /&gt;
Six objects (TestLab classes are starting with TL_) are created in a fixed order and linked by passing references to the objects. &lt;br /&gt;
 &lt;br /&gt;
    programPar      = TL_programParameters(version);&lt;br /&gt;
    hardwareSystems = TL_hardwareSystems(programPar);                      &lt;br /&gt;
    experiment      = TL_experiment(programPar);             &lt;br /&gt;
    trialRecordings = TL_recordingsHandler(programPar, experiment, hardwareSystems);     &lt;br /&gt;
    player          = TL_experimentPlayer(hardwareSystems, trialRecordings, programPar, experiment);&lt;br /&gt;
    guihandler      = TL_guiHandler(player, programPar, experiment, hardwareSystems);&lt;br /&gt;
&lt;br /&gt;
At last a GUI is launched with a link to the guihandler object.&lt;br /&gt;
    &lt;br /&gt;
    TL_Gui(guihandler);&lt;br /&gt;
&lt;br /&gt;
===Program parameters===&lt;br /&gt;
The programPar object ....&lt;br /&gt;
&lt;br /&gt;
===Hardware systems===&lt;br /&gt;
The hardwareSystems object ....&lt;br /&gt;
&lt;br /&gt;
===Experiment===&lt;br /&gt;
The eperiment object ....&lt;br /&gt;
&lt;br /&gt;
===Trial recordings===&lt;br /&gt;
The trialRecordings object ....&lt;br /&gt;
&lt;br /&gt;
===Experiment player===&lt;br /&gt;
The experimentPlayer object ....&lt;br /&gt;
&lt;br /&gt;
===Gui handler===&lt;br /&gt;
The guiHandler object ....&lt;br /&gt;
&lt;br /&gt;
===The GUI===&lt;br /&gt;
The Gui object ...&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4928</id>
		<title>EXP programs</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4928"/>
		<updated>2026-08-17T07:32:53Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* EXP framework */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
EXP programs are MATLAB programs for each auditory lab with an RZ6 DSP. The software is based on the EXP framework. The EXP framework is a MATLAB toolbox developed by [[Ruurd Lof]]. The framework is a collection of classes and functions that are the basis for Lab programs. The toolbox is mainly programmed object oriented programming style. It is modular with respect to the hardware that can be used.&lt;br /&gt;
&lt;br /&gt;
Each lab program is created by defining a gui and a few sub classes of certain classes in the EXP framework.&lt;br /&gt;
&lt;br /&gt;
The following programs are available:&lt;br /&gt;
*TL_Program for the test lab&lt;br /&gt;
*PL_Program for the auditory perception lab (patient lab)&lt;br /&gt;
*EG_Program for the EEG/NIRS lab &lt;br /&gt;
*RA_Program for the auditory persuit lab (robot arm)&lt;br /&gt;
*VC_Program for the vestibular chair lab&lt;br /&gt;
&lt;br /&gt;
==EXP framework==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main classes in the EXP framework are:&lt;br /&gt;
&lt;br /&gt;
    EXP_programParameters&lt;br /&gt;
    EXP_hardwareSystems &lt;br /&gt;
    EXP_experiment&lt;br /&gt;
    EXP_recordingsHandler &lt;br /&gt;
    EXP_experimentPlayer&lt;br /&gt;
    EXP_guiHandler&lt;br /&gt;
    EXP_Gui&lt;br /&gt;
&lt;br /&gt;
Each lab program has a dedicated GUI that is always responsive and displays sounds, sound locations, led locations and acquisition results like head movements for every trial.&lt;br /&gt;
&lt;br /&gt;
In each program GUI you select an experiment file that can consist of several blocks with trials.&lt;br /&gt;
&lt;br /&gt;
The program outputs a .mat file for every trial with a struct called &#039;trialInfo&#039;.&lt;br /&gt;
&lt;br /&gt;
==Lab program example==&lt;br /&gt;
&lt;br /&gt;
An example of a Lab program is the TestLabProgram. All programs have the same basic structure:&lt;br /&gt;
&lt;br /&gt;
Six objects (TestLab classes are starting with TL_) are created in a fixed order and linked by passing references to the objects. &lt;br /&gt;
 &lt;br /&gt;
    programPar      = TL_programParameters(version);&lt;br /&gt;
    hardwareSystems = TL_hardwareSystems(programPar);                      &lt;br /&gt;
    experiment      = TL_experiment(programPar);             &lt;br /&gt;
    trialRecordings = TL_recordingsHandler(programPar, experiment, hardwareSystems);     &lt;br /&gt;
    player          = TL_experimentPlayer(hardwareSystems, trialRecordings, programPar, experiment);&lt;br /&gt;
    guihandler      = TL_guiHandler(player, programPar, experiment, hardwareSystems);&lt;br /&gt;
&lt;br /&gt;
At last a GUI is launched with a link to the guihandler object.&lt;br /&gt;
    &lt;br /&gt;
    TL_Gui(guihandler);&lt;br /&gt;
&lt;br /&gt;
===Program parameters===&lt;br /&gt;
The programPar object ....&lt;br /&gt;
&lt;br /&gt;
===Hardware systems===&lt;br /&gt;
The hardwareSystems object ....&lt;br /&gt;
&lt;br /&gt;
===Experiment===&lt;br /&gt;
The eperiment object ....&lt;br /&gt;
&lt;br /&gt;
===Trial recordings===&lt;br /&gt;
The trialRecordings object ....&lt;br /&gt;
&lt;br /&gt;
===Experiment player===&lt;br /&gt;
The experimentPlayer object ....&lt;br /&gt;
&lt;br /&gt;
===Gui handler===&lt;br /&gt;
The guiHandler object ....&lt;br /&gt;
&lt;br /&gt;
===The GUI===&lt;br /&gt;
The Gui object ...&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4927</id>
		<title>EXP programs</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4927"/>
		<updated>2026-08-17T07:32:12Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* EXP framework */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
EXP programs are MATLAB programs for each auditory lab with an RZ6 DSP. The software is based on the EXP framework. The EXP framework is a MATLAB toolbox developed by [[Ruurd Lof]]. The framework is a collection of classes and functions that are the basis for Lab programs. The toolbox is mainly programmed object oriented programming style. It is modular with respect to the hardware that can be used.&lt;br /&gt;
&lt;br /&gt;
Each lab program is created by defining a gui and a few sub classes of certain classes in the EXP framework.&lt;br /&gt;
&lt;br /&gt;
The following programs are available:&lt;br /&gt;
*TL_Program for the test lab&lt;br /&gt;
*PL_Program for the auditory perception lab (patient lab)&lt;br /&gt;
*EG_Program for the EEG/NIRS lab &lt;br /&gt;
*RA_Program for the auditory persuit lab (robot arm)&lt;br /&gt;
*VC_Program for the vestibular chair lab&lt;br /&gt;
&lt;br /&gt;
==EXP framework==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main classes in the EXP framework are:&lt;br /&gt;
&lt;br /&gt;
    EXP_programParameters&lt;br /&gt;
    EXP_hardwareSystems &lt;br /&gt;
    EXP_experiment&lt;br /&gt;
    EXP_recordingsHandler &lt;br /&gt;
    EXP_experimentPlayer&lt;br /&gt;
    EXP_guiHandler&lt;br /&gt;
&lt;br /&gt;
Each lab program has a dedicated GUI that is always responsive and displays sounds, sound locations, led locations and acquisition results like head movements for every trial.&lt;br /&gt;
&lt;br /&gt;
In each program GUI you select an experiment file that can consist of several blocks with trials.&lt;br /&gt;
&lt;br /&gt;
The program outputs a .mat file for every trial with a struct called &#039;trialInfo&#039;.&lt;br /&gt;
&lt;br /&gt;
==Lab program example==&lt;br /&gt;
&lt;br /&gt;
An example of a Lab program is the TestLabProgram. All programs have the same basic structure:&lt;br /&gt;
&lt;br /&gt;
Six objects (TestLab classes are starting with TL_) are created in a fixed order and linked by passing references to the objects. &lt;br /&gt;
 &lt;br /&gt;
    programPar      = TL_programParameters(version);&lt;br /&gt;
    hardwareSystems = TL_hardwareSystems(programPar);                      &lt;br /&gt;
    experiment      = TL_experiment(programPar);             &lt;br /&gt;
    trialRecordings = TL_recordingsHandler(programPar, experiment, hardwareSystems);     &lt;br /&gt;
    player          = TL_experimentPlayer(hardwareSystems, trialRecordings, programPar, experiment);&lt;br /&gt;
    guihandler      = TL_guiHandler(player, programPar, experiment, hardwareSystems);&lt;br /&gt;
&lt;br /&gt;
At last a GUI is launched with a link to the guihandler object.&lt;br /&gt;
    &lt;br /&gt;
    TL_Gui(guihandler);&lt;br /&gt;
&lt;br /&gt;
===Program parameters===&lt;br /&gt;
The programPar object ....&lt;br /&gt;
&lt;br /&gt;
===Hardware systems===&lt;br /&gt;
The hardwareSystems object ....&lt;br /&gt;
&lt;br /&gt;
===Experiment===&lt;br /&gt;
The eperiment object ....&lt;br /&gt;
&lt;br /&gt;
===Trial recordings===&lt;br /&gt;
The trialRecordings object ....&lt;br /&gt;
&lt;br /&gt;
===Experiment player===&lt;br /&gt;
The experimentPlayer object ....&lt;br /&gt;
&lt;br /&gt;
===Gui handler===&lt;br /&gt;
The guiHandler object ....&lt;br /&gt;
&lt;br /&gt;
===The GUI===&lt;br /&gt;
The Gui object ...&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=Experimental_Software&amp;diff=4926</id>
		<title>Experimental Software</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=Experimental_Software&amp;diff=4926"/>
		<updated>2026-08-17T07:30:37Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* EXP programs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Biofysica toolbox==&lt;br /&gt;
*The [[Biofysica toolbox]] is the software repository on Gitlab for the Biophysics group.&lt;br /&gt;
&lt;br /&gt;
==EXP programs==&lt;br /&gt;
*[[EXP programs]] are MATLAB programs for biophysics labs with an Tucker Davis RZ6 device.&lt;br /&gt;
&lt;br /&gt;
==BIOX==&lt;br /&gt;
*[[BIOX]] (BIOphysics eXperiment software) is a MATLAB software interface for the RZ6 multi I/O processor.&lt;br /&gt;
&lt;br /&gt;
==Matrixtest==&lt;br /&gt;
*[[Matrixtest]] is MATLAB software for testing word recognition under different circumstances.&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=Experimental_Software&amp;diff=4925</id>
		<title>Experimental Software</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=Experimental_Software&amp;diff=4925"/>
		<updated>2026-08-17T07:30:11Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* EXP programs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Biofysica toolbox==&lt;br /&gt;
*The [[Biofysica toolbox]] is the software repository on Gitlab for the Biophysics group.&lt;br /&gt;
&lt;br /&gt;
==EXP programs==&lt;br /&gt;
*[[EXP programs]] are MATLAB programs for each biophysics lab with an Tucker Davis RZ6 device.&lt;br /&gt;
&lt;br /&gt;
==BIOX==&lt;br /&gt;
*[[BIOX]] (BIOphysics eXperiment software) is a MATLAB software interface for the RZ6 multi I/O processor.&lt;br /&gt;
&lt;br /&gt;
==Matrixtest==&lt;br /&gt;
*[[Matrixtest]] is MATLAB software for testing word recognition under different circumstances.&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4924</id>
		<title>EXP programs</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4924"/>
		<updated>2026-08-17T07:29:43Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
EXP programs are MATLAB programs for each auditory lab with an RZ6 DSP. The software is based on the EXP framework. The EXP framework is a MATLAB toolbox developed by [[Ruurd Lof]]. The framework is a collection of classes and functions that are the basis for Lab programs. The toolbox is mainly programmed object oriented programming style. It is modular with respect to the hardware that can be used.&lt;br /&gt;
&lt;br /&gt;
Each lab program is created by defining a gui and a few sub classes of certain classes in the EXP framework.&lt;br /&gt;
&lt;br /&gt;
The following programs are available:&lt;br /&gt;
*TL_Program for the test lab&lt;br /&gt;
*PL_Program for the auditory perception lab (patient lab)&lt;br /&gt;
*EG_Program for the EEG/NIRS lab &lt;br /&gt;
*RA_Program for the auditory persuit lab (robot arm)&lt;br /&gt;
*VC_Program for the vestibular chair lab&lt;br /&gt;
&lt;br /&gt;
==EXP framework==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main classes in the EXP framework are:&lt;br /&gt;
&lt;br /&gt;
    EXP_programParameters&lt;br /&gt;
    EXP_hardwareSystems &lt;br /&gt;
    EXP_experiment&lt;br /&gt;
    EXP_recordingsHandler &lt;br /&gt;
    EXP_experimentPlayer&lt;br /&gt;
    EXP_guiHandler&lt;br /&gt;
&lt;br /&gt;
Other classes represent hardware that can be used in the experiment:&lt;br /&gt;
&lt;br /&gt;
    EXP_bioxSystem&lt;br /&gt;
    EXP_eventRecorder &lt;br /&gt;
    EXP_DCN_ledController&lt;br /&gt;
&lt;br /&gt;
Each lab program has a dedicated GUI that is always responsive and displays sounds, sound locations, led locations and acquisition results like head movements for every trial.&lt;br /&gt;
&lt;br /&gt;
In each program GUI you select an experiment file that can consist of several blocks with trials.&lt;br /&gt;
&lt;br /&gt;
The program outputs a .mat file for every trial with a struct called &#039;trialInfo&#039;.&lt;br /&gt;
&lt;br /&gt;
==Lab program example==&lt;br /&gt;
&lt;br /&gt;
An example of a Lab program is the TestLabProgram. All programs have the same basic structure:&lt;br /&gt;
&lt;br /&gt;
Six objects (TestLab classes are starting with TL_) are created in a fixed order and linked by passing references to the objects. &lt;br /&gt;
 &lt;br /&gt;
    programPar      = TL_programParameters(version);&lt;br /&gt;
    hardwareSystems = TL_hardwareSystems(programPar);                      &lt;br /&gt;
    experiment      = TL_experiment(programPar);             &lt;br /&gt;
    trialRecordings = TL_recordingsHandler(programPar, experiment, hardwareSystems);     &lt;br /&gt;
    player          = TL_experimentPlayer(hardwareSystems, trialRecordings, programPar, experiment);&lt;br /&gt;
    guihandler      = TL_guiHandler(player, programPar, experiment, hardwareSystems);&lt;br /&gt;
&lt;br /&gt;
At last a GUI is launched with a link to the guihandler object.&lt;br /&gt;
    &lt;br /&gt;
    TL_Gui(guihandler);&lt;br /&gt;
&lt;br /&gt;
===Program parameters===&lt;br /&gt;
The programPar object ....&lt;br /&gt;
&lt;br /&gt;
===Hardware systems===&lt;br /&gt;
The hardwareSystems object ....&lt;br /&gt;
&lt;br /&gt;
===Experiment===&lt;br /&gt;
The eperiment object ....&lt;br /&gt;
&lt;br /&gt;
===Trial recordings===&lt;br /&gt;
The trialRecordings object ....&lt;br /&gt;
&lt;br /&gt;
===Experiment player===&lt;br /&gt;
The experimentPlayer object ....&lt;br /&gt;
&lt;br /&gt;
===Gui handler===&lt;br /&gt;
The guiHandler object ....&lt;br /&gt;
&lt;br /&gt;
===The GUI===&lt;br /&gt;
The Gui object ...&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4923</id>
		<title>EXP programs</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EXP_programs&amp;diff=4923"/>
		<updated>2026-08-17T07:28:32Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
!!!!SOME PROGRAMS ARE STILL IN DEVELOPMENT!!!!&lt;br /&gt;
&lt;br /&gt;
EXP programs are MATLAB programs for each auditory lab based on the EXP framework. The EXP framework is a MATLAB toolbox developed by [[Ruurd Lof]]. The framework is a collection of classes and functions that are the basis for Lab programs. The toolbox is mainly programmed object oriented programming style. It is modular with respect to the hardware that can be used.&lt;br /&gt;
&lt;br /&gt;
Each lab program is created by defining a gui and a few sub classes of certain classes in the EXP framework.&lt;br /&gt;
&lt;br /&gt;
The following programs are available:&lt;br /&gt;
*TL_Program for the test lab&lt;br /&gt;
*PL_Program for the auditory perception lab (patient lab)&lt;br /&gt;
*EG_Program for the EEG/NIRS lab &lt;br /&gt;
*RA_Program for the auditory persuit lab (robot arm)&lt;br /&gt;
*VC_Program for the vestibular chair lab&lt;br /&gt;
&lt;br /&gt;
==EXP framework==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main classes in the EXP framework are:&lt;br /&gt;
&lt;br /&gt;
    EXP_programParameters&lt;br /&gt;
    EXP_hardwareSystems &lt;br /&gt;
    EXP_experiment&lt;br /&gt;
    EXP_recordingsHandler &lt;br /&gt;
    EXP_experimentPlayer&lt;br /&gt;
    EXP_guiHandler&lt;br /&gt;
&lt;br /&gt;
Other classes represent hardware that can be used in the experiment:&lt;br /&gt;
&lt;br /&gt;
    EXP_bioxSystem&lt;br /&gt;
    EXP_eventRecorder &lt;br /&gt;
    EXP_DCN_ledController&lt;br /&gt;
&lt;br /&gt;
Each lab program has a dedicated GUI that is always responsive and displays sounds, sound locations, led locations and acquisition results like head movements for every trial.&lt;br /&gt;
&lt;br /&gt;
In each program GUI you select an experiment file that can consist of several blocks with trials.&lt;br /&gt;
&lt;br /&gt;
The program outputs a .mat file for every trial with a struct called &#039;trialInfo&#039;.&lt;br /&gt;
&lt;br /&gt;
==Lab program example==&lt;br /&gt;
&lt;br /&gt;
An example of a Lab program is the TestLabProgram. All programs have the same basic structure:&lt;br /&gt;
&lt;br /&gt;
Six objects (TestLab classes are starting with TL_) are created in a fixed order and linked by passing references to the objects. &lt;br /&gt;
 &lt;br /&gt;
    programPar      = TL_programParameters(version);&lt;br /&gt;
    hardwareSystems = TL_hardwareSystems(programPar);                      &lt;br /&gt;
    experiment      = TL_experiment(programPar);             &lt;br /&gt;
    trialRecordings = TL_recordingsHandler(programPar, experiment, hardwareSystems);     &lt;br /&gt;
    player          = TL_experimentPlayer(hardwareSystems, trialRecordings, programPar, experiment);&lt;br /&gt;
    guihandler      = TL_guiHandler(player, programPar, experiment, hardwareSystems);&lt;br /&gt;
&lt;br /&gt;
At last a GUI is launched with a link to the guihandler object.&lt;br /&gt;
    &lt;br /&gt;
    TL_Gui(guihandler);&lt;br /&gt;
&lt;br /&gt;
===Program parameters===&lt;br /&gt;
The programPar object ....&lt;br /&gt;
&lt;br /&gt;
===Hardware systems===&lt;br /&gt;
The hardwareSystems object ....&lt;br /&gt;
&lt;br /&gt;
===Experiment===&lt;br /&gt;
The eperiment object ....&lt;br /&gt;
&lt;br /&gt;
===Trial recordings===&lt;br /&gt;
The trialRecordings object ....&lt;br /&gt;
&lt;br /&gt;
===Experiment player===&lt;br /&gt;
The experimentPlayer object ....&lt;br /&gt;
&lt;br /&gt;
===Gui handler===&lt;br /&gt;
The guiHandler object ....&lt;br /&gt;
&lt;br /&gt;
===The GUI===&lt;br /&gt;
The Gui object ...&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=Experimental_Software&amp;diff=4922</id>
		<title>Experimental Software</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=Experimental_Software&amp;diff=4922"/>
		<updated>2026-08-17T07:27:23Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* EXP programs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Biofysica toolbox==&lt;br /&gt;
*The [[Biofysica toolbox]] is the software repository on Gitlab for the Biophysics group.&lt;br /&gt;
&lt;br /&gt;
==EXP programs==&lt;br /&gt;
*[[EXP programs]] are MATLAB programs for each biophysics lab with an Tucker Davis RZ6 device. The software is based on the EXP framework.&lt;br /&gt;
&lt;br /&gt;
==BIOX==&lt;br /&gt;
*[[BIOX]] (BIOphysics eXperiment software) is a MATLAB software interface for the RZ6 multi I/O processor.&lt;br /&gt;
&lt;br /&gt;
==Matrixtest==&lt;br /&gt;
*[[Matrixtest]] is MATLAB software for testing word recognition under different circumstances.&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=Experimental_Software&amp;diff=4921</id>
		<title>Experimental Software</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=Experimental_Software&amp;diff=4921"/>
		<updated>2026-08-17T07:26:04Z</updated>

		<summary type="html">&lt;p&gt;Lof: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Biofysica toolbox==&lt;br /&gt;
*The [[Biofysica toolbox]] is the software repository on Gitlab for the Biophysics group.&lt;br /&gt;
&lt;br /&gt;
==EXP programs==&lt;br /&gt;
*[[EXP programs]] are MATLAB programs for each lab based on the EXP framework.&lt;br /&gt;
&lt;br /&gt;
==BIOX==&lt;br /&gt;
*[[BIOX]] (BIOphysics eXperiment software) is a MATLAB software interface for the RZ6 multi I/O processor.&lt;br /&gt;
&lt;br /&gt;
==Matrixtest==&lt;br /&gt;
*[[Matrixtest]] is MATLAB software for testing word recognition under different circumstances.&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=TDT_RZ6&amp;diff=4920</id>
		<title>TDT RZ6</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=TDT_RZ6&amp;diff=4920"/>
		<updated>2026-08-14T09:34:43Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Tucker_Davis_RZ6.png|thumb|TDT RZ6 Multi I/O Processor]]&lt;br /&gt;
==Description==&lt;br /&gt;
The &#039;&#039;&#039;TDT RZ6 Multi I/O Processor&#039;&#039;&#039; is an advanced research tool tailored for (PhD) students seeking versatile capabilities in neuroscience and experimental setups. This device excels in various critical aspects:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Signal Processing Power:&#039;&#039;&#039; The RZ6 is a device, capable of real-time signal processing, making it ideal for experiments requiring precise timing and complex data manipulation.&lt;br /&gt;
# &#039;&#039;&#039;Multimodal Data Acquisition:&#039;&#039;&#039; It can simultaneously acquire multiple types of data, such as neural signals, analog inputs, and digital events, allowing for comprehensive experimental monitoring.&lt;br /&gt;
# &#039;&#039;&#039;Customizable Experimentation:&#039;&#039;&#039; The BIOX toolbox enables flexible programming for students designing and controlling experiments with a high degree of specificity.&lt;br /&gt;
# &#039;&#039;&#039;Synchronization:&#039;&#039;&#039; The RZ6 I/O can be used for synchronizing with other devices, ensuring precise timing between various components of an experimental setup.&lt;br /&gt;
# &#039;&#039;&#039;Stimulation Capabilities:&#039;&#039;&#039; Students can employ the RZ6 to deliver precisely timed stimuli, making it valuable for a wide range of experiments involving sensory or behavioral responses.&lt;br /&gt;
# &#039;&#039;&#039;MATLAB Integration:&#039;&#039;&#039; The RZ6 is fully compatible, facilitating seamless integration and data analysis within MATLAB.&lt;br /&gt;
# &#039;&#039;&#039;Reliability:&#039;&#039;&#039; It has a reputation for robustness and durability that students can rely on for consistent, high-quality data collection.&lt;br /&gt;
&lt;br /&gt;
Biophysics has developed software for the RZ6 called [[BIOX]], which has an easy interface with Matlab.&lt;br /&gt;
&lt;br /&gt;
The following RZ6 devices are available:&lt;br /&gt;
&lt;br /&gt;
* [[Electronics workshop]] (1x DSP) &#039;Test Lab&#039;&lt;br /&gt;
* [[Auditory Perception Lab]] (3x DSP) &#039;Patien Lab&#039;&lt;br /&gt;
* [[NIRS-EEG lab|NIRS-EEG Lab]] (3x DSP)&lt;br /&gt;
* [[Auditory Motion Lab]] (4x DSP) &#039;Robot Arm Lab&#039;&lt;br /&gt;
* [[Vestibular Chair|Vestibular Chair Lab]] (4x DSP)&lt;br /&gt;
&lt;br /&gt;
==Technical info==&lt;br /&gt;
[[File: EEG_NIRS_RZ6_architecture.jpg|thumb|RZ6 architecture]]&lt;br /&gt;
Relevant manual from TDT&lt;br /&gt;
* Overview: https://www.tdt.com/docs/.&lt;br /&gt;
* RZ6: https://www.tdt.com/files/manuals/hardware/RZ6.pdf.&lt;br /&gt;
* PM2Relay: https://www.tdt.com/files/manuals/hardware/PM2R.pdf. &lt;br /&gt;
* RPvdsEx: http://www.tdt.com/files/manuals/RPvdsEx_Manual.pdf. &lt;br /&gt;
* ActiveX: http://www.tdt.com/files/manuals/ActiveX_User_Reference.pdf.&lt;br /&gt;
&lt;br /&gt;
TDT ActiveX controls enable Matlab to real-time control TDT system 3 hardware. See page 5 of the manual for example code to use Matlab to get a circuit running on the RZ6. Examples can be found in C:\TDT\ActiveX\ActXExamples\matlab.&lt;br /&gt;
&lt;br /&gt;
===Digital I/O===&lt;br /&gt;
[[File: RZ6_DB25_Digital_IO_pinout.jpg|thumb|DB25 Digital I/O pinout]]&lt;br /&gt;
[[File: PP_RZ6_Digital_IO_connections.png|thumb|PP RZ6 Digital I/O pinout]]&lt;br /&gt;
The RZ6 has a DB25 connector for digital I/O. A custom patch panel &#039;PP RZ6 Digital-I/O&#039; is available that splits the I/O to a DB25 connector for multiplexer control, a DB25 connector for a response box and eight BNC connector for separate I/O bits.&lt;br /&gt;
&lt;br /&gt;
====Multiplexer control====&lt;br /&gt;
&lt;br /&gt;
Byte-C is for multiplexer control. Four PM2R multiplexer can be controlled via this output. The fifth and sixth bit of byte-C codes for the PM2R device ID (0-3). The first four bits for the channel number. Only one channel can be open at a time for each PM2R. The seventh bit opens the channel and the eighth bit closes any open channel.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit number !! Integer value !! Function&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || Bit 1 (least significant bit) of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || Bit 2 of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || Bit 3 of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 || Bit 4 (most significant bit) of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 16 || Least significant bit of device number&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 32 || Most significant bit of device number&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 64 || Turns on the channel of the specified device&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 128 || Turns off all channels on the specified device only&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Response Box====&lt;br /&gt;
%todo&lt;br /&gt;
&lt;br /&gt;
====Digital I/O breakout====&lt;br /&gt;
The Digital I/O of the RZ6 has 24 digital lines forming byte A, B and C. For these digital lines we made a breakout panel named PP RZ6 Digital I/O. This panel has a DSub25-M connector for hooking up to the RZ6, a DSub25-M connector for connecting PM2R multiplexers to the RZ6 and a DSub25-F connector for connecting a Response Box to the RZ6. The input bits A4..A7 and output bits B4..B7 each have a BNC connector. The output bits can be used for sending trigger to other devices. The input bits can be used for receiving triggers (e.g. from a pushbutton).&lt;br /&gt;
&lt;br /&gt;
==Programming==&lt;br /&gt;
&lt;br /&gt;
===RPvdsEx===&lt;br /&gt;
The programming of the RZ6 is done in RPvdsEx, which is a graphical development tool by Tucker Davis Technologies.&lt;br /&gt;
&lt;br /&gt;
===Matlab interface (ActiveX control)===&lt;br /&gt;
The current (as of march 2024) Matlab interface for the TDT devices is based on the function &amp;quot;actxserver&amp;quot;. Previously &amp;quot;actxcontrol&amp;quot; was used, but this will be obsolete in the near future.&lt;br /&gt;
&lt;br /&gt;
====Installing ActiveX control====&lt;br /&gt;
&lt;br /&gt;
*Go to the website of Tucker Davis technologies. Go to support\downloads.&lt;br /&gt;
*Download &#039;ActiveX Controls&#039;&lt;br /&gt;
*Run the executable&lt;br /&gt;
*When asked for a password use the password &#039;spider&#039;.&lt;br /&gt;
&lt;br /&gt;
====Matlab functions==== &lt;br /&gt;
&lt;br /&gt;
The following device driver functions are available in the biofysica toolbox: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function [module, err, errstr] = RZ6(number,circuit)&lt;br /&gt;
function [module, err, errstr] = ZBUS(nRacks)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Module&amp;quot; is an object with device specific functionality. &amp;quot;number&amp;quot; (or &amp;quot;nRacks&amp;quot;) is given in order to distinguish between different hardware of the same type. &amp;quot;circuit&amp;quot; is the filename of the program that should be uploaded to the device.&lt;br /&gt;
&amp;quot;err&amp;quot; gives an integer and &amp;quot;errstr&amp;quot; the corresponding error message. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Error codes:&lt;br /&gt;
 0 ==&amp;gt; all devices: no error&lt;br /&gt;
-1 ==&amp;gt; all devices: failed to connect&lt;br /&gt;
-2 ==&amp;gt; RZ6: failed to load circuit; zBus: failed to reset&lt;br /&gt;
-3 ==&amp;gt; zBus: failed to flush IO&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more on the device drivers see [https://www.tdt.com/files/manuals/ActiveX_User_Reference.pdf ActiveX_User_Reference.pdf].&lt;br /&gt;
&lt;br /&gt;
===BIOX toolbox===&lt;br /&gt;
We have developed a toolbox that can perform tasks for a large number of different experiments. It consists of RPvdsEx code for the RZ6 and a set easy to use Matlab functions.&lt;br /&gt;
* see [[BIOX]]&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=TDT_RZ6&amp;diff=4919</id>
		<title>TDT RZ6</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=TDT_RZ6&amp;diff=4919"/>
		<updated>2026-08-14T09:32:44Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Tucker_Davis_RZ6.png|thumb|TDT RZ6 Multi I/O Processor]]&lt;br /&gt;
==Description==&lt;br /&gt;
The &#039;&#039;&#039;TDT RZ6 Multi I/O Processor&#039;&#039;&#039; is an advanced research tool tailored for (PhD) students seeking versatile capabilities in neuroscience and experimental setups. This device excels in various critical aspects:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Signal Processing Power:&#039;&#039;&#039; The RZ6 is a device, capable of real-time signal processing, making it ideal for experiments requiring precise timing and complex data manipulation.&lt;br /&gt;
# &#039;&#039;&#039;Multimodal Data Acquisition:&#039;&#039;&#039; It can simultaneously acquire multiple types of data, such as neural signals, analog inputs, and digital events, allowing for comprehensive experimental monitoring.&lt;br /&gt;
# &#039;&#039;&#039;Customizable Experimentation:&#039;&#039;&#039; The BIOX toolbox enables flexible programming for students designing and controlling experiments with a high degree of specificity.&lt;br /&gt;
# &#039;&#039;&#039;Synchronization:&#039;&#039;&#039; The RZ6 I/O can be used for synchronizing with other devices, ensuring precise timing between various components of an experimental setup.&lt;br /&gt;
# &#039;&#039;&#039;Stimulation Capabilities:&#039;&#039;&#039; Students can employ the RZ6 to deliver precisely timed stimuli, making it valuable for a wide range of experiments involving sensory or behavioral responses.&lt;br /&gt;
# &#039;&#039;&#039;MATLAB Integration:&#039;&#039;&#039; The RZ6 is fully compatible, facilitating seamless integration and data analysis within MATLAB.&lt;br /&gt;
# &#039;&#039;&#039;Reliability:&#039;&#039;&#039; It has a reputation for robustness and durability that students can rely on for consistent, high-quality data collection.&lt;br /&gt;
&lt;br /&gt;
Biophysics has developed software for the RZ6 called [[BIOX]], which has an easy interface with Matlab.&lt;br /&gt;
&lt;br /&gt;
The following RZ6 devices are available:&lt;br /&gt;
&lt;br /&gt;
* Test Lab (1x DSP)&lt;br /&gt;
* [[Auditory Perception Lab]] (3x DSP) &#039;Patien Lab&#039;&lt;br /&gt;
* [[NIRS-EEG lab|NIRS-EEG Lab]] (3x DSP)&lt;br /&gt;
* [[Auditory Motion Lab]] (4x DSP) &#039;Robot Arm Lab&#039;&lt;br /&gt;
* [[Vestibular Chair|Vestibular Chair Lab]] (4x DSP)&lt;br /&gt;
&lt;br /&gt;
==Technical info==&lt;br /&gt;
[[File: EEG_NIRS_RZ6_architecture.jpg|thumb|RZ6 architecture]]&lt;br /&gt;
Relevant manual from TDT&lt;br /&gt;
* Overview: https://www.tdt.com/docs/.&lt;br /&gt;
* RZ6: https://www.tdt.com/files/manuals/hardware/RZ6.pdf.&lt;br /&gt;
* PM2Relay: https://www.tdt.com/files/manuals/hardware/PM2R.pdf. &lt;br /&gt;
* RPvdsEx: http://www.tdt.com/files/manuals/RPvdsEx_Manual.pdf. &lt;br /&gt;
* ActiveX: http://www.tdt.com/files/manuals/ActiveX_User_Reference.pdf.&lt;br /&gt;
&lt;br /&gt;
TDT ActiveX controls enable Matlab to real-time control TDT system 3 hardware. See page 5 of the manual for example code to use Matlab to get a circuit running on the RZ6. Examples can be found in C:\TDT\ActiveX\ActXExamples\matlab.&lt;br /&gt;
&lt;br /&gt;
===Digital I/O===&lt;br /&gt;
[[File: RZ6_DB25_Digital_IO_pinout.jpg|thumb|DB25 Digital I/O pinout]]&lt;br /&gt;
[[File: PP_RZ6_Digital_IO_connections.png|thumb|PP RZ6 Digital I/O pinout]]&lt;br /&gt;
The RZ6 has a DB25 connector for digital I/O. A custom patch panel &#039;PP RZ6 Digital-I/O&#039; is available that splits the I/O to a DB25 connector for multiplexer control, a DB25 connector for a response box and eight BNC connector for separate I/O bits.&lt;br /&gt;
&lt;br /&gt;
====Multiplexer control====&lt;br /&gt;
&lt;br /&gt;
Byte-C is for multiplexer control. Four PM2R multiplexer can be controlled via this output. The fifth and sixth bit of byte-C codes for the PM2R device ID (0-3). The first four bits for the channel number. Only one channel can be open at a time for each PM2R. The seventh bit opens the channel and the eighth bit closes any open channel.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit number !! Integer value !! Function&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || Bit 1 (least significant bit) of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || Bit 2 of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || Bit 3 of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 || Bit 4 (most significant bit) of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 16 || Least significant bit of device number&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 32 || Most significant bit of device number&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 64 || Turns on the channel of the specified device&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 128 || Turns off all channels on the specified device only&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Response Box====&lt;br /&gt;
%todo&lt;br /&gt;
&lt;br /&gt;
====Digital I/O breakout====&lt;br /&gt;
The Digital I/O of the RZ6 has 24 digital lines forming byte A, B and C. For these digital lines we made a breakout panel named PP RZ6 Digital I/O. This panel has a DSub25-M connector for hooking up to the RZ6, a DSub25-M connector for connecting PM2R multiplexers to the RZ6 and a DSub25-F connector for connecting a Response Box to the RZ6. The input bits A4..A7 and output bits B4..B7 each have a BNC connector. The output bits can be used for sending trigger to other devices. The input bits can be used for receiving triggers (e.g. from a pushbutton).&lt;br /&gt;
&lt;br /&gt;
==Programming==&lt;br /&gt;
&lt;br /&gt;
===RPvdsEx===&lt;br /&gt;
The programming of the RZ6 is done in RPvdsEx, which is a graphical development tool by Tucker Davis Technologies.&lt;br /&gt;
&lt;br /&gt;
===Matlab interface (ActiveX control)===&lt;br /&gt;
The current (as of march 2024) Matlab interface for the TDT devices is based on the function &amp;quot;actxserver&amp;quot;. Previously &amp;quot;actxcontrol&amp;quot; was used, but this will be obsolete in the near future.&lt;br /&gt;
&lt;br /&gt;
====Installing ActiveX control====&lt;br /&gt;
&lt;br /&gt;
*Go to the website of Tucker Davis technologies. Go to support\downloads.&lt;br /&gt;
*Download &#039;ActiveX Controls&#039;&lt;br /&gt;
*Run the executable&lt;br /&gt;
*When asked for a password use the password &#039;spider&#039;.&lt;br /&gt;
&lt;br /&gt;
====Matlab functions==== &lt;br /&gt;
&lt;br /&gt;
The following device driver functions are available in the biofysica toolbox: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function [module, err, errstr] = RZ6(number,circuit)&lt;br /&gt;
function [module, err, errstr] = ZBUS(nRacks)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Module&amp;quot; is an object with device specific functionality. &amp;quot;number&amp;quot; (or &amp;quot;nRacks&amp;quot;) is given in order to distinguish between different hardware of the same type. &amp;quot;circuit&amp;quot; is the filename of the program that should be uploaded to the device.&lt;br /&gt;
&amp;quot;err&amp;quot; gives an integer and &amp;quot;errstr&amp;quot; the corresponding error message. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Error codes:&lt;br /&gt;
 0 ==&amp;gt; all devices: no error&lt;br /&gt;
-1 ==&amp;gt; all devices: failed to connect&lt;br /&gt;
-2 ==&amp;gt; RZ6: failed to load circuit; zBus: failed to reset&lt;br /&gt;
-3 ==&amp;gt; zBus: failed to flush IO&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more on the device drivers see [https://www.tdt.com/files/manuals/ActiveX_User_Reference.pdf ActiveX_User_Reference.pdf].&lt;br /&gt;
&lt;br /&gt;
===BIOX toolbox===&lt;br /&gt;
We have developed a toolbox that can perform tasks for a large number of different experiments. It consists of RPvdsEx code for the RZ6 and a set easy to use Matlab functions.&lt;br /&gt;
* see [[BIOX]]&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=TDT_RZ6&amp;diff=4918</id>
		<title>TDT RZ6</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=TDT_RZ6&amp;diff=4918"/>
		<updated>2026-08-14T09:31:39Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Tucker_Davis_RZ6.png|thumb|TDT RZ6 Multi I/O Processor]]&lt;br /&gt;
==Description==&lt;br /&gt;
The &#039;&#039;&#039;TDT RZ6 Multi I/O Processor&#039;&#039;&#039; is an advanced research tool tailored for (PhD) students seeking versatile capabilities in neuroscience and experimental setups. This device excels in various critical aspects:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Signal Processing Power:&#039;&#039;&#039; The RZ6 is a device, capable of real-time signal processing, making it ideal for experiments requiring precise timing and complex data manipulation.&lt;br /&gt;
# &#039;&#039;&#039;Multimodal Data Acquisition:&#039;&#039;&#039; It can simultaneously acquire multiple types of data, such as neural signals, analog inputs, and digital events, allowing for comprehensive experimental monitoring.&lt;br /&gt;
# &#039;&#039;&#039;Customizable Experimentation:&#039;&#039;&#039; The BIOX toolbox enables flexible programming for students designing and controlling experiments with a high degree of specificity.&lt;br /&gt;
# &#039;&#039;&#039;Synchronization:&#039;&#039;&#039; The RZ6 I/O can be used for synchronizing with other devices, ensuring precise timing between various components of an experimental setup.&lt;br /&gt;
# &#039;&#039;&#039;Stimulation Capabilities:&#039;&#039;&#039; Students can employ the RZ6 to deliver precisely timed stimuli, making it valuable for a wide range of experiments involving sensory or behavioral responses.&lt;br /&gt;
# &#039;&#039;&#039;MATLAB Integration:&#039;&#039;&#039; The RZ6 is fully compatible, facilitating seamless integration and data analysis within MATLAB.&lt;br /&gt;
# &#039;&#039;&#039;Reliability:&#039;&#039;&#039; It has a reputation for robustness and durability that students can rely on for consistent, high-quality data collection.&lt;br /&gt;
&lt;br /&gt;
Biophysics has developed software for the RZ6 called [[BIOX]], which has an easy interface with Matlab.&lt;br /&gt;
&lt;br /&gt;
The following RZ6 devices are available:&lt;br /&gt;
&lt;br /&gt;
* Test Lab (1x DSP)&lt;br /&gt;
* [[Auditory Perception Lab]] &#039;Patien Lab&#039; (3x DSP)&lt;br /&gt;
* [[NIRS-EEG lab|NIRS-EEG Lab]] (3x DSP)&lt;br /&gt;
* [[Auditory Motion Lab]] &#039;Robot Arm Lab&#039; (4x DSP)&lt;br /&gt;
* [[Vestibular Chair|Vestibular Chair Lab]] (4x DSP)&lt;br /&gt;
&lt;br /&gt;
==Technical info==&lt;br /&gt;
[[File: EEG_NIRS_RZ6_architecture.jpg|thumb|RZ6 architecture]]&lt;br /&gt;
Relevant manual from TDT&lt;br /&gt;
* Overview: https://www.tdt.com/docs/.&lt;br /&gt;
* RZ6: https://www.tdt.com/files/manuals/hardware/RZ6.pdf.&lt;br /&gt;
* PM2Relay: https://www.tdt.com/files/manuals/hardware/PM2R.pdf. &lt;br /&gt;
* RPvdsEx: http://www.tdt.com/files/manuals/RPvdsEx_Manual.pdf. &lt;br /&gt;
* ActiveX: http://www.tdt.com/files/manuals/ActiveX_User_Reference.pdf.&lt;br /&gt;
&lt;br /&gt;
TDT ActiveX controls enable Matlab to real-time control TDT system 3 hardware. See page 5 of the manual for example code to use Matlab to get a circuit running on the RZ6. Examples can be found in C:\TDT\ActiveX\ActXExamples\matlab.&lt;br /&gt;
&lt;br /&gt;
===Digital I/O===&lt;br /&gt;
[[File: RZ6_DB25_Digital_IO_pinout.jpg|thumb|DB25 Digital I/O pinout]]&lt;br /&gt;
[[File: PP_RZ6_Digital_IO_connections.png|thumb|PP RZ6 Digital I/O pinout]]&lt;br /&gt;
The RZ6 has a DB25 connector for digital I/O. A custom patch panel &#039;PP RZ6 Digital-I/O&#039; is available that splits the I/O to a DB25 connector for multiplexer control, a DB25 connector for a response box and eight BNC connector for separate I/O bits.&lt;br /&gt;
&lt;br /&gt;
====Multiplexer control====&lt;br /&gt;
&lt;br /&gt;
Byte-C is for multiplexer control. Four PM2R multiplexer can be controlled via this output. The fifth and sixth bit of byte-C codes for the PM2R device ID (0-3). The first four bits for the channel number. Only one channel can be open at a time for each PM2R. The seventh bit opens the channel and the eighth bit closes any open channel.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit number !! Integer value !! Function&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || Bit 1 (least significant bit) of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || Bit 2 of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || Bit 3 of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 || Bit 4 (most significant bit) of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 16 || Least significant bit of device number&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 32 || Most significant bit of device number&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 64 || Turns on the channel of the specified device&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 128 || Turns off all channels on the specified device only&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Response Box====&lt;br /&gt;
%todo&lt;br /&gt;
&lt;br /&gt;
====Digital I/O breakout====&lt;br /&gt;
The Digital I/O of the RZ6 has 24 digital lines forming byte A, B and C. For these digital lines we made a breakout panel named PP RZ6 Digital I/O. This panel has a DSub25-M connector for hooking up to the RZ6, a DSub25-M connector for connecting PM2R multiplexers to the RZ6 and a DSub25-F connector for connecting a Response Box to the RZ6. The input bits A4..A7 and output bits B4..B7 each have a BNC connector. The output bits can be used for sending trigger to other devices. The input bits can be used for receiving triggers (e.g. from a pushbutton).&lt;br /&gt;
&lt;br /&gt;
==Programming==&lt;br /&gt;
&lt;br /&gt;
===RPvdsEx===&lt;br /&gt;
The programming of the RZ6 is done in RPvdsEx, which is a graphical development tool by Tucker Davis Technologies.&lt;br /&gt;
&lt;br /&gt;
===Matlab interface (ActiveX control)===&lt;br /&gt;
The current (as of march 2024) Matlab interface for the TDT devices is based on the function &amp;quot;actxserver&amp;quot;. Previously &amp;quot;actxcontrol&amp;quot; was used, but this will be obsolete in the near future.&lt;br /&gt;
&lt;br /&gt;
====Installing ActiveX control====&lt;br /&gt;
&lt;br /&gt;
*Go to the website of Tucker Davis technologies. Go to support\downloads.&lt;br /&gt;
*Download &#039;ActiveX Controls&#039;&lt;br /&gt;
*Run the executable&lt;br /&gt;
*When asked for a password use the password &#039;spider&#039;.&lt;br /&gt;
&lt;br /&gt;
====Matlab functions==== &lt;br /&gt;
&lt;br /&gt;
The following device driver functions are available in the biofysica toolbox: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function [module, err, errstr] = RZ6(number,circuit)&lt;br /&gt;
function [module, err, errstr] = ZBUS(nRacks)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Module&amp;quot; is an object with device specific functionality. &amp;quot;number&amp;quot; (or &amp;quot;nRacks&amp;quot;) is given in order to distinguish between different hardware of the same type. &amp;quot;circuit&amp;quot; is the filename of the program that should be uploaded to the device.&lt;br /&gt;
&amp;quot;err&amp;quot; gives an integer and &amp;quot;errstr&amp;quot; the corresponding error message. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Error codes:&lt;br /&gt;
 0 ==&amp;gt; all devices: no error&lt;br /&gt;
-1 ==&amp;gt; all devices: failed to connect&lt;br /&gt;
-2 ==&amp;gt; RZ6: failed to load circuit; zBus: failed to reset&lt;br /&gt;
-3 ==&amp;gt; zBus: failed to flush IO&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more on the device drivers see [https://www.tdt.com/files/manuals/ActiveX_User_Reference.pdf ActiveX_User_Reference.pdf].&lt;br /&gt;
&lt;br /&gt;
===BIOX toolbox===&lt;br /&gt;
We have developed a toolbox that can perform tasks for a large number of different experiments. It consists of RPvdsEx code for the RZ6 and a set easy to use Matlab functions.&lt;br /&gt;
* see [[BIOX]]&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=TDT_RZ6&amp;diff=4917</id>
		<title>TDT RZ6</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=TDT_RZ6&amp;diff=4917"/>
		<updated>2026-08-14T09:28:10Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Tucker_Davis_RZ6.png|thumb|TDT RZ6 Multi I/O Processor]]&lt;br /&gt;
==Description==&lt;br /&gt;
The &#039;&#039;&#039;TDT RZ6 Multi I/O Processor&#039;&#039;&#039; is an advanced research tool tailored for (PhD) students seeking versatile capabilities in neuroscience and experimental setups. This device excels in various critical aspects:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Signal Processing Power:&#039;&#039;&#039; The RZ6 is a device, capable of real-time signal processing, making it ideal for experiments requiring precise timing and complex data manipulation.&lt;br /&gt;
# &#039;&#039;&#039;Multimodal Data Acquisition:&#039;&#039;&#039; It can simultaneously acquire multiple types of data, such as neural signals, analog inputs, and digital events, allowing for comprehensive experimental monitoring.&lt;br /&gt;
# &#039;&#039;&#039;Customizable Experimentation:&#039;&#039;&#039; The BIOX toolbox enables flexible programming for students designing and controlling experiments with a high degree of specificity.&lt;br /&gt;
# &#039;&#039;&#039;Synchronization:&#039;&#039;&#039; The RZ6 I/O can be used for synchronizing with other devices, ensuring precise timing between various components of an experimental setup.&lt;br /&gt;
# &#039;&#039;&#039;Stimulation Capabilities:&#039;&#039;&#039; Students can employ the RZ6 to deliver precisely timed stimuli, making it valuable for a wide range of experiments involving sensory or behavioral responses.&lt;br /&gt;
# &#039;&#039;&#039;MATLAB Integration:&#039;&#039;&#039; The RZ6 is fully compatible, facilitating seamless integration and data analysis within MATLAB.&lt;br /&gt;
# &#039;&#039;&#039;Reliability:&#039;&#039;&#039; It has a reputation for robustness and durability that students can rely on for consistent, high-quality data collection.&lt;br /&gt;
&lt;br /&gt;
Biophysics has developed software for the RZ6 called [[BIOX]], which has an easy interface with Matlab.&lt;br /&gt;
&lt;br /&gt;
The following RZ6 devices are available:&lt;br /&gt;
&lt;br /&gt;
* Test Lab (1x DSP)&lt;br /&gt;
* Patien Lab (3x DSP)&lt;br /&gt;
* NIRS-EEG Lab (3x DSP)&lt;br /&gt;
* Robot Arm Lab (4x DSP)&lt;br /&gt;
* Vestibular Chair (4x DSP)&lt;br /&gt;
&lt;br /&gt;
==Technical info==&lt;br /&gt;
[[File: EEG_NIRS_RZ6_architecture.jpg|thumb|RZ6 architecture]]&lt;br /&gt;
Relevant manual from TDT&lt;br /&gt;
* Overview: https://www.tdt.com/docs/.&lt;br /&gt;
* RZ6: https://www.tdt.com/files/manuals/hardware/RZ6.pdf.&lt;br /&gt;
* PM2Relay: https://www.tdt.com/files/manuals/hardware/PM2R.pdf. &lt;br /&gt;
* RPvdsEx: http://www.tdt.com/files/manuals/RPvdsEx_Manual.pdf. &lt;br /&gt;
* ActiveX: http://www.tdt.com/files/manuals/ActiveX_User_Reference.pdf.&lt;br /&gt;
&lt;br /&gt;
TDT ActiveX controls enable Matlab to real-time control TDT system 3 hardware. See page 5 of the manual for example code to use Matlab to get a circuit running on the RZ6. Examples can be found in C:\TDT\ActiveX\ActXExamples\matlab.&lt;br /&gt;
&lt;br /&gt;
===Digital I/O===&lt;br /&gt;
[[File: RZ6_DB25_Digital_IO_pinout.jpg|thumb|DB25 Digital I/O pinout]]&lt;br /&gt;
[[File: PP_RZ6_Digital_IO_connections.png|thumb|PP RZ6 Digital I/O pinout]]&lt;br /&gt;
The RZ6 has a DB25 connector for digital I/O. A custom patch panel &#039;PP RZ6 Digital-I/O&#039; is available that splits the I/O to a DB25 connector for multiplexer control, a DB25 connector for a response box and eight BNC connector for separate I/O bits.&lt;br /&gt;
&lt;br /&gt;
====Multiplexer control====&lt;br /&gt;
&lt;br /&gt;
Byte-C is for multiplexer control. Four PM2R multiplexer can be controlled via this output. The fifth and sixth bit of byte-C codes for the PM2R device ID (0-3). The first four bits for the channel number. Only one channel can be open at a time for each PM2R. The seventh bit opens the channel and the eighth bit closes any open channel.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit number !! Integer value !! Function&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || Bit 1 (least significant bit) of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || Bit 2 of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || Bit 3 of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 || Bit 4 (most significant bit) of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 16 || Least significant bit of device number&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 32 || Most significant bit of device number&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 64 || Turns on the channel of the specified device&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 128 || Turns off all channels on the specified device only&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Response Box====&lt;br /&gt;
%todo&lt;br /&gt;
&lt;br /&gt;
====Digital I/O breakout====&lt;br /&gt;
The Digital I/O of the RZ6 has 24 digital lines forming byte A, B and C. For these digital lines we made a breakout panel named PP RZ6 Digital I/O. This panel has a DSub25-M connector for hooking up to the RZ6, a DSub25-M connector for connecting PM2R multiplexers to the RZ6 and a DSub25-F connector for connecting a Response Box to the RZ6. The input bits A4..A7 and output bits B4..B7 each have a BNC connector. The output bits can be used for sending trigger to other devices. The input bits can be used for receiving triggers (e.g. from a pushbutton).&lt;br /&gt;
&lt;br /&gt;
==Programming==&lt;br /&gt;
&lt;br /&gt;
===RPvdsEx===&lt;br /&gt;
The programming of the RZ6 is done in RPvdsEx, which is a graphical development tool by Tucker Davis Technologies.&lt;br /&gt;
&lt;br /&gt;
===Matlab interface (ActiveX control)===&lt;br /&gt;
The current (as of march 2024) Matlab interface for the TDT devices is based on the function &amp;quot;actxserver&amp;quot;. Previously &amp;quot;actxcontrol&amp;quot; was used, but this will be obsolete in the near future.&lt;br /&gt;
&lt;br /&gt;
====Installing ActiveX control====&lt;br /&gt;
&lt;br /&gt;
*Go to the website of Tucker Davis technologies. Go to support\downloads.&lt;br /&gt;
*Download &#039;ActiveX Controls&#039;&lt;br /&gt;
*Run the executable&lt;br /&gt;
*When asked for a password use the password &#039;spider&#039;.&lt;br /&gt;
&lt;br /&gt;
====Matlab functions==== &lt;br /&gt;
&lt;br /&gt;
The following device driver functions are available in the biofysica toolbox: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function [module, err, errstr] = RZ6(number,circuit)&lt;br /&gt;
function [module, err, errstr] = ZBUS(nRacks)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Module&amp;quot; is an object with device specific functionality. &amp;quot;number&amp;quot; (or &amp;quot;nRacks&amp;quot;) is given in order to distinguish between different hardware of the same type. &amp;quot;circuit&amp;quot; is the filename of the program that should be uploaded to the device.&lt;br /&gt;
&amp;quot;err&amp;quot; gives an integer and &amp;quot;errstr&amp;quot; the corresponding error message. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Error codes:&lt;br /&gt;
 0 ==&amp;gt; all devices: no error&lt;br /&gt;
-1 ==&amp;gt; all devices: failed to connect&lt;br /&gt;
-2 ==&amp;gt; RZ6: failed to load circuit; zBus: failed to reset&lt;br /&gt;
-3 ==&amp;gt; zBus: failed to flush IO&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more on the device drivers see [https://www.tdt.com/files/manuals/ActiveX_User_Reference.pdf ActiveX_User_Reference.pdf].&lt;br /&gt;
&lt;br /&gt;
===BIOX toolbox===&lt;br /&gt;
We have developed a toolbox that can perform tasks for a large number of different experiments. It consists of RPvdsEx code for the RZ6 and a set easy to use Matlab functions.&lt;br /&gt;
* see [[BIOX]]&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=TDT_RZ6&amp;diff=4916</id>
		<title>TDT RZ6</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=TDT_RZ6&amp;diff=4916"/>
		<updated>2026-08-14T09:27:12Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Tucker_Davis_RZ6.png|thumb|TDT RZ6 Multi I/O Processor]]&lt;br /&gt;
==Description==&lt;br /&gt;
The &#039;&#039;&#039;TDT RZ6 Multi I/O Processor&#039;&#039;&#039; is an advanced research tool tailored for (PhD) students seeking versatile capabilities in neuroscience and experimental setups. This device excels in various critical aspects:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Signal Processing Power:&#039;&#039;&#039; The RZ6 is a device, capable of real-time signal processing, making it ideal for experiments requiring precise timing and complex data manipulation.&lt;br /&gt;
# &#039;&#039;&#039;Multimodal Data Acquisition:&#039;&#039;&#039; It can simultaneously acquire multiple types of data, such as neural signals, analog inputs, and digital events, allowing for comprehensive experimental monitoring.&lt;br /&gt;
# &#039;&#039;&#039;Customizable Experimentation:&#039;&#039;&#039; The BIOX toolbox enables flexible programming for students designing and controlling experiments with a high degree of specificity.&lt;br /&gt;
# &#039;&#039;&#039;Synchronization:&#039;&#039;&#039; The RZ6 I/O can be used for synchronizing with other devices, ensuring precise timing between various components of an experimental setup.&lt;br /&gt;
# &#039;&#039;&#039;Stimulation Capabilities:&#039;&#039;&#039; Students can employ the RZ6 to deliver precisely timed stimuli, making it valuable for a wide range of experiments involving sensory or behavioral responses.&lt;br /&gt;
# &#039;&#039;&#039;MATLAB Integration:&#039;&#039;&#039; The RZ6 is fully compatible, facilitating seamless integration and data analysis within MATLAB.&lt;br /&gt;
# &#039;&#039;&#039;Reliability:&#039;&#039;&#039; It has a reputation for robustness and durability that students can rely on for consistent, high-quality data collection.&lt;br /&gt;
&lt;br /&gt;
Biophysics has developed software for the RZ6 called [[BIOX]], which has an easy interface with Matlab.&lt;br /&gt;
&lt;br /&gt;
* Test Lab (1x DSP)&lt;br /&gt;
* Patien Lab (3x DSP)&lt;br /&gt;
* NIRS-EEG Lab (3x DSP)&lt;br /&gt;
* Robot Arm Lab (4x DSP)&lt;br /&gt;
* Vestibular Chair (4x DSP)&lt;br /&gt;
&lt;br /&gt;
==Technical info==&lt;br /&gt;
[[File: EEG_NIRS_RZ6_architecture.jpg|thumb|RZ6 architecture]]&lt;br /&gt;
Relevant manual from TDT&lt;br /&gt;
* Overview: https://www.tdt.com/docs/.&lt;br /&gt;
* RZ6: https://www.tdt.com/files/manuals/hardware/RZ6.pdf.&lt;br /&gt;
* PM2Relay: https://www.tdt.com/files/manuals/hardware/PM2R.pdf. &lt;br /&gt;
* RPvdsEx: http://www.tdt.com/files/manuals/RPvdsEx_Manual.pdf. &lt;br /&gt;
* ActiveX: http://www.tdt.com/files/manuals/ActiveX_User_Reference.pdf.&lt;br /&gt;
&lt;br /&gt;
TDT ActiveX controls enable Matlab to real-time control TDT system 3 hardware. See page 5 of the manual for example code to use Matlab to get a circuit running on the RZ6. Examples can be found in C:\TDT\ActiveX\ActXExamples\matlab.&lt;br /&gt;
&lt;br /&gt;
===Digital I/O===&lt;br /&gt;
[[File: RZ6_DB25_Digital_IO_pinout.jpg|thumb|DB25 Digital I/O pinout]]&lt;br /&gt;
[[File: PP_RZ6_Digital_IO_connections.png|thumb|PP RZ6 Digital I/O pinout]]&lt;br /&gt;
The RZ6 has a DB25 connector for digital I/O. A custom patch panel &#039;PP RZ6 Digital-I/O&#039; is available that splits the I/O to a DB25 connector for multiplexer control, a DB25 connector for a response box and eight BNC connector for separate I/O bits.&lt;br /&gt;
&lt;br /&gt;
====Multiplexer control====&lt;br /&gt;
&lt;br /&gt;
Byte-C is for multiplexer control. Four PM2R multiplexer can be controlled via this output. The fifth and sixth bit of byte-C codes for the PM2R device ID (0-3). The first four bits for the channel number. Only one channel can be open at a time for each PM2R. The seventh bit opens the channel and the eighth bit closes any open channel.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit number !! Integer value !! Function&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || Bit 1 (least significant bit) of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || Bit 2 of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || Bit 3 of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 || Bit 4 (most significant bit) of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 16 || Least significant bit of device number&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 32 || Most significant bit of device number&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 64 || Turns on the channel of the specified device&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 128 || Turns off all channels on the specified device only&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Response Box====&lt;br /&gt;
%todo&lt;br /&gt;
&lt;br /&gt;
====Digital I/O breakout====&lt;br /&gt;
The Digital I/O of the RZ6 has 24 digital lines forming byte A, B and C. For these digital lines we made a breakout panel named PP RZ6 Digital I/O. This panel has a DSub25-M connector for hooking up to the RZ6, a DSub25-M connector for connecting PM2R multiplexers to the RZ6 and a DSub25-F connector for connecting a Response Box to the RZ6. The input bits A4..A7 and output bits B4..B7 each have a BNC connector. The output bits can be used for sending trigger to other devices. The input bits can be used for receiving triggers (e.g. from a pushbutton).&lt;br /&gt;
&lt;br /&gt;
==Programming==&lt;br /&gt;
&lt;br /&gt;
===RPvdsEx===&lt;br /&gt;
The programming of the RZ6 is done in RPvdsEx, which is a graphical development tool by Tucker Davis Technologies.&lt;br /&gt;
&lt;br /&gt;
===Matlab interface (ActiveX control)===&lt;br /&gt;
The current (as of march 2024) Matlab interface for the TDT devices is based on the function &amp;quot;actxserver&amp;quot;. Previously &amp;quot;actxcontrol&amp;quot; was used, but this will be obsolete in the near future.&lt;br /&gt;
&lt;br /&gt;
====Installing ActiveX control====&lt;br /&gt;
&lt;br /&gt;
*Go to the website of Tucker Davis technologies. Go to support\downloads.&lt;br /&gt;
*Download &#039;ActiveX Controls&#039;&lt;br /&gt;
*Run the executable&lt;br /&gt;
*When asked for a password use the password &#039;spider&#039;.&lt;br /&gt;
&lt;br /&gt;
====Matlab functions==== &lt;br /&gt;
&lt;br /&gt;
The following device driver functions are available in the biofysica toolbox: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function [module, err, errstr] = RZ6(number,circuit)&lt;br /&gt;
function [module, err, errstr] = ZBUS(nRacks)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Module&amp;quot; is an object with device specific functionality. &amp;quot;number&amp;quot; (or &amp;quot;nRacks&amp;quot;) is given in order to distinguish between different hardware of the same type. &amp;quot;circuit&amp;quot; is the filename of the program that should be uploaded to the device.&lt;br /&gt;
&amp;quot;err&amp;quot; gives an integer and &amp;quot;errstr&amp;quot; the corresponding error message. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Error codes:&lt;br /&gt;
 0 ==&amp;gt; all devices: no error&lt;br /&gt;
-1 ==&amp;gt; all devices: failed to connect&lt;br /&gt;
-2 ==&amp;gt; RZ6: failed to load circuit; zBus: failed to reset&lt;br /&gt;
-3 ==&amp;gt; zBus: failed to flush IO&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more on the device drivers see [https://www.tdt.com/files/manuals/ActiveX_User_Reference.pdf ActiveX_User_Reference.pdf].&lt;br /&gt;
&lt;br /&gt;
===BIOX toolbox===&lt;br /&gt;
We have developed a toolbox that can perform tasks for a large number of different experiments. It consists of RPvdsEx code for the RZ6 and a set easy to use Matlab functions.&lt;br /&gt;
* see [[BIOX]]&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=Vestibular_Chair_technical_information&amp;diff=4915</id>
		<title>Vestibular Chair technical information</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=Vestibular_Chair_technical_information&amp;diff=4915"/>
		<updated>2026-08-14T09:24:57Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Electronics Rack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Vestibular Chair|back to Vestibular Chair]]&lt;br /&gt;
[[File:VestibularChair_Electronics_Rack.jpg|thumb|Electronics Rack]]&lt;br /&gt;
__TOC__&lt;br /&gt;
==Introduction==&lt;br /&gt;
&amp;lt;todo&amp;gt;&lt;br /&gt;
==Booth==&lt;br /&gt;
Dimensions: LxWxH = 470x400x340cm&lt;br /&gt;
===Acoustics===&lt;br /&gt;
*Walls: egg box type soundproofing foam&lt;br /&gt;
*Floor: anti-fatigue rubber floor mat with holes&lt;br /&gt;
see [[Acoustic Materials]]&lt;br /&gt;
==Electronics Rack==&lt;br /&gt;
*[[8 channel digital event recorder|Digital event recorder (LSLDER01)]]&lt;br /&gt;
*General Purpose Patch Panel (9xBNC), connects to control room patch panel.&lt;br /&gt;
*PP RZ6 Digital I/O&lt;br /&gt;
*4x PM2 Multiplexer&lt;br /&gt;
*SA1 Stereo Amplifier&lt;br /&gt;
*RZ6 Multi I/O processor (4x)&lt;br /&gt;
*remote windows PC &lt;br /&gt;
*remote mac mini for eye tracking&lt;br /&gt;
*Ethernet hub&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=NIRS-EEG_technical_info&amp;diff=4914</id>
		<title>NIRS-EEG technical info</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=NIRS-EEG_technical_info&amp;diff=4914"/>
		<updated>2026-08-14T09:24:20Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* TDT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:NIRS-EEG_lab.png|thumb|Lab floor plan]]&lt;br /&gt;
[[File:Refa64.png|thumb|Refa64]]&lt;br /&gt;
[[File:Mobita32.png|thumb|Mobita32]]&lt;br /&gt;
[[NIRS-EEG lab|back to NIRS-EEG]]&lt;br /&gt;
== Booth ==&lt;br /&gt;
*Dimensions: LxWxH = 540x280x265cm&lt;br /&gt;
===Acoustics===&lt;br /&gt;
*Walls: pyramid type acoustic foam&lt;br /&gt;
*Floor: anti-fatigue rubber floor mat with holes&lt;br /&gt;
see [[Acoustic Materials]]&lt;br /&gt;
&lt;br /&gt;
== Rack ==&lt;br /&gt;
&lt;br /&gt;
*[[Tektronix TDS 2012|Oscilloscope]]&lt;br /&gt;
*[[8 channel digital event recorder|Digital event recorder (LSLDER04)]]&lt;br /&gt;
&lt;br /&gt;
===TDT===&lt;br /&gt;
* 1 RZ6  Multi-core I/O Processor (3x DSP)&lt;br /&gt;
* 2 PM2R multiplexer&lt;br /&gt;
* 1 RP2  Enhanced Real-Time Processor (DSP)&lt;br /&gt;
* 2 RA16 Medusa base station&lt;br /&gt;
&lt;br /&gt;
==Speakers==&lt;br /&gt;
A semi-circle of 31 [[Cambridge Audio Minx Min 12 specifications|Cambridge Audio Minx Min12 speakers]] is available for sound localization experiments:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Speaker Position Table&lt;br /&gt;
|-&lt;br /&gt;
! Speaker position (degree) !! Device !! Channel !! Speaker position (degree) !! Device !! Channel&lt;br /&gt;
|-&lt;br /&gt;
|   ||   ||   || 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| -5 || 2 || 1 || 5 || 0 || 1&lt;br /&gt;
|-&lt;br /&gt;
| -10 || 2 || 2 || 10 || 0 || 2&lt;br /&gt;
|-&lt;br /&gt;
| -15 || 2 || 3 || 15 || 0 || 3&lt;br /&gt;
|-&lt;br /&gt;
| -20 || 2 || 4 || 20 || 0 || 4&lt;br /&gt;
|-&lt;br /&gt;
| -25 || 2 || 5 || 25 || 0 || 5&lt;br /&gt;
|-&lt;br /&gt;
| -30 || 2 || 6 || 30 || 0 || 6&lt;br /&gt;
|-&lt;br /&gt;
| -35 || 2 || 7 || 35 || 0 || 7&lt;br /&gt;
|-&lt;br /&gt;
| -40 || 2 || 8 || 40 || 0 || 8&lt;br /&gt;
|-&lt;br /&gt;
| -45 || 2 || 9 || 45 || 0 || 9&lt;br /&gt;
|-&lt;br /&gt;
| -50 || 2 || 10 || 50 || 0 || 10&lt;br /&gt;
|-&lt;br /&gt;
| -55 || 2 || 11 || 55 || 0 || 11&lt;br /&gt;
|-&lt;br /&gt;
| -60 || 2 || 12 || 60 || 0 || 12&lt;br /&gt;
|-&lt;br /&gt;
| -70 || 2 || 13 || 70 || 0 || 13&lt;br /&gt;
|-&lt;br /&gt;
| -80 || 2 || 14 || 80 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| -90 || 2 || 15 || 90 || 0 || 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==LEDs==&lt;br /&gt;
[[File:xxxxxxx.png|thumb|LED wiring scheme]] &lt;br /&gt;
%todo&lt;br /&gt;
&lt;br /&gt;
The system is triggered by the RZ6 output.&lt;br /&gt;
&lt;br /&gt;
===Parts===&lt;br /&gt;
*[[DCN LED controller]] (2x)&lt;br /&gt;
*LED mounting frames (32x)&lt;br /&gt;
*[[LED specifications|Red/Green LED’s]](32x)&lt;br /&gt;
*Mini-jack to mini-jack cables&lt;br /&gt;
&lt;br /&gt;
===LED positions===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ LED Position Table&lt;br /&gt;
|-&lt;br /&gt;
! LED position (degree) !! Device !! Channel !! LED position (degree) !! Device !! Channel&lt;br /&gt;
|-&lt;br /&gt;
|   ||   ||   || 0 || DCN-LED05 || 0&lt;br /&gt;
|-&lt;br /&gt;
| -5  || DCN-LED04 || 1 || 5 || DCN-LED05 || 1&lt;br /&gt;
|-&lt;br /&gt;
| -10 || DCN-LED04 || 2 || 10 || DCN-LED05|| 2&lt;br /&gt;
|-&lt;br /&gt;
| -15 || DCN-LED04 || 3 || 15 || DCN-LED05|| 3&lt;br /&gt;
|-&lt;br /&gt;
| -20 || DCN-LED04 || 4 || 20 || DCN-LED05 || 4&lt;br /&gt;
|-&lt;br /&gt;
| -25 || DCN-LED04 || 5 || 25 || DCN-LED05 || 5&lt;br /&gt;
|-&lt;br /&gt;
| -30 || DCN-LED04 || 6 || 30 || DCN-LED05 || 6&lt;br /&gt;
|-&lt;br /&gt;
| -35 || DCN-LED04 || 7 || 35 || DCN-LED05 || 7&lt;br /&gt;
|-&lt;br /&gt;
| -40 || DCN-LED04 || 8 || 40 || DCN-LED05 || 8&lt;br /&gt;
|-&lt;br /&gt;
| -45 || DCN-LED04 || 9 || 45 || DCN-LED05 || 9&lt;br /&gt;
|-&lt;br /&gt;
| -50 || DCN-LED04 || 10 || 50 || DCN-LED05 || 10&lt;br /&gt;
|-&lt;br /&gt;
| -55 || DCN-LED04 || 11 || 55 || DCN-LED05 || 11&lt;br /&gt;
|-&lt;br /&gt;
| -60 || DCN-LED04 || 12 || 60 || DCN-LED05 || 12&lt;br /&gt;
|-&lt;br /&gt;
| -70 || DCN-LED04 || 13 || 70 || DCN-LED05 || 13&lt;br /&gt;
|-&lt;br /&gt;
| -80 || DCN-LED04  || 14 || 80 || DCN-LED05 || 14&lt;br /&gt;
|-&lt;br /&gt;
| -90 || DCN-LED04 || 15 || 90 || DCN-LED05 || 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== EEG ==&lt;br /&gt;
* 32 channel water-based electrode system (TMSI, Mobita), including headcap(s)&lt;br /&gt;
* 72 channel REFA, including headcaps in 3 different sizes (TMSI)&lt;br /&gt;
* 16 channel REFA (TMSI)&lt;br /&gt;
* ring electrodes including separate caps for combined measurements with NIRS&lt;br /&gt;
* TMSI Polybench recording software&lt;br /&gt;
&lt;br /&gt;
== NIRS ==&lt;br /&gt;
* 2 x 24 channel system (Oxymon, Artinis) each consisting of 8 transmitters and 4 receivers (splitted fibers)&lt;br /&gt;
* sampling rate up to 250 Hz&lt;br /&gt;
* 8 AD channels (according to Artinis, they only sample at the rate of all other channels. Care needs to be taken, if sampling at low rates. Present your triggers for longer durations then)&lt;br /&gt;
* Oxysoft recording software&lt;br /&gt;
&lt;br /&gt;
== Disposables ==&lt;br /&gt;
For the preparation of the subjects you need all types of disposables like alcohol, lotion, cotton pads, electrolyte gel, etc... You can find information about these items in [[NIRS-EEG lab disposables]], and also info where to order them when needed.&lt;br /&gt;
&lt;br /&gt;
== Kitchen ==&lt;br /&gt;
[[File:EEG_NIRS_kitchen.JPEG|thumb|EEG/NIRS kitchen]]&lt;br /&gt;
A small [[NIRS-EEG kitchen|kitchen]] is available for washing the hair of the subject and for cleaning caps and other equipment afterwards.&lt;br /&gt;
&lt;br /&gt;
== FIRST AID (EHBO) ==&lt;br /&gt;
Above the [[NIRS-EEG kitchen|kitchen]] on the right there is a FIRST AID-kit on the wall.&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=Auditory_Perception_Lab_technical_info&amp;diff=4913</id>
		<title>Auditory Perception Lab technical info</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=Auditory_Perception_Lab_technical_info&amp;diff=4913"/>
		<updated>2026-08-14T09:23:06Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Electronics rack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Auditory Perception Lab|back to Auditory Perception Lab]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The Auditory Perception setup is a sound boot with 43 speakers arranged in a quarter sphere. In the middle of the sphere is a chair where a person (the subject) can sit, so that his/her head is exactly in the center of the sphere. The subject can be presented with stimuli in the form of sounds or led flashes. The head movements of the subject can be tracked. The subject can also respond to stimuli by pressing a button. The experiments are controlled by a computer and electronics from outside the boot.&lt;br /&gt;
&lt;br /&gt;
==Booth==&lt;br /&gt;
[[File:PatientlabBoothCloseup.JPEG|thumb|Sound Booth]]&lt;br /&gt;
%todo&lt;br /&gt;
*Dimensions: LxWxH = 250x230x280cm&lt;br /&gt;
&lt;br /&gt;
===Description===&lt;br /&gt;
The sound booth is an acoustically isolated room with sound absorbing materials on all walls and the floor to reduce reverberation. A 2.4 m diameter quarter sphere build of a metal structure holds 43 small passive speakers. The speakers also contain two color LED&#039;s. In the center of the booth there is a chair for a subject. The chair is placed in a way that the head of the subject is right in center of the sphere. &lt;br /&gt;
Large coils are embedded in the walls of the sound booth. The coils make a box of about 2.5 m x 2.3 m x 2.8 m. These coils are used for head movement detection.&lt;br /&gt;
&lt;br /&gt;
An infrared camera is installed in the booth. The experimenter has a monitor from which he/she can see the inside of the booth. The camera looks down on the back of the subject.&lt;br /&gt;
&lt;br /&gt;
===Acoustics===&lt;br /&gt;
The Booth is acoustically isolated from its environment. The walls and corners are covered by acoustic panels. A double steel door isolates the booth from the operating room.&lt;br /&gt;
&lt;br /&gt;
*Walls: Cinema Round Acoustic Panels&lt;br /&gt;
*Corners: Super Bass 90 Acoustic Panels. &lt;br /&gt;
*Floor: anti-fatigue rubber floor mat with holes&lt;br /&gt;
&lt;br /&gt;
see [[Acoustic Materials]]&lt;br /&gt;
&lt;br /&gt;
===Coordinates===&lt;br /&gt;
The orientation of the coordinates is determined by the position of the head of the subject looking to the center speaker. The raw acquisition data of the head coil results in tuples of voltages (Frontal, Vertical, Horizontal) which correspond to (X, Y, Z).&lt;br /&gt;
&lt;br /&gt;
* Frontal (F)   : Front is X+, Back is X- &lt;br /&gt;
* Vertical (V)  : Top is Y+, Bottom is Y-&lt;br /&gt;
* Horizontal (H): Right is Z+, Left is Z-&lt;br /&gt;
&lt;br /&gt;
For Double Polar coordinates see [[Coordinate systems]]&lt;br /&gt;
&lt;br /&gt;
==Computer==&lt;br /&gt;
[[File:xxxxxxx.png|thumb|zBus Monitor]]&lt;br /&gt;
A windows computer with MATLAB, RPvdsEx and zBUSmon. The computer has an optical interface card (PO5e) for communication with the Tucker Davis equipment via the Optibit optical bus (FO5) at the back of the rack. The working of the optical bus can be monitored by the program zBUSmon program from TDT. This program has also some control functions for the optical bus. It shows all the connected zBus chassis and the TDT devices that are installed in each chassis. It also shows the version number of the installed firmware on the devices.&lt;br /&gt;
==Software==&lt;br /&gt;
The software consist of several parts:&lt;br /&gt;
*Matlab software for generating experiment files.&lt;br /&gt;
**&#039;&#039;Sphere Minor&#039;&#039;&lt;br /&gt;
**&#039;&#039;BIOX Prime (under construction)&#039;&#039;&lt;br /&gt;
*Matlab software that runs the experiments.&lt;br /&gt;
*BIOX (RPvdsX) software for the RZ6 soundprocessor.&lt;br /&gt;
&lt;br /&gt;
===GenExp===&lt;br /&gt;
The software that generates a experiment file is called &#039;genexp_xxxxx&#039;. In the &#039;&#039;&#039;\biofysica\experiment\exp&#039;&#039;&#039; directory there are five examples:&lt;br /&gt;
*genexp_defaultcal.m&lt;br /&gt;
*genexp_defaultloc.m&lt;br /&gt;
*genexp_fartloc.m&lt;br /&gt;
*genexp_glausndloc.m&lt;br /&gt;
*genexp_student.m&lt;br /&gt;
&lt;br /&gt;
===Sphere Minor===&lt;br /&gt;
The software mostly used is called &#039;SphereMinor&#039;. It is a reworked copy of the &#039;SpherePrime&#039; program of the Sphere Setup. It can be found in the &#039;&#039;&#039;\biofysica\experiment\sphereMinor&#039;&#039;&#039; directory. It has a graphical user interface (GUI) and is, except for the GUI, written in the procedural programming paradigm. Several functions have a parameter &#039;handles&#039; as input parameter and as output parameter. &#039;handles&#039; is a struct that contains nearly all information that is moved around in the program. Every function has the ability to change &#039;handles&#039;. This way it acts as a global data structure.&lt;br /&gt;
&lt;br /&gt;
===Biox Prime===&lt;br /&gt;
A program &#039;Biox Prime&#039; is under construction. This program has a GUI build in the app designer of Matlab. The program is mostly written in the Object Oriented Programming (OOP) paradigm. The core of the program is a state machine. Due to its structure the GUI stays always responsive. The programming of the RZ6 is based on the [[BIOX]] toolbox.&lt;br /&gt;
&lt;br /&gt;
===RPvdsX software===&lt;br /&gt;
The BIOX sofware can be found in the &#039;&#039;&#039;\biofysica\experiment\biox_rz6&#039;&#039;&#039; directory.&lt;br /&gt;
&lt;br /&gt;
==Electronics rack==&lt;br /&gt;
[[File:PatientlabElectronicsRack.JPEG|thumb|electronics rack]]&lt;br /&gt;
From top to bottom:&lt;br /&gt;
*Rack main power switches&lt;br /&gt;
*Computer&lt;br /&gt;
*Quad channel amplifier&lt;br /&gt;
*Digital event recorder&lt;br /&gt;
*RZ6 Multi I/O Processor (3x)&lt;br /&gt;
*PP RZ6 Digital I/O (Patch panel)&lt;br /&gt;
*Left: PP Amp (Patch panel)  ; Right: Multiplexer&lt;br /&gt;
*Left: &amp;lt;none&amp;gt;                ;Right: Multiplexer&lt;br /&gt;
*Left: PP Audion (Patch panel; Right: Multiplexer&lt;br /&gt;
*8 channel ADC acquisition device&lt;br /&gt;
*Oscilloscope&lt;br /&gt;
*Femto oscilator/Lock-in amplifier module&lt;br /&gt;
*Field coil generator (amplifier)&lt;br /&gt;
&lt;br /&gt;
==Sound system==&lt;br /&gt;
[[File:xxxxxxx.png|thumb|Connection schematics of the sound system]]&lt;br /&gt;
[[File:xxxxxxx.png|thumb|Speaker locations on the sphere]]&lt;br /&gt;
The sound system consists of a programmable sound processor (RZ6) with each two DAC’s. The RZ6 generates a sound signal that travels via a multiplexer (TDT PM2R) to a patch panel inside the the booth and from there to a speaker.&lt;br /&gt;
The multiplexing system consists of two TDT PM2relay multiplexers. Each multiplexer has 16 channels. Only one channels per multiplexer can be opened at a time. The total number of channels is 32. The RZ6 controls the multiplexers.&lt;br /&gt;
&lt;br /&gt;
Parts&lt;br /&gt;
*RZ6&lt;br /&gt;
*TDT PM2relay Multiplexers (2x)&lt;br /&gt;
*Flat cables from RZ6 to PM2relays.&lt;br /&gt;
*Dsub25 cables from PM2relays to patch panels in the booth (2x)&lt;br /&gt;
*Patch panel inside the booth&lt;br /&gt;
*Speakers (30x)&lt;br /&gt;
&lt;br /&gt;
====Minx Min12 speaker system====&lt;br /&gt;
On the sphere frame Cambridge Audio Minx Min12 speakers are used. &lt;br /&gt;
&lt;br /&gt;
Speaker specifications:&lt;br /&gt;
&lt;br /&gt;
*Sensitivity: 86 dB SPL (@2.83 Vrms input)&lt;br /&gt;
*Frequency response: 150 Hz-20 kHz&lt;br /&gt;
*Impedance: 8 Ohms&lt;br /&gt;
*H x W x D: 78 x 78 x 85 mm&lt;br /&gt;
*Weight: 0.43 kg&lt;br /&gt;
&lt;br /&gt;
The speakers are connected via 2 lead wires for the sound and 3 lead wires with mini stereo jacks for the LED&#039;s.&lt;br /&gt;
&lt;br /&gt;
The average distance from the subject (centre of the head) to the speakers is 1.05 m.&lt;br /&gt;
&lt;br /&gt;
Azimuths and elevations were measured by %todo and are tabulated in %todo.&lt;br /&gt;
&lt;br /&gt;
===Speakers positions===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Speaker Positions For Horizontal Row&lt;br /&gt;
|-&lt;br /&gt;
! Azimuth (degree) !! Device !! Channel&lt;br /&gt;
|-&lt;br /&gt;
|   0 || 2 || 0&lt;br /&gt;
|-&lt;br /&gt;
| -10 || 1 || 0  &lt;br /&gt;
|-&lt;br /&gt;
| -20 || 1 || 1 &lt;br /&gt;
|-&lt;br /&gt;
| -30 || 1 || 2 &lt;br /&gt;
|-&lt;br /&gt;
| -40 || 1 || 3 &lt;br /&gt;
|-&lt;br /&gt;
| -50 || 1 || 4&lt;br /&gt;
|-&lt;br /&gt;
| -60 || 1 || 5 &lt;br /&gt;
|-&lt;br /&gt;
| -70 || 1 || 6&lt;br /&gt;
|-&lt;br /&gt;
| -80 || 1 || 7 &lt;br /&gt;
|-&lt;br /&gt;
| -90 || 1 || 8 &lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 0 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 30 || 0 || 2&lt;br /&gt;
|-&lt;br /&gt;
| 40 || 0 || 3&lt;br /&gt;
|-&lt;br /&gt;
| 50 || 0 || 4&lt;br /&gt;
|-&lt;br /&gt;
| 60 || 0 || 5&lt;br /&gt;
|-&lt;br /&gt;
| 70 || 0 || 6&lt;br /&gt;
|-&lt;br /&gt;
| 80 || 0 || 7&lt;br /&gt;
|-&lt;br /&gt;
| 90 || 0 || 8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Speaker Positions For Vertical Row&lt;br /&gt;
|-&lt;br /&gt;
! Elevation (degree) !! Device !! Channel&lt;br /&gt;
|-&lt;br /&gt;
|   0 || 2 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0 || 10  &lt;br /&gt;
|-&lt;br /&gt;
| 20 || 0 || 11 &lt;br /&gt;
|-&lt;br /&gt;
| 30 || 0 || 12 &lt;br /&gt;
|-&lt;br /&gt;
| 40 || 0 || 13 &lt;br /&gt;
|-&lt;br /&gt;
| 50 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 60 || 0 || 15 &lt;br /&gt;
|-&lt;br /&gt;
| -10 || 1 || 9&lt;br /&gt;
|-&lt;br /&gt;
| -20 || 1 || 10&lt;br /&gt;
|-&lt;br /&gt;
| -30 || 1 || 11&lt;br /&gt;
|-&lt;br /&gt;
| -40 || 1 || 12&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Other Speaker Positions&lt;br /&gt;
|-&lt;br /&gt;
! Azimuth (degree) !! Elevation (degree) !! Device !! Channel&lt;br /&gt;
|- &lt;br /&gt;
| -30 || -22.5 || 2 || 0&lt;br /&gt;
|-&lt;br /&gt;
| -30 || -45 || 2 || 1&lt;br /&gt;
|-&lt;br /&gt;
| -30 || -30 || 2 || 2&lt;br /&gt;
|- &lt;br /&gt;
| -60 || -30 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| 30 || 25 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| 30 || 50 || 2 || 5 &lt;br /&gt;
|-&lt;br /&gt;
| 60 || 35 || 2 || 6&lt;br /&gt;
|- &lt;br /&gt;
| 60 || 85 || 2 || 7&lt;br /&gt;
|-&lt;br /&gt;
| -30 || -22.5 || 2 || 8&lt;br /&gt;
|-&lt;br /&gt;
| -30 || -45 || 2 || 9&lt;br /&gt;
|-&lt;br /&gt;
| -60 || -30 || 2 || 10&lt;br /&gt;
|-&lt;br /&gt;
| 30 || 25 || 2 || 11&lt;br /&gt;
|-&lt;br /&gt;
| 30 || 50 || 2 || 12&lt;br /&gt;
|-&lt;br /&gt;
| 60 || 35 || 2 || 13&lt;br /&gt;
|-&lt;br /&gt;
| 60 || 85 || 2 || 14&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==LED system==&lt;br /&gt;
[[File:xxxxxxx.png|thumb|LED wiring scheme]] &lt;br /&gt;
%todo&lt;br /&gt;
&lt;br /&gt;
The system is triggered by the RZ6 output.&lt;br /&gt;
&lt;br /&gt;
====Parts====&lt;br /&gt;
*[[DCN LED controller]] (2x)&lt;br /&gt;
*LED mounting frames (32x)&lt;br /&gt;
*[[LED specifications|Red/Green LED’s]](32x)&lt;br /&gt;
*Mini-jack to mini-jack cables&lt;br /&gt;
&lt;br /&gt;
==Trigger/Timing system==&lt;br /&gt;
[[File:xxxxxxxxx.png|thumb|Scheme of trigger system]]&lt;br /&gt;
===Parts===&lt;br /&gt;
*Pushbutton (passive switch, normally open)&lt;br /&gt;
*[[8 channel digital event recorder|Digital event recorder (LSLDER02)]]&lt;br /&gt;
&lt;br /&gt;
==Head Tracking System==&lt;br /&gt;
See [[EM Field Head Tracking System specifications]]&lt;br /&gt;
&lt;br /&gt;
===Lock-in amplifiers===&lt;br /&gt;
[[File:Patientlab_Lockin_settings.JPEG|300px|thumb|right|Lock-in amplifier settings]]&lt;br /&gt;
Three Femto LIA-BV-150-H Lock-in amplifiers are used in order to separate the Frontal, Horizontal and Vertical signals from the pick-up coil. Each Lock-in amplifier has a Sinus Oscillator Module (SOM-1) that is used both as Field Modulation Signal and as Reference Signal. The Lock-in amplifier settings are set at the front of the device (see picture), except for the modulation/reference frequency which is set inside on the SOM-board.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Frontal (Red)&lt;br /&gt;
! Vertical (Blue)&lt;br /&gt;
! Horizontal (Yellow)&lt;br /&gt;
|-&lt;br /&gt;
| Frequency&lt;br /&gt;
| 45kHz&lt;br /&gt;
| 55kHz&lt;br /&gt;
| 65kHz&lt;br /&gt;
|-&lt;br /&gt;
| Time constant&lt;br /&gt;
| B&lt;br /&gt;
| B&lt;br /&gt;
| B&lt;br /&gt;
|-&lt;br /&gt;
| Sensitivity&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| Phase Course&lt;br /&gt;
| F&lt;br /&gt;
| F&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| Phase Fine&lt;br /&gt;
| 4&lt;br /&gt;
| 7&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Dynamic Reserve&lt;br /&gt;
| L&lt;br /&gt;
| L&lt;br /&gt;
| L&lt;br /&gt;
|-&lt;br /&gt;
| Mode&lt;br /&gt;
| 1f&lt;br /&gt;
| 1f&lt;br /&gt;
| 1f&lt;br /&gt;
|-&lt;br /&gt;
| PLL&lt;br /&gt;
| S&lt;br /&gt;
| S&lt;br /&gt;
| S&lt;br /&gt;
|-&lt;br /&gt;
| Reference Threshold&lt;br /&gt;
| 0V&lt;br /&gt;
| 0V&lt;br /&gt;
| 0V&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=Auditory_Motion_lab_technical_info&amp;diff=4912</id>
		<title>Auditory Motion lab technical info</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=Auditory_Motion_lab_technical_info&amp;diff=4912"/>
		<updated>2026-08-14T09:22:22Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Electronics rack */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Auditory Motion Lab|back to Auditory Motion Lab]]&lt;br /&gt;
__TOC__&lt;br /&gt;
==Introduction==&lt;br /&gt;
The Auditory Motion Lab is a facility designed for experiments involving moving sound sources. The lab features a soundproof booth, ensuring an isolated testing environment. At the heart of the lab is a  two-axis robot arm suspended from the ceiling. This arm is equipped with a high-fidelity speaker capable of moving at a fixed distance around the subject&#039;s head. The centrally placed chair, which can rotate on its vertical axis, allows subjects to experience sound from various angles. Head movements are tracked using a 3-axis electromagnetic field (EMF) head tracking system. Additionally, wall-mounted speakers facing the subject provide ambient or background sounds to enrich the experimental scenarios.&lt;br /&gt;
&lt;br /&gt;
==Booth==&lt;br /&gt;
*Dimensions: LxWxH = 420x300x285cm&lt;br /&gt;
The sound booth is an acoustically isolated room with sound absorbing materials on all walls and the floor to reduce reverberation. A robot arm rotates one speaker in two dimensions (azimuth and elevation) and one speaker in one dimension (azimuth). Both have a distance of 120 cm to the centre of the booth. The speakers also contain two color LED&#039;s. In the center of the booth there is a chair for a subject. The chair is placed in a way that the head of the subject is right in center of the sphere. &lt;br /&gt;
Large coils are embedded in the walls of the sound booth. The coils make a box of about 2.5 m x 2.3 m x 2.8 m. These coils are used for head movement detection.&lt;br /&gt;
&lt;br /&gt;
An infrared camera is installed in the booth. The experimenter has a monitor from which he/she can see the inside of the booth. The camera looks down on the back of the subject.&lt;br /&gt;
===Acoustics===&lt;br /&gt;
The Booth is acoustically isolated from its environment. The walls and corners are covered by acoustic materials.&lt;br /&gt;
&lt;br /&gt;
*Walls: egg box type soundproofing foam&lt;br /&gt;
*Floor: anti-fatigue rubber floor mat with holes&lt;br /&gt;
see [[Acoustic Materials]]&lt;br /&gt;
&lt;br /&gt;
===Coordinates===&lt;br /&gt;
The orientation of the coordinates is determined by the position of the head of the subject looking to the arm speaker in its default position (= facing the wall speakers).&lt;br /&gt;
* Frontal: Front is Y+, Back is Y- &lt;br /&gt;
* Horizontal: Right is X+, Left is X-&lt;br /&gt;
* Vertical: Top is Z+, Bottom is Z-&lt;br /&gt;
&lt;br /&gt;
For Double Polar coordinates see [[Coordinate systems]]&lt;br /&gt;
&lt;br /&gt;
==Computer==&lt;br /&gt;
[[File:xxxxxxx.png|thumb|zBus Monitor]]&lt;br /&gt;
A windows computer with MATLAB, RPvdsEx and zBUSmon. The computer has an optical interface card (PO5e) for communication with the Tucker Davis equipment via the Optibit optical bus (FO5) at the back of the rack. The working of the optical bus can be monitored by the program zBUSmon program from TDT. This program has also some control functions for the optical bus. It shows all the connected zBus chassis and the TDT devices that are installed in each chassis. It also shows the version number of the installed firmware on the devices.&lt;br /&gt;
==Software==&lt;br /&gt;
%todo&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;name of the program&amp;gt;===&lt;br /&gt;
The programming of the RZ6 is based on the [[BIOX]] toolbox.&lt;br /&gt;
&lt;br /&gt;
===RPvdsX software===&lt;br /&gt;
The BIOX sofware can be found [https://gitlab.science.ru.nl/marcw/biofysica/-/tree/master/experiment/biox_rz6?ref_type=heads here] in Gitlab.&lt;br /&gt;
&lt;br /&gt;
==Electronics rack==&lt;br /&gt;
[[File:RobotLab_Electronics_Rack1.JPEG|thumb|electronics rack]]&lt;br /&gt;
From top to bottom:&lt;br /&gt;
*Patch Panel Audio Wall&lt;br /&gt;
*3x quad-channel audio amplifier &lt;br /&gt;
*24 channel Motu sound processor&lt;br /&gt;
*Zbus caddy: Left=empty; Right=Patch Panel Arm Speakers&lt;br /&gt;
*RZ6 MUlti I/O Processor (4x)&lt;br /&gt;
*Patch Panel RZ6 Digital-I/O&lt;br /&gt;
*Zbus caddy: Left=empty; Right= 6 channel ADC&lt;br /&gt;
*Frame: Left=empty; Right= Patch panel for 6 channel ADC&lt;br /&gt;
*Robot arm manual user interface&lt;br /&gt;
*Digital Eventrecorder&lt;br /&gt;
*[[Tektronix TBS 1064|Oscilloscope]]&lt;br /&gt;
*Field coil generator (amplifier)&lt;br /&gt;
*Femto Lock-in amplifier module&lt;br /&gt;
&lt;br /&gt;
==Sound system==&lt;br /&gt;
There is a primary sound system with speakers on the robot arm and a secondary sound system with speakers on the wall. The purpose of the primary system is to provide moving sound stimuli. the purpose of the secondary sound system is to provide background sounds or noise.&lt;br /&gt;
&lt;br /&gt;
===Primary sound system===&lt;br /&gt;
[[File:Auditory_Motion_Lab_Arm_Speakers.png|thumb|Speaker locations on the arm]]&lt;br /&gt;
The primary sound system consists of a programmable sound processor (RZ6) with two analog outputs (Out-A and Out-B. The RZ6 generates a sound signal that travels to a patch panel inside the booth and from there to two speakers on the robot arm.&lt;br /&gt;
&lt;br /&gt;
Speaker specifications:&lt;br /&gt;
&lt;br /&gt;
*Sensitivity: 86 dB SPL (@2.83 Vrms input)&lt;br /&gt;
*Frequency response: 150 Hz-20 kHz&lt;br /&gt;
*Impedance: 8 Ohms&lt;br /&gt;
*H x W x D: 78 x 78 x 85 mm&lt;br /&gt;
*Weight: 0.43 kg&lt;br /&gt;
&lt;br /&gt;
The speakers are connected via 2 lead wires for the sound and 3 lead wires for the LED&#039;s.&lt;br /&gt;
&lt;br /&gt;
One speaker kan rotate in two dimensions (azimuth, elevation) the other only in one dimension (azimuth). The angle between the speakers is always 90 degrees.&lt;br /&gt;
The distance of the speakers to the center of the booth (= center of the head of the subject) is 120 cm.&lt;br /&gt;
&lt;br /&gt;
===Secondary sound system===&lt;br /&gt;
The secondary sound system consists of a 24 channel Motu 24Ao USB audio sound processor, three 4 channel Behringer EPQ304 audio amplifiers, and 12 wall mounted Cambridge audio Minx Min12 speakers. The purpose of the speaker wall is to provide background noise to the moving sounds produced by the speaker(s) on the arm.&lt;br /&gt;
The distance of the wall to the center of the booth is 145 cm.&lt;br /&gt;
&lt;br /&gt;
[[File:Auditory_Motion_Lab_Wall_Speakers_poisitons.png|200px|Right|Wall speaker schematic]]&lt;br /&gt;
[[File:Auditory_Motion_Lab_Wall_Speakers.png|150px|Left|Wall speaker schematic]]&lt;br /&gt;
&lt;br /&gt;
==LED system==&lt;br /&gt;
[[File:Auditory_Motion_Lab_Leds.png|250px|thumb|LED connection schematic]]&lt;br /&gt;
The LED system consist of Red/Green LEDs mounted in the center of the arm speakers (2x) as well as the wall speakers (12x). The LEDs are controlled by the LED controller box (ID: DCN-LED12) which is mounted on the front facing wall inside the booth. The controller has an ethernet interface for the configuration settings and is triggered by the &lt;br /&gt;
&lt;br /&gt;
===Specifications Red/Green LEDs===&lt;br /&gt;
See [[LED specifications]]&lt;br /&gt;
&lt;br /&gt;
==Trigger/Timing system==&lt;br /&gt;
[[File:xxxxxxxxx.png|thumb|Scheme of trigger system]]&lt;br /&gt;
===Parts===&lt;br /&gt;
*Pushbutton (passive switch, normally open)&lt;br /&gt;
*RZ6 Buttonbox (4 passive switches, normally open; 4 led indicators)&lt;br /&gt;
*[[8 channel digital event recorder|Digital event recorder (LSLDER03)]]&lt;br /&gt;
&lt;br /&gt;
==Head Tracking System==&lt;br /&gt;
See [[EM Field Head Tracking System specifications]]&lt;br /&gt;
&lt;br /&gt;
[[File:RobotLab_Lockin_Settings.JPEG|300px|thumb|right|Lock-in amplifier settings]]&lt;br /&gt;
Three Femto LIA-BV-150-H Lock-in amplifiers are used in order to separate the Frontal, Horizontal and Vertical signals from the pick-up coil. Each Lock-in amplifier has a Sinus Oscillator Module (SOM-1) that is used both as Field Modulation Signal and as Reference Signal. The Lock-in amplifier settings are set at the front of the device (see picture), except for the modulation/reference frequency which is set inside on the SOM-board.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Frontal (Red)&lt;br /&gt;
! Vertical (Blue)&lt;br /&gt;
! Horizontal (Yellow)&lt;br /&gt;
|-&lt;br /&gt;
| Frequency&lt;br /&gt;
| 45kHz&lt;br /&gt;
| 55kHz&lt;br /&gt;
| 65kHz&lt;br /&gt;
|-&lt;br /&gt;
| Time constant&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
|-&lt;br /&gt;
| Sensitivity&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Phase Course&lt;br /&gt;
| 8&lt;br /&gt;
| 0&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Phase Fine&lt;br /&gt;
| 4&lt;br /&gt;
| D&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Dynamic Reserve&lt;br /&gt;
| L&lt;br /&gt;
| L&lt;br /&gt;
| L&lt;br /&gt;
|-&lt;br /&gt;
| Mode&lt;br /&gt;
| 1f&lt;br /&gt;
| 1f&lt;br /&gt;
| 1f&lt;br /&gt;
|-&lt;br /&gt;
| PLL&lt;br /&gt;
| S&lt;br /&gt;
| S&lt;br /&gt;
| S&lt;br /&gt;
|-&lt;br /&gt;
| Reference Threshold&lt;br /&gt;
| 0V&lt;br /&gt;
| 0V&lt;br /&gt;
| 0V&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=Auditory_Motion_lab_technical_info&amp;diff=4911</id>
		<title>Auditory Motion lab technical info</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=Auditory_Motion_lab_technical_info&amp;diff=4911"/>
		<updated>2026-08-11T11:18:05Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Secondary sound system */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Auditory Motion Lab|back to Auditory Motion Lab]]&lt;br /&gt;
__TOC__&lt;br /&gt;
==Introduction==&lt;br /&gt;
The Auditory Motion Lab is a facility designed for experiments involving moving sound sources. The lab features a soundproof booth, ensuring an isolated testing environment. At the heart of the lab is a  two-axis robot arm suspended from the ceiling. This arm is equipped with a high-fidelity speaker capable of moving at a fixed distance around the subject&#039;s head. The centrally placed chair, which can rotate on its vertical axis, allows subjects to experience sound from various angles. Head movements are tracked using a 3-axis electromagnetic field (EMF) head tracking system. Additionally, wall-mounted speakers facing the subject provide ambient or background sounds to enrich the experimental scenarios.&lt;br /&gt;
&lt;br /&gt;
==Booth==&lt;br /&gt;
*Dimensions: LxWxH = 420x300x285cm&lt;br /&gt;
The sound booth is an acoustically isolated room with sound absorbing materials on all walls and the floor to reduce reverberation. A robot arm rotates one speaker in two dimensions (azimuth and elevation) and one speaker in one dimension (azimuth). Both have a distance of 120 cm to the centre of the booth. The speakers also contain two color LED&#039;s. In the center of the booth there is a chair for a subject. The chair is placed in a way that the head of the subject is right in center of the sphere. &lt;br /&gt;
Large coils are embedded in the walls of the sound booth. The coils make a box of about 2.5 m x 2.3 m x 2.8 m. These coils are used for head movement detection.&lt;br /&gt;
&lt;br /&gt;
An infrared camera is installed in the booth. The experimenter has a monitor from which he/she can see the inside of the booth. The camera looks down on the back of the subject.&lt;br /&gt;
===Acoustics===&lt;br /&gt;
The Booth is acoustically isolated from its environment. The walls and corners are covered by acoustic materials.&lt;br /&gt;
&lt;br /&gt;
*Walls: egg box type soundproofing foam&lt;br /&gt;
*Floor: anti-fatigue rubber floor mat with holes&lt;br /&gt;
see [[Acoustic Materials]]&lt;br /&gt;
&lt;br /&gt;
===Coordinates===&lt;br /&gt;
The orientation of the coordinates is determined by the position of the head of the subject looking to the arm speaker in its default position (= facing the wall speakers).&lt;br /&gt;
* Frontal: Front is Y+, Back is Y- &lt;br /&gt;
* Horizontal: Right is X+, Left is X-&lt;br /&gt;
* Vertical: Top is Z+, Bottom is Z-&lt;br /&gt;
&lt;br /&gt;
For Double Polar coordinates see [[Coordinate systems]]&lt;br /&gt;
&lt;br /&gt;
==Computer==&lt;br /&gt;
[[File:xxxxxxx.png|thumb|zBus Monitor]]&lt;br /&gt;
A windows computer with MATLAB, RPvdsEx and zBUSmon. The computer has an optical interface card (PO5e) for communication with the Tucker Davis equipment via the Optibit optical bus (FO5) at the back of the rack. The working of the optical bus can be monitored by the program zBUSmon program from TDT. This program has also some control functions for the optical bus. It shows all the connected zBus chassis and the TDT devices that are installed in each chassis. It also shows the version number of the installed firmware on the devices.&lt;br /&gt;
==Software==&lt;br /&gt;
%todo&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;name of the program&amp;gt;===&lt;br /&gt;
The programming of the RZ6 is based on the [[BIOX]] toolbox.&lt;br /&gt;
&lt;br /&gt;
===RPvdsX software===&lt;br /&gt;
The BIOX sofware can be found [https://gitlab.science.ru.nl/marcw/biofysica/-/tree/master/experiment/biox_rz6?ref_type=heads here] in Gitlab.&lt;br /&gt;
&lt;br /&gt;
==Electronics rack==&lt;br /&gt;
[[File:RobotLab_Electronics_Rack1.JPEG|thumb|electronics rack]]&lt;br /&gt;
From top to bottom:&lt;br /&gt;
*Patch Panel Audio Wall&lt;br /&gt;
*3x quad-channel audio amplifier &lt;br /&gt;
*24 channel Motu sound processor&lt;br /&gt;
*Zbus caddy: Left=empty; Right=Patch Panel Arm Speakers&lt;br /&gt;
*RZ6 MUlti I/O Processor&lt;br /&gt;
*Patch Panel RZ6 Digital-I/O&lt;br /&gt;
*Zbus caddy: Left=empty; Right= 6 channel ADC&lt;br /&gt;
*Frame: Left=empty; Right= Patch panel for 6 channel ADC&lt;br /&gt;
*Robot arm manual user interface&lt;br /&gt;
*Digital Eventrecorder&lt;br /&gt;
*[[Tektronix TBS 1064|Oscilloscope]]&lt;br /&gt;
*Field coil generator (amplifier)&lt;br /&gt;
*Femto Lock-in amplifier module&lt;br /&gt;
&lt;br /&gt;
==Sound system==&lt;br /&gt;
There is a primary sound system with speakers on the robot arm and a secondary sound system with speakers on the wall. The purpose of the primary system is to provide moving sound stimuli. the purpose of the secondary sound system is to provide background sounds or noise.&lt;br /&gt;
&lt;br /&gt;
===Primary sound system===&lt;br /&gt;
[[File:Auditory_Motion_Lab_Arm_Speakers.png|thumb|Speaker locations on the arm]]&lt;br /&gt;
The primary sound system consists of a programmable sound processor (RZ6) with two analog outputs (Out-A and Out-B. The RZ6 generates a sound signal that travels to a patch panel inside the booth and from there to two speakers on the robot arm.&lt;br /&gt;
&lt;br /&gt;
Speaker specifications:&lt;br /&gt;
&lt;br /&gt;
*Sensitivity: 86 dB SPL (@2.83 Vrms input)&lt;br /&gt;
*Frequency response: 150 Hz-20 kHz&lt;br /&gt;
*Impedance: 8 Ohms&lt;br /&gt;
*H x W x D: 78 x 78 x 85 mm&lt;br /&gt;
*Weight: 0.43 kg&lt;br /&gt;
&lt;br /&gt;
The speakers are connected via 2 lead wires for the sound and 3 lead wires for the LED&#039;s.&lt;br /&gt;
&lt;br /&gt;
One speaker kan rotate in two dimensions (azimuth, elevation) the other only in one dimension (azimuth). The angle between the speakers is always 90 degrees.&lt;br /&gt;
The distance of the speakers to the center of the booth (= center of the head of the subject) is 120 cm.&lt;br /&gt;
&lt;br /&gt;
===Secondary sound system===&lt;br /&gt;
The secondary sound system consists of a 24 channel Motu 24Ao USB audio sound processor, three 4 channel Behringer EPQ304 audio amplifiers, and 12 wall mounted Cambridge audio Minx Min12 speakers. The purpose of the speaker wall is to provide background noise to the moving sounds produced by the speaker(s) on the arm.&lt;br /&gt;
The distance of the wall to the center of the booth is 145 cm.&lt;br /&gt;
&lt;br /&gt;
[[File:Auditory_Motion_Lab_Wall_Speakers_poisitons.png|200px|Right|Wall speaker schematic]]&lt;br /&gt;
[[File:Auditory_Motion_Lab_Wall_Speakers.png|150px|Left|Wall speaker schematic]]&lt;br /&gt;
&lt;br /&gt;
==LED system==&lt;br /&gt;
[[File:Auditory_Motion_Lab_Leds.png|250px|thumb|LED connection schematic]]&lt;br /&gt;
The LED system consist of Red/Green LEDs mounted in the center of the arm speakers (2x) as well as the wall speakers (12x). The LEDs are controlled by the LED controller box (ID: DCN-LED12) which is mounted on the front facing wall inside the booth. The controller has an ethernet interface for the configuration settings and is triggered by the &lt;br /&gt;
&lt;br /&gt;
===Specifications Red/Green LEDs===&lt;br /&gt;
See [[LED specifications]]&lt;br /&gt;
&lt;br /&gt;
==Trigger/Timing system==&lt;br /&gt;
[[File:xxxxxxxxx.png|thumb|Scheme of trigger system]]&lt;br /&gt;
===Parts===&lt;br /&gt;
*Pushbutton (passive switch, normally open)&lt;br /&gt;
*RZ6 Buttonbox (4 passive switches, normally open; 4 led indicators)&lt;br /&gt;
*[[8 channel digital event recorder|Digital event recorder (LSLDER03)]]&lt;br /&gt;
&lt;br /&gt;
==Head Tracking System==&lt;br /&gt;
See [[EM Field Head Tracking System specifications]]&lt;br /&gt;
&lt;br /&gt;
[[File:RobotLab_Lockin_Settings.JPEG|300px|thumb|right|Lock-in amplifier settings]]&lt;br /&gt;
Three Femto LIA-BV-150-H Lock-in amplifiers are used in order to separate the Frontal, Horizontal and Vertical signals from the pick-up coil. Each Lock-in amplifier has a Sinus Oscillator Module (SOM-1) that is used both as Field Modulation Signal and as Reference Signal. The Lock-in amplifier settings are set at the front of the device (see picture), except for the modulation/reference frequency which is set inside on the SOM-board.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Frontal (Red)&lt;br /&gt;
! Vertical (Blue)&lt;br /&gt;
! Horizontal (Yellow)&lt;br /&gt;
|-&lt;br /&gt;
| Frequency&lt;br /&gt;
| 45kHz&lt;br /&gt;
| 55kHz&lt;br /&gt;
| 65kHz&lt;br /&gt;
|-&lt;br /&gt;
| Time constant&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
|-&lt;br /&gt;
| Sensitivity&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Phase Course&lt;br /&gt;
| 8&lt;br /&gt;
| 0&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Phase Fine&lt;br /&gt;
| 4&lt;br /&gt;
| D&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Dynamic Reserve&lt;br /&gt;
| L&lt;br /&gt;
| L&lt;br /&gt;
| L&lt;br /&gt;
|-&lt;br /&gt;
| Mode&lt;br /&gt;
| 1f&lt;br /&gt;
| 1f&lt;br /&gt;
| 1f&lt;br /&gt;
|-&lt;br /&gt;
| PLL&lt;br /&gt;
| S&lt;br /&gt;
| S&lt;br /&gt;
| S&lt;br /&gt;
|-&lt;br /&gt;
| Reference Threshold&lt;br /&gt;
| 0V&lt;br /&gt;
| 0V&lt;br /&gt;
| 0V&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=Auditory_Motion_lab_technical_info&amp;diff=4910</id>
		<title>Auditory Motion lab technical info</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=Auditory_Motion_lab_technical_info&amp;diff=4910"/>
		<updated>2026-08-11T11:17:05Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Primary sound system */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Auditory Motion Lab|back to Auditory Motion Lab]]&lt;br /&gt;
__TOC__&lt;br /&gt;
==Introduction==&lt;br /&gt;
The Auditory Motion Lab is a facility designed for experiments involving moving sound sources. The lab features a soundproof booth, ensuring an isolated testing environment. At the heart of the lab is a  two-axis robot arm suspended from the ceiling. This arm is equipped with a high-fidelity speaker capable of moving at a fixed distance around the subject&#039;s head. The centrally placed chair, which can rotate on its vertical axis, allows subjects to experience sound from various angles. Head movements are tracked using a 3-axis electromagnetic field (EMF) head tracking system. Additionally, wall-mounted speakers facing the subject provide ambient or background sounds to enrich the experimental scenarios.&lt;br /&gt;
&lt;br /&gt;
==Booth==&lt;br /&gt;
*Dimensions: LxWxH = 420x300x285cm&lt;br /&gt;
The sound booth is an acoustically isolated room with sound absorbing materials on all walls and the floor to reduce reverberation. A robot arm rotates one speaker in two dimensions (azimuth and elevation) and one speaker in one dimension (azimuth). Both have a distance of 120 cm to the centre of the booth. The speakers also contain two color LED&#039;s. In the center of the booth there is a chair for a subject. The chair is placed in a way that the head of the subject is right in center of the sphere. &lt;br /&gt;
Large coils are embedded in the walls of the sound booth. The coils make a box of about 2.5 m x 2.3 m x 2.8 m. These coils are used for head movement detection.&lt;br /&gt;
&lt;br /&gt;
An infrared camera is installed in the booth. The experimenter has a monitor from which he/she can see the inside of the booth. The camera looks down on the back of the subject.&lt;br /&gt;
===Acoustics===&lt;br /&gt;
The Booth is acoustically isolated from its environment. The walls and corners are covered by acoustic materials.&lt;br /&gt;
&lt;br /&gt;
*Walls: egg box type soundproofing foam&lt;br /&gt;
*Floor: anti-fatigue rubber floor mat with holes&lt;br /&gt;
see [[Acoustic Materials]]&lt;br /&gt;
&lt;br /&gt;
===Coordinates===&lt;br /&gt;
The orientation of the coordinates is determined by the position of the head of the subject looking to the arm speaker in its default position (= facing the wall speakers).&lt;br /&gt;
* Frontal: Front is Y+, Back is Y- &lt;br /&gt;
* Horizontal: Right is X+, Left is X-&lt;br /&gt;
* Vertical: Top is Z+, Bottom is Z-&lt;br /&gt;
&lt;br /&gt;
For Double Polar coordinates see [[Coordinate systems]]&lt;br /&gt;
&lt;br /&gt;
==Computer==&lt;br /&gt;
[[File:xxxxxxx.png|thumb|zBus Monitor]]&lt;br /&gt;
A windows computer with MATLAB, RPvdsEx and zBUSmon. The computer has an optical interface card (PO5e) for communication with the Tucker Davis equipment via the Optibit optical bus (FO5) at the back of the rack. The working of the optical bus can be monitored by the program zBUSmon program from TDT. This program has also some control functions for the optical bus. It shows all the connected zBus chassis and the TDT devices that are installed in each chassis. It also shows the version number of the installed firmware on the devices.&lt;br /&gt;
==Software==&lt;br /&gt;
%todo&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;name of the program&amp;gt;===&lt;br /&gt;
The programming of the RZ6 is based on the [[BIOX]] toolbox.&lt;br /&gt;
&lt;br /&gt;
===RPvdsX software===&lt;br /&gt;
The BIOX sofware can be found [https://gitlab.science.ru.nl/marcw/biofysica/-/tree/master/experiment/biox_rz6?ref_type=heads here] in Gitlab.&lt;br /&gt;
&lt;br /&gt;
==Electronics rack==&lt;br /&gt;
[[File:RobotLab_Electronics_Rack1.JPEG|thumb|electronics rack]]&lt;br /&gt;
From top to bottom:&lt;br /&gt;
*Patch Panel Audio Wall&lt;br /&gt;
*3x quad-channel audio amplifier &lt;br /&gt;
*24 channel Motu sound processor&lt;br /&gt;
*Zbus caddy: Left=empty; Right=Patch Panel Arm Speakers&lt;br /&gt;
*RZ6 MUlti I/O Processor&lt;br /&gt;
*Patch Panel RZ6 Digital-I/O&lt;br /&gt;
*Zbus caddy: Left=empty; Right= 6 channel ADC&lt;br /&gt;
*Frame: Left=empty; Right= Patch panel for 6 channel ADC&lt;br /&gt;
*Robot arm manual user interface&lt;br /&gt;
*Digital Eventrecorder&lt;br /&gt;
*[[Tektronix TBS 1064|Oscilloscope]]&lt;br /&gt;
*Field coil generator (amplifier)&lt;br /&gt;
*Femto Lock-in amplifier module&lt;br /&gt;
&lt;br /&gt;
==Sound system==&lt;br /&gt;
There is a primary sound system with speakers on the robot arm and a secondary sound system with speakers on the wall. The purpose of the primary system is to provide moving sound stimuli. the purpose of the secondary sound system is to provide background sounds or noise.&lt;br /&gt;
&lt;br /&gt;
===Primary sound system===&lt;br /&gt;
[[File:Auditory_Motion_Lab_Arm_Speakers.png|thumb|Speaker locations on the arm]]&lt;br /&gt;
The primary sound system consists of a programmable sound processor (RZ6) with two analog outputs (Out-A and Out-B. The RZ6 generates a sound signal that travels to a patch panel inside the booth and from there to two speakers on the robot arm.&lt;br /&gt;
&lt;br /&gt;
Speaker specifications:&lt;br /&gt;
&lt;br /&gt;
*Sensitivity: 86 dB SPL (@2.83 Vrms input)&lt;br /&gt;
*Frequency response: 150 Hz-20 kHz&lt;br /&gt;
*Impedance: 8 Ohms&lt;br /&gt;
*H x W x D: 78 x 78 x 85 mm&lt;br /&gt;
*Weight: 0.43 kg&lt;br /&gt;
&lt;br /&gt;
The speakers are connected via 2 lead wires for the sound and 3 lead wires for the LED&#039;s.&lt;br /&gt;
&lt;br /&gt;
One speaker kan rotate in two dimensions (azimuth, elevation) the other only in one dimension (azimuth). The angle between the speakers is always 90 degrees.&lt;br /&gt;
The distance of the speakers to the center of the booth (= center of the head of the subject) is 120 cm.&lt;br /&gt;
&lt;br /&gt;
===Secondary sound system===&lt;br /&gt;
The secondary sound system consists of a 24 channel Motu 24Ao USB audio sound processor, three 4 channel Behringer EPQ304 audio amplifiers, and 12 wall mounted Cambridge audio Minx Min12 speakers. The purpose of the speaker wall is to provide background noise to the moving sounds produced by the speaker(s) on the arm.&lt;br /&gt;
&lt;br /&gt;
[[File:Auditory_Motion_Lab_Wall_Speakers_poisitons.png|200px|Right|Wall speaker schematic]]&lt;br /&gt;
[[File:Auditory_Motion_Lab_Wall_Speakers.png|150px|Left|Wall speaker schematic]]&lt;br /&gt;
&lt;br /&gt;
==LED system==&lt;br /&gt;
[[File:Auditory_Motion_Lab_Leds.png|250px|thumb|LED connection schematic]]&lt;br /&gt;
The LED system consist of Red/Green LEDs mounted in the center of the arm speakers (2x) as well as the wall speakers (12x). The LEDs are controlled by the LED controller box (ID: DCN-LED12) which is mounted on the front facing wall inside the booth. The controller has an ethernet interface for the configuration settings and is triggered by the &lt;br /&gt;
&lt;br /&gt;
===Specifications Red/Green LEDs===&lt;br /&gt;
See [[LED specifications]]&lt;br /&gt;
&lt;br /&gt;
==Trigger/Timing system==&lt;br /&gt;
[[File:xxxxxxxxx.png|thumb|Scheme of trigger system]]&lt;br /&gt;
===Parts===&lt;br /&gt;
*Pushbutton (passive switch, normally open)&lt;br /&gt;
*RZ6 Buttonbox (4 passive switches, normally open; 4 led indicators)&lt;br /&gt;
*[[8 channel digital event recorder|Digital event recorder (LSLDER03)]]&lt;br /&gt;
&lt;br /&gt;
==Head Tracking System==&lt;br /&gt;
See [[EM Field Head Tracking System specifications]]&lt;br /&gt;
&lt;br /&gt;
[[File:RobotLab_Lockin_Settings.JPEG|300px|thumb|right|Lock-in amplifier settings]]&lt;br /&gt;
Three Femto LIA-BV-150-H Lock-in amplifiers are used in order to separate the Frontal, Horizontal and Vertical signals from the pick-up coil. Each Lock-in amplifier has a Sinus Oscillator Module (SOM-1) that is used both as Field Modulation Signal and as Reference Signal. The Lock-in amplifier settings are set at the front of the device (see picture), except for the modulation/reference frequency which is set inside on the SOM-board.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Frontal (Red)&lt;br /&gt;
! Vertical (Blue)&lt;br /&gt;
! Horizontal (Yellow)&lt;br /&gt;
|-&lt;br /&gt;
| Frequency&lt;br /&gt;
| 45kHz&lt;br /&gt;
| 55kHz&lt;br /&gt;
| 65kHz&lt;br /&gt;
|-&lt;br /&gt;
| Time constant&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
|-&lt;br /&gt;
| Sensitivity&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Phase Course&lt;br /&gt;
| 8&lt;br /&gt;
| 0&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Phase Fine&lt;br /&gt;
| 4&lt;br /&gt;
| D&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Dynamic Reserve&lt;br /&gt;
| L&lt;br /&gt;
| L&lt;br /&gt;
| L&lt;br /&gt;
|-&lt;br /&gt;
| Mode&lt;br /&gt;
| 1f&lt;br /&gt;
| 1f&lt;br /&gt;
| 1f&lt;br /&gt;
|-&lt;br /&gt;
| PLL&lt;br /&gt;
| S&lt;br /&gt;
| S&lt;br /&gt;
| S&lt;br /&gt;
|-&lt;br /&gt;
| Reference Threshold&lt;br /&gt;
| 0V&lt;br /&gt;
| 0V&lt;br /&gt;
| 0V&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=Auditory_Motion_lab_technical_info&amp;diff=4909</id>
		<title>Auditory Motion lab technical info</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=Auditory_Motion_lab_technical_info&amp;diff=4909"/>
		<updated>2026-08-11T11:13:45Z</updated>

		<summary type="html">&lt;p&gt;Lof: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Auditory Motion Lab|back to Auditory Motion Lab]]&lt;br /&gt;
__TOC__&lt;br /&gt;
==Introduction==&lt;br /&gt;
The Auditory Motion Lab is a facility designed for experiments involving moving sound sources. The lab features a soundproof booth, ensuring an isolated testing environment. At the heart of the lab is a  two-axis robot arm suspended from the ceiling. This arm is equipped with a high-fidelity speaker capable of moving at a fixed distance around the subject&#039;s head. The centrally placed chair, which can rotate on its vertical axis, allows subjects to experience sound from various angles. Head movements are tracked using a 3-axis electromagnetic field (EMF) head tracking system. Additionally, wall-mounted speakers facing the subject provide ambient or background sounds to enrich the experimental scenarios.&lt;br /&gt;
&lt;br /&gt;
==Booth==&lt;br /&gt;
*Dimensions: LxWxH = 420x300x285cm&lt;br /&gt;
The sound booth is an acoustically isolated room with sound absorbing materials on all walls and the floor to reduce reverberation. A robot arm rotates one speaker in two dimensions (azimuth and elevation) and one speaker in one dimension (azimuth). Both have a distance of 120 cm to the centre of the booth. The speakers also contain two color LED&#039;s. In the center of the booth there is a chair for a subject. The chair is placed in a way that the head of the subject is right in center of the sphere. &lt;br /&gt;
Large coils are embedded in the walls of the sound booth. The coils make a box of about 2.5 m x 2.3 m x 2.8 m. These coils are used for head movement detection.&lt;br /&gt;
&lt;br /&gt;
An infrared camera is installed in the booth. The experimenter has a monitor from which he/she can see the inside of the booth. The camera looks down on the back of the subject.&lt;br /&gt;
===Acoustics===&lt;br /&gt;
The Booth is acoustically isolated from its environment. The walls and corners are covered by acoustic materials.&lt;br /&gt;
&lt;br /&gt;
*Walls: egg box type soundproofing foam&lt;br /&gt;
*Floor: anti-fatigue rubber floor mat with holes&lt;br /&gt;
see [[Acoustic Materials]]&lt;br /&gt;
&lt;br /&gt;
===Coordinates===&lt;br /&gt;
The orientation of the coordinates is determined by the position of the head of the subject looking to the arm speaker in its default position (= facing the wall speakers).&lt;br /&gt;
* Frontal: Front is Y+, Back is Y- &lt;br /&gt;
* Horizontal: Right is X+, Left is X-&lt;br /&gt;
* Vertical: Top is Z+, Bottom is Z-&lt;br /&gt;
&lt;br /&gt;
For Double Polar coordinates see [[Coordinate systems]]&lt;br /&gt;
&lt;br /&gt;
==Computer==&lt;br /&gt;
[[File:xxxxxxx.png|thumb|zBus Monitor]]&lt;br /&gt;
A windows computer with MATLAB, RPvdsEx and zBUSmon. The computer has an optical interface card (PO5e) for communication with the Tucker Davis equipment via the Optibit optical bus (FO5) at the back of the rack. The working of the optical bus can be monitored by the program zBUSmon program from TDT. This program has also some control functions for the optical bus. It shows all the connected zBus chassis and the TDT devices that are installed in each chassis. It also shows the version number of the installed firmware on the devices.&lt;br /&gt;
==Software==&lt;br /&gt;
%todo&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;name of the program&amp;gt;===&lt;br /&gt;
The programming of the RZ6 is based on the [[BIOX]] toolbox.&lt;br /&gt;
&lt;br /&gt;
===RPvdsX software===&lt;br /&gt;
The BIOX sofware can be found [https://gitlab.science.ru.nl/marcw/biofysica/-/tree/master/experiment/biox_rz6?ref_type=heads here] in Gitlab.&lt;br /&gt;
&lt;br /&gt;
==Electronics rack==&lt;br /&gt;
[[File:RobotLab_Electronics_Rack1.JPEG|thumb|electronics rack]]&lt;br /&gt;
From top to bottom:&lt;br /&gt;
*Patch Panel Audio Wall&lt;br /&gt;
*3x quad-channel audio amplifier &lt;br /&gt;
*24 channel Motu sound processor&lt;br /&gt;
*Zbus caddy: Left=empty; Right=Patch Panel Arm Speakers&lt;br /&gt;
*RZ6 MUlti I/O Processor&lt;br /&gt;
*Patch Panel RZ6 Digital-I/O&lt;br /&gt;
*Zbus caddy: Left=empty; Right= 6 channel ADC&lt;br /&gt;
*Frame: Left=empty; Right= Patch panel for 6 channel ADC&lt;br /&gt;
*Robot arm manual user interface&lt;br /&gt;
*Digital Eventrecorder&lt;br /&gt;
*[[Tektronix TBS 1064|Oscilloscope]]&lt;br /&gt;
*Field coil generator (amplifier)&lt;br /&gt;
*Femto Lock-in amplifier module&lt;br /&gt;
&lt;br /&gt;
==Sound system==&lt;br /&gt;
There is a primary sound system with speakers on the robot arm and a secondary sound system with speakers on the wall. The purpose of the primary system is to provide moving sound stimuli. the purpose of the secondary sound system is to provide background sounds or noise.&lt;br /&gt;
&lt;br /&gt;
===Primary sound system===&lt;br /&gt;
[[File:Auditory_Motion_Lab_Arm_Speakers.png|thumb|Speaker locations on the arm]]&lt;br /&gt;
The primary sound system consists of a programmable sound processor (RZ6) with two analog outputs (Out-A and Out-B. The RZ6 generates a sound signal that travels to a patch panel inside the booth and from there to two speakers on the robot arm.&lt;br /&gt;
&lt;br /&gt;
Speaker specifications:&lt;br /&gt;
&lt;br /&gt;
*Sensitivity: 86 dB SPL (@2.83 Vrms input)&lt;br /&gt;
*Frequency response: 150 Hz-20 kHz&lt;br /&gt;
*Impedance: 8 Ohms&lt;br /&gt;
*H x W x D: 78 x 78 x 85 mm&lt;br /&gt;
*Weight: 0.43 kg&lt;br /&gt;
&lt;br /&gt;
The speakers are connected via 2 lead wires for the sound and 3 lead wires for the LED&#039;s.&lt;br /&gt;
&lt;br /&gt;
===Secondary sound system===&lt;br /&gt;
The secondary sound system consists of a 24 channel Motu 24Ao USB audio sound processor, three 4 channel Behringer EPQ304 audio amplifiers, and 12 wall mounted Cambridge audio Minx Min12 speakers. The purpose of the speaker wall is to provide background noise to the moving sounds produced by the speaker(s) on the arm.&lt;br /&gt;
&lt;br /&gt;
[[File:Auditory_Motion_Lab_Wall_Speakers_poisitons.png|200px|Right|Wall speaker schematic]]&lt;br /&gt;
[[File:Auditory_Motion_Lab_Wall_Speakers.png|150px|Left|Wall speaker schematic]]&lt;br /&gt;
&lt;br /&gt;
==LED system==&lt;br /&gt;
[[File:Auditory_Motion_Lab_Leds.png|250px|thumb|LED connection schematic]]&lt;br /&gt;
The LED system consist of Red/Green LEDs mounted in the center of the arm speakers (2x) as well as the wall speakers (12x). The LEDs are controlled by the LED controller box (ID: DCN-LED12) which is mounted on the front facing wall inside the booth. The controller has an ethernet interface for the configuration settings and is triggered by the &lt;br /&gt;
&lt;br /&gt;
===Specifications Red/Green LEDs===&lt;br /&gt;
See [[LED specifications]]&lt;br /&gt;
&lt;br /&gt;
==Trigger/Timing system==&lt;br /&gt;
[[File:xxxxxxxxx.png|thumb|Scheme of trigger system]]&lt;br /&gt;
===Parts===&lt;br /&gt;
*Pushbutton (passive switch, normally open)&lt;br /&gt;
*RZ6 Buttonbox (4 passive switches, normally open; 4 led indicators)&lt;br /&gt;
*[[8 channel digital event recorder|Digital event recorder (LSLDER03)]]&lt;br /&gt;
&lt;br /&gt;
==Head Tracking System==&lt;br /&gt;
See [[EM Field Head Tracking System specifications]]&lt;br /&gt;
&lt;br /&gt;
[[File:RobotLab_Lockin_Settings.JPEG|300px|thumb|right|Lock-in amplifier settings]]&lt;br /&gt;
Three Femto LIA-BV-150-H Lock-in amplifiers are used in order to separate the Frontal, Horizontal and Vertical signals from the pick-up coil. Each Lock-in amplifier has a Sinus Oscillator Module (SOM-1) that is used both as Field Modulation Signal and as Reference Signal. The Lock-in amplifier settings are set at the front of the device (see picture), except for the modulation/reference frequency which is set inside on the SOM-board.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Frontal (Red)&lt;br /&gt;
! Vertical (Blue)&lt;br /&gt;
! Horizontal (Yellow)&lt;br /&gt;
|-&lt;br /&gt;
| Frequency&lt;br /&gt;
| 45kHz&lt;br /&gt;
| 55kHz&lt;br /&gt;
| 65kHz&lt;br /&gt;
|-&lt;br /&gt;
| Time constant&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
| A&lt;br /&gt;
|-&lt;br /&gt;
| Sensitivity&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Phase Course&lt;br /&gt;
| 8&lt;br /&gt;
| 0&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Phase Fine&lt;br /&gt;
| 4&lt;br /&gt;
| D&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Dynamic Reserve&lt;br /&gt;
| L&lt;br /&gt;
| L&lt;br /&gt;
| L&lt;br /&gt;
|-&lt;br /&gt;
| Mode&lt;br /&gt;
| 1f&lt;br /&gt;
| 1f&lt;br /&gt;
| 1f&lt;br /&gt;
|-&lt;br /&gt;
| PLL&lt;br /&gt;
| S&lt;br /&gt;
| S&lt;br /&gt;
| S&lt;br /&gt;
|-&lt;br /&gt;
| Reference Threshold&lt;br /&gt;
| 0V&lt;br /&gt;
| 0V&lt;br /&gt;
| 0V&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=Sound_calibration&amp;diff=4908</id>
		<title>Sound calibration</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=Sound_calibration&amp;diff=4908"/>
		<updated>2026-06-08T09:39:11Z</updated>

		<summary type="html">&lt;p&gt;Lof: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
For continuous sounds the dBspl is normally determined by the rms of the signal. Because of the silence periods in speech there is a special way to determine the dBspl.&lt;br /&gt;
&lt;br /&gt;
==Speech==&lt;br /&gt;
The standard for speech is called Active Speech Level. It determines the dBspl by removing the silent parts from the speech. &lt;br /&gt;
&lt;br /&gt;
There are two ways to do this:&lt;br /&gt;
*More precise: Sum the rms only over the parts above a certain power threshold.&lt;br /&gt;
*More easy:    Take the rms over the total sound and estimate the percentage of silence in the speech and correct for it. &lt;br /&gt;
&lt;br /&gt;
ITU-T P.56 (Active Speech Level): This is the gold standard within speech science and telecommunications. This algorithm utilizes a dynamic threshold. Silences and background noise falling below this threshold are filtered out of the calculation. The $\text{dB SPL}$ is then calculated exclusively over the periods where speech energy is actually present.&lt;br /&gt;
&lt;br /&gt;
==Sensitivity of speakers==&lt;br /&gt;
*In all our labs we use the Cambridge Audio MINX MIN12 speaker. &lt;br /&gt;
*The speaker has a specified sensitivity of 86 dB SPL (@2.83 Vrms input and @ 1 kHz)&lt;br /&gt;
*The calibration is calculated @ 1Vrms input and depends one over the square of the distance of the speaker to the center of the subjects head.&lt;br /&gt;
&lt;br /&gt;
    Calibration = mag2db(db2mag(Sens@1V)/Distance^2)&lt;br /&gt;
&lt;br /&gt;
Table: calibration (@ 1Vrms and 1kHz) in different labs.  &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! LAB&lt;br /&gt;
! Distance (m)&lt;br /&gt;
! Calibration(dB SPL)&lt;br /&gt;
! Measured (dB SPL)&lt;br /&gt;
|-&lt;br /&gt;
| TEST LAB&lt;br /&gt;
| 1.00&lt;br /&gt;
| 80&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| AUDITORY PERCEPTION LAB &lt;br /&gt;
| 1.05&lt;br /&gt;
| 76.1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| AUDITORY SPHERE LAB&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| AUDITORY MOTION LAB&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| NIRS EEG LAB&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Sensitivity of headsets==&lt;br /&gt;
A commercial headset normally have a higher impedance than an audiological headset and therefore a higher sensitivity.&lt;br /&gt;
&lt;br /&gt;
Table: impedances and sensitivity @ 1mW and @ 1V for Headphones measured @ 1 kHz&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Model&lt;br /&gt;
! Impedance (Ohm)&lt;br /&gt;
! Sens@1mW (dB SPL)&lt;br /&gt;
! Sens@1V (dB SPL)&lt;br /&gt;
! Difference (dB)&lt;br /&gt;
! Audiological&lt;br /&gt;
|-&lt;br /&gt;
| AKG_K271_MKII&lt;br /&gt;
| 55&lt;br /&gt;
| 91&lt;br /&gt;
| 104&lt;br /&gt;
| 12.5 &lt;br /&gt;
| N&lt;br /&gt;
|-&lt;br /&gt;
| SENNHEISER_HD600&lt;br /&gt;
| 300&lt;br /&gt;
| (92)&lt;br /&gt;
| 97&lt;br /&gt;
| 5.2&lt;br /&gt;
| N&lt;br /&gt;
|-&lt;br /&gt;
| SENNHEISER_HD100&lt;br /&gt;
| 26&lt;br /&gt;
| (94)&lt;br /&gt;
| 110&lt;br /&gt;
| 15.8 &lt;br /&gt;
| N&lt;br /&gt;
|-&lt;br /&gt;
| BEYERDYNAMIC_DT_770_PRO&lt;br /&gt;
| 80&lt;br /&gt;
| 96&lt;br /&gt;
| (107)&lt;br /&gt;
| 11.0 &lt;br /&gt;
| N&lt;br /&gt;
|-&lt;br /&gt;
| SENNHEISER_HDA280&lt;br /&gt;
| 37&lt;br /&gt;
| (103)&lt;br /&gt;
| 117&lt;br /&gt;
| 14.3 &lt;br /&gt;
| Y&lt;br /&gt;
|-&lt;br /&gt;
| SENNHEISER_HDA300&lt;br /&gt;
| 23&lt;br /&gt;
| (108)&lt;br /&gt;
| 124&lt;br /&gt;
| 16.4 &lt;br /&gt;
| Y&lt;br /&gt;
|-&lt;br /&gt;
| RADIOEAR_P4492&lt;br /&gt;
| 10&lt;br /&gt;
| (107)&lt;br /&gt;
| 127&lt;br /&gt;
| 20 &lt;br /&gt;
| Y&lt;br /&gt;
|-&lt;br /&gt;
| TELEPHONICS_TDH-39P&lt;br /&gt;
| 10&lt;br /&gt;
| (108)&lt;br /&gt;
| 128&lt;br /&gt;
| 20 &lt;br /&gt;
| Y&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*The numbers are from the specs on the internet. &lt;br /&gt;
*The numbers between brackets are calculated from the difference between the 1mW and 1V sensitivity by: Sens(1V) = Sens(1mW) + 10*log10(R/1000)&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=TDT_RZ6&amp;diff=4907</id>
		<title>TDT RZ6</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=TDT_RZ6&amp;diff=4907"/>
		<updated>2026-04-02T07:52:16Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Programming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Tucker_Davis_RZ6.png|thumb|TDT RZ6 Multi I/O Processor]]&lt;br /&gt;
==Description==&lt;br /&gt;
The &#039;&#039;&#039;TDT RZ6 Multi I/O Processor&#039;&#039;&#039; is an advanced research tool tailored for (PhD) students seeking versatile capabilities in neuroscience and experimental setups. This device excels in various critical aspects:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Signal Processing Power:&#039;&#039;&#039; The RZ6 is a device, capable of real-time signal processing, making it ideal for experiments requiring precise timing and complex data manipulation.&lt;br /&gt;
# &#039;&#039;&#039;Multimodal Data Acquisition:&#039;&#039;&#039; It can simultaneously acquire multiple types of data, such as neural signals, analog inputs, and digital events, allowing for comprehensive experimental monitoring.&lt;br /&gt;
# &#039;&#039;&#039;Customizable Experimentation:&#039;&#039;&#039; The BIOX toolbox enables flexible programming for students designing and controlling experiments with a high degree of specificity.&lt;br /&gt;
# &#039;&#039;&#039;Synchronization:&#039;&#039;&#039; The RZ6 I/O can be used for synchronizing with other devices, ensuring precise timing between various components of an experimental setup.&lt;br /&gt;
# &#039;&#039;&#039;Stimulation Capabilities:&#039;&#039;&#039; Students can employ the RZ6 to deliver precisely timed stimuli, making it valuable for a wide range of experiments involving sensory or behavioral responses.&lt;br /&gt;
# &#039;&#039;&#039;MATLAB Integration:&#039;&#039;&#039; The RZ6 is fully compatible, facilitating seamless integration and data analysis within MATLAB.&lt;br /&gt;
# &#039;&#039;&#039;Reliability:&#039;&#039;&#039; It has a reputation for robustness and durability that students can rely on for consistent, high-quality data collection.&lt;br /&gt;
&lt;br /&gt;
Biophysics has developed software for the RZ6 called [[BIOX]], which has an easy interface with Matlab.&lt;br /&gt;
&lt;br /&gt;
==Technical info==&lt;br /&gt;
[[File: EEG_NIRS_RZ6_architecture.jpg|thumb|RZ6 architecture]]&lt;br /&gt;
Relevant manual from TDT&lt;br /&gt;
* Overview: https://www.tdt.com/docs/.&lt;br /&gt;
* RZ6: https://www.tdt.com/files/manuals/hardware/RZ6.pdf.&lt;br /&gt;
* PM2Relay: https://www.tdt.com/files/manuals/hardware/PM2R.pdf. &lt;br /&gt;
* RPvdsEx: http://www.tdt.com/files/manuals/RPvdsEx_Manual.pdf. &lt;br /&gt;
* ActiveX: http://www.tdt.com/files/manuals/ActiveX_User_Reference.pdf.&lt;br /&gt;
&lt;br /&gt;
TDT ActiveX controls enable Matlab to real-time control TDT system 3 hardware. See page 5 of the manual for example code to use Matlab to get a circuit running on the RZ6. Examples can be found in C:\TDT\ActiveX\ActXExamples\matlab.&lt;br /&gt;
&lt;br /&gt;
===Digital I/O===&lt;br /&gt;
[[File: RZ6_DB25_Digital_IO_pinout.jpg|thumb|DB25 Digital I/O pinout]]&lt;br /&gt;
[[File: PP_RZ6_Digital_IO_connections.png|thumb|PP RZ6 Digital I/O pinout]]&lt;br /&gt;
The RZ6 has a DB25 connector for digital I/O. A custom patch panel &#039;PP RZ6 Digital-I/O&#039; is available that splits the I/O to a DB25 connector for multiplexer control, a DB25 connector for a response box and eight BNC connector for separate I/O bits.&lt;br /&gt;
&lt;br /&gt;
====Multiplexer control====&lt;br /&gt;
&lt;br /&gt;
Byte-C is for multiplexer control. Four PM2R multiplexer can be controlled via this output. The fifth and sixth bit of byte-C codes for the PM2R device ID (0-3). The first four bits for the channel number. Only one channel can be open at a time for each PM2R. The seventh bit opens the channel and the eighth bit closes any open channel.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit number !! Integer value !! Function&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || Bit 1 (least significant bit) of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || Bit 2 of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || Bit 3 of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 || Bit 4 (most significant bit) of channel number&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 16 || Least significant bit of device number&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 32 || Most significant bit of device number&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 64 || Turns on the channel of the specified device&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 128 || Turns off all channels on the specified device only&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Response Box====&lt;br /&gt;
%todo&lt;br /&gt;
&lt;br /&gt;
====Digital I/O breakout====&lt;br /&gt;
The Digital I/O of the RZ6 has 24 digital lines forming byte A, B and C. For these digital lines we made a breakout panel named PP RZ6 Digital I/O. This panel has a DSub25-M connector for hooking up to the RZ6, a DSub25-M connector for connecting PM2R multiplexers to the RZ6 and a DSub25-F connector for connecting a Response Box to the RZ6. The input bits A4..A7 and output bits B4..B7 each have a BNC connector. The output bits can be used for sending trigger to other devices. The input bits can be used for receiving triggers (e.g. from a pushbutton).&lt;br /&gt;
&lt;br /&gt;
==Programming==&lt;br /&gt;
&lt;br /&gt;
===RPvdsEx===&lt;br /&gt;
The programming of the RZ6 is done in RPvdsEx, which is a graphical development tool by Tucker Davis Technologies.&lt;br /&gt;
&lt;br /&gt;
===Matlab interface (ActiveX control)===&lt;br /&gt;
The current (as of march 2024) Matlab interface for the TDT devices is based on the function &amp;quot;actxserver&amp;quot;. Previously &amp;quot;actxcontrol&amp;quot; was used, but this will be obsolete in the near future.&lt;br /&gt;
&lt;br /&gt;
====Installing ActiveX control====&lt;br /&gt;
&lt;br /&gt;
*Go to the website of Tucker Davis technologies. Go to support\downloads.&lt;br /&gt;
*Download &#039;ActiveX Controls&#039;&lt;br /&gt;
*Run the executable&lt;br /&gt;
*When asked for a password use the password &#039;spider&#039;.&lt;br /&gt;
&lt;br /&gt;
====Matlab functions==== &lt;br /&gt;
&lt;br /&gt;
The following device driver functions are available in the biofysica toolbox: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function [module, err, errstr] = RZ6(number,circuit)&lt;br /&gt;
function [module, err, errstr] = ZBUS(nRacks)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Module&amp;quot; is an object with device specific functionality. &amp;quot;number&amp;quot; (or &amp;quot;nRacks&amp;quot;) is given in order to distinguish between different hardware of the same type. &amp;quot;circuit&amp;quot; is the filename of the program that should be uploaded to the device.&lt;br /&gt;
&amp;quot;err&amp;quot; gives an integer and &amp;quot;errstr&amp;quot; the corresponding error message. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Error codes:&lt;br /&gt;
 0 ==&amp;gt; all devices: no error&lt;br /&gt;
-1 ==&amp;gt; all devices: failed to connect&lt;br /&gt;
-2 ==&amp;gt; RZ6: failed to load circuit; zBus: failed to reset&lt;br /&gt;
-3 ==&amp;gt; zBus: failed to flush IO&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more on the device drivers see [https://www.tdt.com/files/manuals/ActiveX_User_Reference.pdf ActiveX_User_Reference.pdf].&lt;br /&gt;
&lt;br /&gt;
===BIOX toolbox===&lt;br /&gt;
We have developed a toolbox that can perform tasks for a large number of different experiments. It consists of RPvdsEx code for the RZ6 and a set easy to use Matlab functions.&lt;br /&gt;
* see [[BIOX]]&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EyeSeeCam_SCI&amp;diff=4906</id>
		<title>EyeSeeCam SCI</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EyeSeeCam_SCI&amp;diff=4906"/>
		<updated>2026-04-01T11:30:20Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Matlab coding */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:EyeSeeCam_SCI2.png|thumb|EyeSeeCam SCI]]&lt;br /&gt;
==Description==&lt;br /&gt;
The EyeSeeCam SCI is a combined eye tracker and head movement tracker. The head tracking is done with an IMU and the eye tracking is done with cameras and software that tracks the pupils of both eyes. The tracking data can be read out directly in Matlab. In case a dedicated computer is used for reading out the EyeSeeCam, the data it is converted to an LSL stream. &lt;br /&gt;
&lt;br /&gt;
The EyeSeeCam Sci can record at 250 and and 500 Hz. We are typically recording at 500 Hz.&lt;br /&gt;
&lt;br /&gt;
==Setup==&lt;br /&gt;
&lt;br /&gt;
* The EyeSeeCam is connected to a NUC with two USB-C cables.&lt;br /&gt;
* The NUC is connected via ethernet with a Mac Mini.&lt;br /&gt;
* The Mac Mini runs an EyeSeeCam SCI program.&lt;br /&gt;
* The Mac Mini runs an LSL server for data transfer to a Windows Computer&lt;br /&gt;
* The windows computer runs Matlab and connect with an LSL-stream to the LSL server on the Mac Mini.&lt;br /&gt;
&lt;br /&gt;
==Startup Instructions==&lt;br /&gt;
&lt;br /&gt;
* Connect the EyeSeeCam to the NUC&lt;br /&gt;
* Remove both lens covers of the EyeSeeCam&lt;br /&gt;
* Start the NUC&lt;br /&gt;
* Start the Mac Mini&lt;br /&gt;
* Login on the Mac Mini to &#039;EyeSeeCam&#039; with password &#039;Gimbal&#039;&lt;br /&gt;
* Start the LSL script on the Mac Mini(is on the desktop)&lt;br /&gt;
* Start the EyeSeeCam SCI program on the Mac Mini&lt;br /&gt;
* Start a matlab program on the windows computer (e.g. EG_program.m)&lt;br /&gt;
* Press the &amp;lt;begin&amp;gt; button in the EyeSeeCam SCI program on the Mac Mini (in the top right corner)&lt;br /&gt;
* Let the subject put on the EyeSeeCam&lt;br /&gt;
* Press &amp;lt;prepare&amp;gt; in the EyeSeeCam SCI program on the Mac Mini (shows the traces)&lt;br /&gt;
* Press &amp;lt;start&amp;gt; in the EyeSeeCam SCI program on the Mac Mini (starts collecting data)&lt;br /&gt;
* Start the experiment&lt;br /&gt;
&lt;br /&gt;
==Matlab coding==&lt;br /&gt;
&lt;br /&gt;
The EyeSeeCam is connected to a Mac Mini. On the Mac runs an LSL server (for more info about LSL see [[LabStreamingLayer]]). In order to get data from the EyeSeeCam you create an lslStream and session in matlab.&lt;br /&gt;
&lt;br /&gt;
Here is an example:&lt;br /&gt;
&lt;br /&gt;
 type = &#039;EyeSeeCam @ dcn-pl04&#039;;&lt;br /&gt;
 name = &#039;EyeSeeCam SCI Data&#039;;&lt;br /&gt;
 lslString = sprintf(&#039;type=&#039;&#039;%s&#039;&#039; and name=&#039;&#039;%s&#039;&#039;&#039;, type, name);&lt;br /&gt;
 info=lsl_resolver(lslString);&lt;br /&gt;
 lslStream = lsl_istream(info{1});&lt;br /&gt;
&lt;br /&gt;
 session = lsl_session;&lt;br /&gt;
 session.add_stream(lslStream);&lt;br /&gt;
&lt;br /&gt;
 session.start;&lt;br /&gt;
 ...wait some time...&lt;br /&gt;
 session.stop;&lt;br /&gt;
 data = lslStream.read;&lt;br /&gt;
&lt;br /&gt;
==Construction of a gaze trace==&lt;br /&gt;
The data from EyeSeeCam is recorded in different coordinate systems than the double polar system that we use to present our targets. The head and eye tracking data each have their own coordinate system. To accurately analyze our data we have to transform these coordinate systems to double polar coordinates in the lab frame. In order to relate the EyeSeeCam coordinates to the lab coordinates, we first need to record a starting gaze position for each trial. This means that during the recording, the subject has to look at the center speaker (0,0) when the trial starts. &lt;br /&gt;
&lt;br /&gt;
From the EyeSeeCam data we can construct a head movement trace and an eye movement trace. These can be combined to create a gaze trace.&lt;br /&gt;
&lt;br /&gt;
In Matlab we can use the class &#039;EyeSeeCamSci_Trace&#039; for calculating head, eye and gaze traces in RAS, HVF and DP coordinates.&lt;br /&gt;
&lt;br /&gt;
===Defining a coordinate system===&lt;br /&gt;
&lt;br /&gt;
For the purpose of the interpretation of the EyeSeeCam data we will define the starting direction as the direction the subject looks at at the beginning of each trial. The recording of the data should start when the subject is looking in this direction. &amp;lt;br&amp;gt;&lt;br /&gt;
The X, Y and Z of the EyeSeeCam data are in terms of RAS coordinates:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = anterior&lt;br /&gt;
Y = -right&lt;br /&gt;
Z = superior&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* When using &#039;EyeSeeCamSci_Trace&#039; head and gaze traces with RAS coordinates the values are relative to the starting position of subject. &lt;br /&gt;
* The HVF and DP coordinates of the eye trace are only valid when the head stays in the starting position.&lt;br /&gt;
&lt;br /&gt;
===Head movement===&lt;br /&gt;
EyeSeeCam_Sci provides us angle velocities for rotations around the  X,Y, and Z axes. For our analyses we want to have position data, so we have to calculate the position data from these angle velocities.&lt;br /&gt;
 &lt;br /&gt;
The head rotation axis X, Y and Z are defined with respect to the EyeSeeCam itself. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The EyeSeeCam data is &#039;&#039;&#039;not&#039;&#039;&#039; in the lab frame!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to create a head movement trace we have to calculate rotation matrices (delta_Rx, delta_Ry and delta_Rz) in EyeSeeCam coordinates for every time step. &lt;br /&gt;
&lt;br /&gt;
Since the time steps are about 2 ms (or 4 ms) the rotations for each time step are small. Therefore the order in which delta_Rx, delta_Ry and delta_Rz are multiplied are not important and we calculate delta_R(t) in EyeSeeCam coordinates by &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
delta_R(t) = delta_Rx * delta_Ry * delta_Rz.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the total rotation matrix in lab coordinates at time t we have iterate over all the time steps &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
R(t=0) = identity matrix&lt;br /&gt;
for t = 0 to t = tmax&lt;br /&gt;
   R(t) = R(t-delta_t) * delta_R(t)&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eye movement===&lt;br /&gt;
&lt;br /&gt;
The eye movements are given by rotations in the same coordinate system as the head movements.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = anterior (torsion of the pupil in the gaze direction)&lt;br /&gt;
Y = -right&lt;br /&gt;
Z = superior&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The torsion is not important for the gaze direction and is therefore excluded from the calculation.&lt;br /&gt;
&lt;br /&gt;
Azimuth can be defined as a rotation about the Z axis and Elevation as a contra rotation about the Y axis.&lt;br /&gt;
&lt;br /&gt;
Since the eye gaze is given as a rotation angle in OCS coordinates and the eye and head tracker coordinate are fixed relative to each other, we can easily transform OCS coordinates to the EyeSeeCam coordinates. We can then create rotation matrices in the EyeSeeCam coordinates for the azimuth and elevation of the gaze. Since the torsion is excluded the rotation matrices for azimuth and elevation can be multiplied in any order to get the eye rotation matrix in EyeSeeCam coordinates.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
eye_Rz(t) = Rz(eye_azimuth(t))&lt;br /&gt;
eye_Ry(t) = Ry(-eye_elevation(t))&lt;br /&gt;
eye_R(t)  = eye_Ry(t) * eye_Rz(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Gaze movement===&lt;br /&gt;
&lt;br /&gt;
The gaze movement is the combined head and eye movement.&lt;br /&gt;
To create the total rotation matrix that represents the &#039;gaze&#039; rotation in lab coordinates, you need to multiply the two rotation matrices you have for head and eye movement in the correct order. In your case, you have:&lt;br /&gt;
&lt;br /&gt;
A rotation matrix for the head in lab coordinates.&lt;br /&gt;
A rotation matrix for the eyes in head coordinates.&lt;br /&gt;
The correct order of multiplication is as follows:&lt;br /&gt;
&lt;br /&gt;
First, multiply the rotation matrix of the head in lab coordinates by the rotation matrix of the eyes in head coordinates.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
R_gaze(t) = head_R(t) * eye_R(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lastly you can multiply the R_gaze(t) with the starting gaze vector to get the gaze (in lab coordinates) at time t. We assume that the starting gaze is in the forward direction, which is in the X direction in the lab coordinates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
startingGaze = [1; 0; 0]&lt;br /&gt;
gaze(t) = R_gaze(t) * startingGaze&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Matlab code for converting raw data==&lt;br /&gt;
&lt;br /&gt;
===Functions for converting EyeSeeCam data to double polar data===&lt;br /&gt;
There is one function for head movement, one for eye movement and one for gaze movement. The gaze movement combines head and eye movement.&lt;br /&gt;
&lt;br /&gt;
The functions take head rotation speeds and eye rotations (in degrees) as input and give objects containing the traces (head, eye and gaze respectivily) in double polar coordinates as output.&lt;br /&gt;
&lt;br /&gt;
* headTrace_DP = EyeSeeCamSciHeadRotationData2Trace_DP(Vx_deg, Vy_deg, Vz_deg)&lt;br /&gt;
* eyeTrace_DP  = EyeSeeCamSciEyeRotationData2Trace_DP(Zocs_deg, Yocs_deg)&lt;br /&gt;
* gazeTrace_DP = EyeSeeCamSciHeadAndEyeRotationData2Trace_DP(Vx_deg, Vy_deg, Vz_deg, Zocs_deg, Yocs_deg)&lt;br /&gt;
&lt;br /&gt;
The Vx, Vy and Vz are the head rotation speeds in the EyeSeeCam coordinates&lt;br /&gt;
The Zocs and Yocs are the eye rotations in OCS coordinates.&lt;br /&gt;
&lt;br /&gt;
===EyeSeeCam data===&lt;br /&gt;
The recorded data is read from an LSL stream.&lt;br /&gt;
&lt;br /&gt;
The lsldata is a struct and has the following fields:&lt;br /&gt;
*escdata&lt;br /&gt;
*escmetadata&lt;br /&gt;
*escstr&lt;br /&gt;
*evdata0&lt;br /&gt;
*evdata1&lt;br /&gt;
*evdata2&lt;br /&gt;
*evdata3&lt;br /&gt;
*evdata4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The lsldata.escdata contains the eye and head data. The data contains a matrix for with a row for every parameter. The total of parameters is 63. The field lsldata.escmetadata.channel lists all the names of the parameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%Eye data&lt;br /&gt;
&lt;br /&gt;
RightEyePosX = 46;&lt;br /&gt;
RightEyePosY = 47;&lt;br /&gt;
RightEyePosZ = 48;&lt;br /&gt;
&lt;br /&gt;
xeye = lsldata.escdata.Data(46,:);       % right 46, left 32&lt;br /&gt;
yeye = lsldata.escdata.Data(47,:);       % right 47, left 33&lt;br /&gt;
zeye = lsldata.escdata.Data(48,:);       % right 48, left 34&lt;br /&gt;
&lt;br /&gt;
% Head data&lt;br /&gt;
HeadInertialVelXCal = 27;&lt;br /&gt;
HeadInertialVelYCal = 29;&lt;br /&gt;
HeadInertialVelZCal = 31;&lt;br /&gt;
&lt;br /&gt;
xh = lsldata.escdata.Data(27,:);       % calibrated torion velocity data HEAD&lt;br /&gt;
yh = lsldata.escdata.Data(29,:);       % calibrated vertical velocity data HEAD&lt;br /&gt;
zh = lsldata.escdata.Data(31,:);       % calibrated horizontal velocity data HEAD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=How_to&amp;diff=4905</id>
		<title>How to</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=How_to&amp;diff=4905"/>
		<updated>2026-04-01T11:29:38Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Lab==&lt;br /&gt;
*How to make a lab [[QReserve|reservation]]?&lt;br /&gt;
*How to report an [[Issues Tracking|issue]]?&lt;br /&gt;
*How to work with [[Ethics &amp;amp; Subjects|subjects]]?&lt;br /&gt;
*How to use a [[Lab journal|lab journal]]?&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
*How to use a [[DCN LED controller|DCN LED controller]]?&lt;br /&gt;
*How to use the [[PLC LED controller specifications|PLC LED controller]]?&lt;br /&gt;
*How to use a [[Digital Event Recorder]]?&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
*How to use [[Gitlab]]?&lt;br /&gt;
*How to use [[BIOX]]?&lt;br /&gt;
*How to use [[LabStreamingLayer|LabStreamingLayer (LSL)]]?&lt;br /&gt;
*How to use [[Coordinate systems]] in experiments?&lt;br /&gt;
*How to use [[Units in Matlab]]?&lt;br /&gt;
*How to make a [[Programming a GUI|Graphical User Interface (GUI)]] in Matlab?&lt;br /&gt;
*How to make [[Ripple Sounds]]?&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=LabStreamingLayer&amp;diff=4904</id>
		<title>LabStreamingLayer</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=LabStreamingLayer&amp;diff=4904"/>
		<updated>2026-04-01T11:28:47Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Some devices with LSL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
LabStreamingLayer (LSL) is a framework and protocol designed for the real-time streaming of time-series data. It is primarily used in research and scientific applications, especially in fields such as neuroscience, psychology, and physiology, where the collection and synchronization of data from multiple sources are crucial.&lt;br /&gt;
&lt;br /&gt;
*Real-time Data Streaming: LSL allows the continuous and real-time transmission of data from various sources, such as sensors, recording devices, and software applications. This can include EEG, ECG, eye-tracking data, motion capture, and more.&lt;br /&gt;
&lt;br /&gt;
*Data Synchronization: LSL provides a mechanism for synchronizing data streams from multiple devices or applications.&lt;br /&gt;
&lt;br /&gt;
*Cross-Platform Support: LSL is platform-independent and can be used on various operating systems, including Windows, macOS, and Linux.&lt;br /&gt;
&lt;br /&gt;
*Language Support: LSL offers libraries and bindings for several programming languages, including Python, C/C++, Java, MATLAB, and others.&lt;br /&gt;
&lt;br /&gt;
*Flexible Data Types: It supports various data types, including numeric, string, and marker data, making it adaptable to different types of experiments and data formats.&lt;br /&gt;
&lt;br /&gt;
*Open Source: LabStreamingLayer is an open-source project, which means it is continuously developed and improved by a community of researchers and developers.&lt;br /&gt;
&lt;br /&gt;
*Network Capabilities: LSL supports both local data streaming (within a single computer) and network-based streaming.&lt;br /&gt;
&lt;br /&gt;
*Timestamps: LSL provides high-precision timestamps.&lt;br /&gt;
&lt;br /&gt;
==How to use LSL in Matlab==&lt;br /&gt;
In our biofysica repository in Gitlab we have [https://gitlab.science.ru.nl/marcw/biofysica/-/tree/master/liblsl/liblsl-Matlab?ref_type=heads matlab code] for accessing LSL devices. In the repository there are also examples for how to read the data from these devices.&lt;br /&gt;
&lt;br /&gt;
You can get a list of all available LSL-streams by executing the Matlab command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsl_list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Every stream has a type and a name. With the function &#039;&#039;&#039;lsl_resolver&#039;&#039;&#039; you can get the LSL info of available streams. You can look for a specific stream by specifying the stream type and/or the name in a string parameter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsl_resolver(&#039;type=&#039;&#039;&amp;lt;stream type&amp;gt; @ &amp;lt;hostname&amp;gt;&#039;&#039; and name=&#039;&#039;&amp;lt;stream name&amp;gt;&#039;&#039;&#039;)  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The hostname is the name of the computer to which a LSL capable device (e.g. eyetrackers) is attached or the name of an embedded computer as is the case for Digital Event Recorders.&lt;br /&gt;
&lt;br /&gt;
The following code example checks whether an LSL stream is available for the stream type &#039;&#039;&#039;Digital Events&#039;&#039;&#039; on host &#039;&#039;&#039;lslder04&#039;&#039;&#039; and the stream name &#039;&#039;&#039;Digital Events 1&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lslInfo = lsl_resolver(&#039;type=&#039;&#039;Digital Events @ lslder04&#039;&#039; and name=&#039;&#039;Digital Events 1&#039;&#039;&#039;);&lt;br /&gt;
streamInfoList = lslInfo.list;&lt;br /&gt;
if isempty(streamInfoList)&lt;br /&gt;
   error(&#039;no streams found&#039;);&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In this case the &#039;&#039;&#039;streamInfoList&#039;&#039;&#039; contains only one stream (or none). If you want to find all available streams you can use:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lslInfo = lsl_resolver&lt;br /&gt;
streamInfoList = lslInfo.list;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following code prints all the types and names of the streams that are found:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for i = 1:size(streamInfoList ,1)&lt;br /&gt;
    fprintf(&#039;%d: name: &#039;&#039;%s&#039;&#039; type: &#039;&#039;%s&#039;&#039;\n&#039;,i,streamInfoList{i}.name,streamInfoList{i}.type);&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can get the n-th stream in streamInfoList by using &#039;&#039;&#039;lsl_istream&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
stream_n = lsl_istream(lslInfo{n});&lt;br /&gt;
stream_m = lsl_istream(lslInfo{m});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following code creates an &#039;&#039;&#039;lsl_session&#039;&#039;&#039; and add two streams to the session. You can add as many streams as you like.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mySession = lsl_session();&lt;br /&gt;
mySession.add_stream(stream_n);&lt;br /&gt;
mySession.add_stream(stream_m);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can start a session, do your experiment and stop the session and read the data from the streams.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mySession.start;&lt;br /&gt;
% do you experiment&lt;br /&gt;
mySession.stop;&lt;br /&gt;
data_n = stream_n.read;&lt;br /&gt;
data_m = stream_m.read;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More information and examples can be found [https://gitlab.science.ru.nl/marcw/biofysica/-/blob/master/liblsl/liblsl-Matlab/examples/README.md?ref_type=heads here] on Gitlab.&lt;br /&gt;
&lt;br /&gt;
==Some devices with LSL==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Device&lt;br /&gt;
! Stream Type&lt;br /&gt;
! Stream Name&lt;br /&gt;
|-&lt;br /&gt;
| Digital Event Recorder&lt;br /&gt;
| Digital Events @ &amp;lt;hostname&amp;gt;&lt;br /&gt;
| Digital Events X&lt;br /&gt;
|-&lt;br /&gt;
| Digital Event Recorder&lt;br /&gt;
| Markers @ &amp;lt;hostname&amp;gt;&lt;br /&gt;
| Digital Markers&lt;br /&gt;
|-&lt;br /&gt;
| Pupil Labs Eyetracker&lt;br /&gt;
| Pupil Capture @ &amp;lt;hostname&amp;gt;&lt;br /&gt;
| Pupil Primitive Data - Eye 0&lt;br /&gt;
|-&lt;br /&gt;
| Pupil Labs Eyetracker&lt;br /&gt;
| Pupil Capture @ &amp;lt;hostname&amp;gt;&lt;br /&gt;
| Pupil Python Representation - Eye 0&lt;br /&gt;
|-&lt;br /&gt;
| Pupil Labs Eyetracker&lt;br /&gt;
| Pupil Gaze @ &amp;lt;hostname&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| OptiTrack Eyetracker&lt;br /&gt;
| OptiTrack Mocap @ &amp;lt;hostname&amp;gt;&lt;br /&gt;
| Labeled Markers&lt;br /&gt;
|-&lt;br /&gt;
| EyeSeeCam Eyetracker&lt;br /&gt;
| EyeSeeCam @ &amp;lt;hostname&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Matlab Example==&lt;br /&gt;
&lt;br /&gt;
*Open a stream to the EyeSeeCam&lt;br /&gt;
&lt;br /&gt;
 type = &#039;EyeSeeCam @ dcn-pl04&#039;;&lt;br /&gt;
 name = &#039;EyeSeeCam SCI Data&#039;;&lt;br /&gt;
 lslString = sprintf(&#039;type= &#039;&#039;%s&#039;&#039; and name= &#039;&#039;%s&#039;&#039;&#039;, type, name);&lt;br /&gt;
 info=lsl_resolver(lslString);&lt;br /&gt;
 lslStream = lsl_istream(info{1});&lt;br /&gt;
&lt;br /&gt;
*Open a session and add the stream to the session.&lt;br /&gt;
&lt;br /&gt;
 session = lsl_session;&lt;br /&gt;
 session.add_stream(lslStream);&lt;br /&gt;
&lt;br /&gt;
*Start and stop the session and get the data from the stream.&lt;br /&gt;
&lt;br /&gt;
 session.start;&lt;br /&gt;
 ....wait some time....&lt;br /&gt;
 session.stop;&lt;br /&gt;
 data = lslStream.read;&lt;br /&gt;
&lt;br /&gt;
In the directory &amp;lt;...biofysica\liblsl\liblsl-Matlab\examples&amp;gt; you can find more examples (with descriptions in the readme.md file).&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=LabStreamingLayer&amp;diff=4903</id>
		<title>LabStreamingLayer</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=LabStreamingLayer&amp;diff=4903"/>
		<updated>2026-04-01T11:25:41Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Some devices with LSL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
LabStreamingLayer (LSL) is a framework and protocol designed for the real-time streaming of time-series data. It is primarily used in research and scientific applications, especially in fields such as neuroscience, psychology, and physiology, where the collection and synchronization of data from multiple sources are crucial.&lt;br /&gt;
&lt;br /&gt;
*Real-time Data Streaming: LSL allows the continuous and real-time transmission of data from various sources, such as sensors, recording devices, and software applications. This can include EEG, ECG, eye-tracking data, motion capture, and more.&lt;br /&gt;
&lt;br /&gt;
*Data Synchronization: LSL provides a mechanism for synchronizing data streams from multiple devices or applications.&lt;br /&gt;
&lt;br /&gt;
*Cross-Platform Support: LSL is platform-independent and can be used on various operating systems, including Windows, macOS, and Linux.&lt;br /&gt;
&lt;br /&gt;
*Language Support: LSL offers libraries and bindings for several programming languages, including Python, C/C++, Java, MATLAB, and others.&lt;br /&gt;
&lt;br /&gt;
*Flexible Data Types: It supports various data types, including numeric, string, and marker data, making it adaptable to different types of experiments and data formats.&lt;br /&gt;
&lt;br /&gt;
*Open Source: LabStreamingLayer is an open-source project, which means it is continuously developed and improved by a community of researchers and developers.&lt;br /&gt;
&lt;br /&gt;
*Network Capabilities: LSL supports both local data streaming (within a single computer) and network-based streaming.&lt;br /&gt;
&lt;br /&gt;
*Timestamps: LSL provides high-precision timestamps.&lt;br /&gt;
&lt;br /&gt;
==How to use LSL in Matlab==&lt;br /&gt;
In our biofysica repository in Gitlab we have [https://gitlab.science.ru.nl/marcw/biofysica/-/tree/master/liblsl/liblsl-Matlab?ref_type=heads matlab code] for accessing LSL devices. In the repository there are also examples for how to read the data from these devices.&lt;br /&gt;
&lt;br /&gt;
You can get a list of all available LSL-streams by executing the Matlab command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsl_list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Every stream has a type and a name. With the function &#039;&#039;&#039;lsl_resolver&#039;&#039;&#039; you can get the LSL info of available streams. You can look for a specific stream by specifying the stream type and/or the name in a string parameter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsl_resolver(&#039;type=&#039;&#039;&amp;lt;stream type&amp;gt; @ &amp;lt;hostname&amp;gt;&#039;&#039; and name=&#039;&#039;&amp;lt;stream name&amp;gt;&#039;&#039;&#039;)  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The hostname is the name of the computer to which a LSL capable device (e.g. eyetrackers) is attached or the name of an embedded computer as is the case for Digital Event Recorders.&lt;br /&gt;
&lt;br /&gt;
The following code example checks whether an LSL stream is available for the stream type &#039;&#039;&#039;Digital Events&#039;&#039;&#039; on host &#039;&#039;&#039;lslder04&#039;&#039;&#039; and the stream name &#039;&#039;&#039;Digital Events 1&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lslInfo = lsl_resolver(&#039;type=&#039;&#039;Digital Events @ lslder04&#039;&#039; and name=&#039;&#039;Digital Events 1&#039;&#039;&#039;);&lt;br /&gt;
streamInfoList = lslInfo.list;&lt;br /&gt;
if isempty(streamInfoList)&lt;br /&gt;
   error(&#039;no streams found&#039;);&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In this case the &#039;&#039;&#039;streamInfoList&#039;&#039;&#039; contains only one stream (or none). If you want to find all available streams you can use:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lslInfo = lsl_resolver&lt;br /&gt;
streamInfoList = lslInfo.list;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following code prints all the types and names of the streams that are found:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for i = 1:size(streamInfoList ,1)&lt;br /&gt;
    fprintf(&#039;%d: name: &#039;&#039;%s&#039;&#039; type: &#039;&#039;%s&#039;&#039;\n&#039;,i,streamInfoList{i}.name,streamInfoList{i}.type);&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can get the n-th stream in streamInfoList by using &#039;&#039;&#039;lsl_istream&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
stream_n = lsl_istream(lslInfo{n});&lt;br /&gt;
stream_m = lsl_istream(lslInfo{m});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following code creates an &#039;&#039;&#039;lsl_session&#039;&#039;&#039; and add two streams to the session. You can add as many streams as you like.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mySession = lsl_session();&lt;br /&gt;
mySession.add_stream(stream_n);&lt;br /&gt;
mySession.add_stream(stream_m);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can start a session, do your experiment and stop the session and read the data from the streams.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mySession.start;&lt;br /&gt;
% do you experiment&lt;br /&gt;
mySession.stop;&lt;br /&gt;
data_n = stream_n.read;&lt;br /&gt;
data_m = stream_m.read;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More information and examples can be found [https://gitlab.science.ru.nl/marcw/biofysica/-/blob/master/liblsl/liblsl-Matlab/examples/README.md?ref_type=heads here] on Gitlab.&lt;br /&gt;
&lt;br /&gt;
==Some devices with LSL==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Device&lt;br /&gt;
! Stream Type&lt;br /&gt;
! Stream Name&lt;br /&gt;
|-&lt;br /&gt;
| Digital Event Recorder&lt;br /&gt;
| Digital Events @ &amp;lt;hostname&amp;gt;&lt;br /&gt;
| Digital Events X&lt;br /&gt;
|-&lt;br /&gt;
| Digital Event Recorder&lt;br /&gt;
| Markers @ &amp;lt;hostname&amp;gt;&lt;br /&gt;
| Digital Markers&lt;br /&gt;
|-&lt;br /&gt;
| Pupil Labs Eyetracker&lt;br /&gt;
| Pupil Capture @ &amp;lt;hostname&amp;gt;&lt;br /&gt;
| Pupil Primitive Data - Eye 0&lt;br /&gt;
|-&lt;br /&gt;
| Pupil Labs Eyetracker&lt;br /&gt;
| Pupil Capture @ &amp;lt;hostname&amp;gt;&lt;br /&gt;
| Pupil Python Representation - Eye 0&lt;br /&gt;
|-&lt;br /&gt;
| Pupil Labs Eyetracker&lt;br /&gt;
| Pupil Gaze @ &amp;lt;hostname&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| OptiTrack Eyetracker&lt;br /&gt;
| OptiTrack Mocap @ &amp;lt;hostname&amp;gt;&lt;br /&gt;
| Labeled Markers&lt;br /&gt;
|-&lt;br /&gt;
| EyeSeeCam Eyetracker&lt;br /&gt;
| EyeSeeCam @ &amp;lt;hostname&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EyeSeeCam_SCI&amp;diff=4902</id>
		<title>EyeSeeCam SCI</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EyeSeeCam_SCI&amp;diff=4902"/>
		<updated>2026-04-01T11:23:29Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Matlab programming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:EyeSeeCam_SCI2.png|thumb|EyeSeeCam SCI]]&lt;br /&gt;
==Description==&lt;br /&gt;
The EyeSeeCam SCI is a combined eye tracker and head movement tracker. The head tracking is done with an IMU and the eye tracking is done with cameras and software that tracks the pupils of both eyes. The tracking data can be read out directly in Matlab. In case a dedicated computer is used for reading out the EyeSeeCam, the data it is converted to an LSL stream. &lt;br /&gt;
&lt;br /&gt;
The EyeSeeCam Sci can record at 250 and and 500 Hz. We are typically recording at 500 Hz.&lt;br /&gt;
&lt;br /&gt;
==Setup==&lt;br /&gt;
&lt;br /&gt;
* The EyeSeeCam is connected to a NUC with two USB-C cables.&lt;br /&gt;
* The NUC is connected via ethernet with a Mac Mini.&lt;br /&gt;
* The Mac Mini runs an EyeSeeCam SCI program.&lt;br /&gt;
* The Mac Mini runs an LSL server for data transfer to a Windows Computer&lt;br /&gt;
* The windows computer runs Matlab and connect with an LSL-stream to the LSL server on the Mac Mini.&lt;br /&gt;
&lt;br /&gt;
==Startup Instructions==&lt;br /&gt;
&lt;br /&gt;
* Connect the EyeSeeCam to the NUC&lt;br /&gt;
* Remove both lens covers of the EyeSeeCam&lt;br /&gt;
* Start the NUC&lt;br /&gt;
* Start the Mac Mini&lt;br /&gt;
* Login on the Mac Mini to &#039;EyeSeeCam&#039; with password &#039;Gimbal&#039;&lt;br /&gt;
* Start the LSL script on the Mac Mini(is on the desktop)&lt;br /&gt;
* Start the EyeSeeCam SCI program on the Mac Mini&lt;br /&gt;
* Start a matlab program on the windows computer (e.g. EG_program.m)&lt;br /&gt;
* Press the &amp;lt;begin&amp;gt; button in the EyeSeeCam SCI program on the Mac Mini (in the top right corner)&lt;br /&gt;
* Let the subject put on the EyeSeeCam&lt;br /&gt;
* Press &amp;lt;prepare&amp;gt; in the EyeSeeCam SCI program on the Mac Mini (shows the traces)&lt;br /&gt;
* Press &amp;lt;start&amp;gt; in the EyeSeeCam SCI program on the Mac Mini (starts collecting data)&lt;br /&gt;
* Start the experiment&lt;br /&gt;
&lt;br /&gt;
==Matlab coding==&lt;br /&gt;
&lt;br /&gt;
The EyeSeeCam is connected to a Mac Mini. On the Mac runs an LSL server (for more info about LSL see [[Lab Streaming Layer]]). In order to get data from the EyeSeeCam you create an lslStream and session in matlab.&lt;br /&gt;
&lt;br /&gt;
Here is an example:&lt;br /&gt;
&lt;br /&gt;
 type = &#039;EyeSeeCam @ dcn-pl04&#039;;&lt;br /&gt;
 name = &#039;EyeSeeCam SCI Data&#039;;&lt;br /&gt;
 lslString = sprintf(&#039;type=&#039;&#039;%s&#039;&#039; and name=&#039;&#039;%s&#039;&#039;&#039;, type, name);&lt;br /&gt;
 info=lsl_resolver(lslString);&lt;br /&gt;
 lslStream = lsl_istream(info{1});&lt;br /&gt;
&lt;br /&gt;
 session = lsl_session;&lt;br /&gt;
 session.add_stream(lslStream);&lt;br /&gt;
&lt;br /&gt;
 session.start;&lt;br /&gt;
 ...wait some time...&lt;br /&gt;
 session.stop;&lt;br /&gt;
 data = lslStream.read;&lt;br /&gt;
&lt;br /&gt;
==Construction of a gaze trace==&lt;br /&gt;
The data from EyeSeeCam is recorded in different coordinate systems than the double polar system that we use to present our targets. The head and eye tracking data each have their own coordinate system. To accurately analyze our data we have to transform these coordinate systems to double polar coordinates in the lab frame. In order to relate the EyeSeeCam coordinates to the lab coordinates, we first need to record a starting gaze position for each trial. This means that during the recording, the subject has to look at the center speaker (0,0) when the trial starts. &lt;br /&gt;
&lt;br /&gt;
From the EyeSeeCam data we can construct a head movement trace and an eye movement trace. These can be combined to create a gaze trace.&lt;br /&gt;
&lt;br /&gt;
In Matlab we can use the class &#039;EyeSeeCamSci_Trace&#039; for calculating head, eye and gaze traces in RAS, HVF and DP coordinates.&lt;br /&gt;
&lt;br /&gt;
===Defining a coordinate system===&lt;br /&gt;
&lt;br /&gt;
For the purpose of the interpretation of the EyeSeeCam data we will define the starting direction as the direction the subject looks at at the beginning of each trial. The recording of the data should start when the subject is looking in this direction. &amp;lt;br&amp;gt;&lt;br /&gt;
The X, Y and Z of the EyeSeeCam data are in terms of RAS coordinates:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = anterior&lt;br /&gt;
Y = -right&lt;br /&gt;
Z = superior&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* When using &#039;EyeSeeCamSci_Trace&#039; head and gaze traces with RAS coordinates the values are relative to the starting position of subject. &lt;br /&gt;
* The HVF and DP coordinates of the eye trace are only valid when the head stays in the starting position.&lt;br /&gt;
&lt;br /&gt;
===Head movement===&lt;br /&gt;
EyeSeeCam_Sci provides us angle velocities for rotations around the  X,Y, and Z axes. For our analyses we want to have position data, so we have to calculate the position data from these angle velocities.&lt;br /&gt;
 &lt;br /&gt;
The head rotation axis X, Y and Z are defined with respect to the EyeSeeCam itself. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The EyeSeeCam data is &#039;&#039;&#039;not&#039;&#039;&#039; in the lab frame!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to create a head movement trace we have to calculate rotation matrices (delta_Rx, delta_Ry and delta_Rz) in EyeSeeCam coordinates for every time step. &lt;br /&gt;
&lt;br /&gt;
Since the time steps are about 2 ms (or 4 ms) the rotations for each time step are small. Therefore the order in which delta_Rx, delta_Ry and delta_Rz are multiplied are not important and we calculate delta_R(t) in EyeSeeCam coordinates by &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
delta_R(t) = delta_Rx * delta_Ry * delta_Rz.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the total rotation matrix in lab coordinates at time t we have iterate over all the time steps &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
R(t=0) = identity matrix&lt;br /&gt;
for t = 0 to t = tmax&lt;br /&gt;
   R(t) = R(t-delta_t) * delta_R(t)&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eye movement===&lt;br /&gt;
&lt;br /&gt;
The eye movements are given by rotations in the same coordinate system as the head movements.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = anterior (torsion of the pupil in the gaze direction)&lt;br /&gt;
Y = -right&lt;br /&gt;
Z = superior&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The torsion is not important for the gaze direction and is therefore excluded from the calculation.&lt;br /&gt;
&lt;br /&gt;
Azimuth can be defined as a rotation about the Z axis and Elevation as a contra rotation about the Y axis.&lt;br /&gt;
&lt;br /&gt;
Since the eye gaze is given as a rotation angle in OCS coordinates and the eye and head tracker coordinate are fixed relative to each other, we can easily transform OCS coordinates to the EyeSeeCam coordinates. We can then create rotation matrices in the EyeSeeCam coordinates for the azimuth and elevation of the gaze. Since the torsion is excluded the rotation matrices for azimuth and elevation can be multiplied in any order to get the eye rotation matrix in EyeSeeCam coordinates.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
eye_Rz(t) = Rz(eye_azimuth(t))&lt;br /&gt;
eye_Ry(t) = Ry(-eye_elevation(t))&lt;br /&gt;
eye_R(t)  = eye_Ry(t) * eye_Rz(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Gaze movement===&lt;br /&gt;
&lt;br /&gt;
The gaze movement is the combined head and eye movement.&lt;br /&gt;
To create the total rotation matrix that represents the &#039;gaze&#039; rotation in lab coordinates, you need to multiply the two rotation matrices you have for head and eye movement in the correct order. In your case, you have:&lt;br /&gt;
&lt;br /&gt;
A rotation matrix for the head in lab coordinates.&lt;br /&gt;
A rotation matrix for the eyes in head coordinates.&lt;br /&gt;
The correct order of multiplication is as follows:&lt;br /&gt;
&lt;br /&gt;
First, multiply the rotation matrix of the head in lab coordinates by the rotation matrix of the eyes in head coordinates.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
R_gaze(t) = head_R(t) * eye_R(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lastly you can multiply the R_gaze(t) with the starting gaze vector to get the gaze (in lab coordinates) at time t. We assume that the starting gaze is in the forward direction, which is in the X direction in the lab coordinates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
startingGaze = [1; 0; 0]&lt;br /&gt;
gaze(t) = R_gaze(t) * startingGaze&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Matlab code for converting raw data==&lt;br /&gt;
&lt;br /&gt;
===Functions for converting EyeSeeCam data to double polar data===&lt;br /&gt;
There is one function for head movement, one for eye movement and one for gaze movement. The gaze movement combines head and eye movement.&lt;br /&gt;
&lt;br /&gt;
The functions take head rotation speeds and eye rotations (in degrees) as input and give objects containing the traces (head, eye and gaze respectivily) in double polar coordinates as output.&lt;br /&gt;
&lt;br /&gt;
* headTrace_DP = EyeSeeCamSciHeadRotationData2Trace_DP(Vx_deg, Vy_deg, Vz_deg)&lt;br /&gt;
* eyeTrace_DP  = EyeSeeCamSciEyeRotationData2Trace_DP(Zocs_deg, Yocs_deg)&lt;br /&gt;
* gazeTrace_DP = EyeSeeCamSciHeadAndEyeRotationData2Trace_DP(Vx_deg, Vy_deg, Vz_deg, Zocs_deg, Yocs_deg)&lt;br /&gt;
&lt;br /&gt;
The Vx, Vy and Vz are the head rotation speeds in the EyeSeeCam coordinates&lt;br /&gt;
The Zocs and Yocs are the eye rotations in OCS coordinates.&lt;br /&gt;
&lt;br /&gt;
===EyeSeeCam data===&lt;br /&gt;
The recorded data is read from an LSL stream.&lt;br /&gt;
&lt;br /&gt;
The lsldata is a struct and has the following fields:&lt;br /&gt;
*escdata&lt;br /&gt;
*escmetadata&lt;br /&gt;
*escstr&lt;br /&gt;
*evdata0&lt;br /&gt;
*evdata1&lt;br /&gt;
*evdata2&lt;br /&gt;
*evdata3&lt;br /&gt;
*evdata4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The lsldata.escdata contains the eye and head data. The data contains a matrix for with a row for every parameter. The total of parameters is 63. The field lsldata.escmetadata.channel lists all the names of the parameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%Eye data&lt;br /&gt;
&lt;br /&gt;
RightEyePosX = 46;&lt;br /&gt;
RightEyePosY = 47;&lt;br /&gt;
RightEyePosZ = 48;&lt;br /&gt;
&lt;br /&gt;
xeye = lsldata.escdata.Data(46,:);       % right 46, left 32&lt;br /&gt;
yeye = lsldata.escdata.Data(47,:);       % right 47, left 33&lt;br /&gt;
zeye = lsldata.escdata.Data(48,:);       % right 48, left 34&lt;br /&gt;
&lt;br /&gt;
% Head data&lt;br /&gt;
HeadInertialVelXCal = 27;&lt;br /&gt;
HeadInertialVelYCal = 29;&lt;br /&gt;
HeadInertialVelZCal = 31;&lt;br /&gt;
&lt;br /&gt;
xh = lsldata.escdata.Data(27,:);       % calibrated torion velocity data HEAD&lt;br /&gt;
yh = lsldata.escdata.Data(29,:);       % calibrated vertical velocity data HEAD&lt;br /&gt;
zh = lsldata.escdata.Data(31,:);       % calibrated horizontal velocity data HEAD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EyeSeeCam_SCI&amp;diff=4901</id>
		<title>EyeSeeCam SCI</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EyeSeeCam_SCI&amp;diff=4901"/>
		<updated>2026-04-01T11:22:33Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* EyeSeeCam data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:EyeSeeCam_SCI2.png|thumb|EyeSeeCam SCI]]&lt;br /&gt;
==Description==&lt;br /&gt;
The EyeSeeCam SCI is a combined eye tracker and head movement tracker. The head tracking is done with an IMU and the eye tracking is done with cameras and software that tracks the pupils of both eyes. The tracking data can be read out directly in Matlab. In case a dedicated computer is used for reading out the EyeSeeCam, the data it is converted to an LSL stream. &lt;br /&gt;
&lt;br /&gt;
The EyeSeeCam Sci can record at 250 and and 500 Hz. We are typically recording at 500 Hz.&lt;br /&gt;
&lt;br /&gt;
==Setup==&lt;br /&gt;
&lt;br /&gt;
* The EyeSeeCam is connected to a NUC with two USB-C cables.&lt;br /&gt;
* The NUC is connected via ethernet with a Mac Mini.&lt;br /&gt;
* The Mac Mini runs an EyeSeeCam SCI program.&lt;br /&gt;
* The Mac Mini runs an LSL server for data transfer to a Windows Computer&lt;br /&gt;
* The windows computer runs Matlab and connect with an LSL-stream to the LSL server on the Mac Mini.&lt;br /&gt;
&lt;br /&gt;
==Startup Instructions==&lt;br /&gt;
&lt;br /&gt;
* Connect the EyeSeeCam to the NUC&lt;br /&gt;
* Remove both lens covers of the EyeSeeCam&lt;br /&gt;
* Start the NUC&lt;br /&gt;
* Start the Mac Mini&lt;br /&gt;
* Login on the Mac Mini to &#039;EyeSeeCam&#039; with password &#039;Gimbal&#039;&lt;br /&gt;
* Start the LSL script on the Mac Mini(is on the desktop)&lt;br /&gt;
* Start the EyeSeeCam SCI program on the Mac Mini&lt;br /&gt;
* Start a matlab program on the windows computer (e.g. EG_program.m)&lt;br /&gt;
* Press the &amp;lt;begin&amp;gt; button in the EyeSeeCam SCI program on the Mac Mini (in the top right corner)&lt;br /&gt;
* Let the subject put on the EyeSeeCam&lt;br /&gt;
* Press &amp;lt;prepare&amp;gt; in the EyeSeeCam SCI program on the Mac Mini (shows the traces)&lt;br /&gt;
* Press &amp;lt;start&amp;gt; in the EyeSeeCam SCI program on the Mac Mini (starts collecting data)&lt;br /&gt;
* Start the experiment&lt;br /&gt;
&lt;br /&gt;
==Matlab coding==&lt;br /&gt;
&lt;br /&gt;
The EyeSeeCam is connected to a Mac Mini. On the Mac runs an LSL server (for more info about LSL see [[Lab Streaming Layer]]). In order to get data from the EyeSeeCam you create an lslStream and session in matlab.&lt;br /&gt;
&lt;br /&gt;
Here is an example:&lt;br /&gt;
&lt;br /&gt;
 type = &#039;EyeSeeCam @ dcn-pl04&#039;;&lt;br /&gt;
 name = &#039;EyeSeeCam SCI Data&#039;;&lt;br /&gt;
 lslString = sprintf(&#039;type=&#039;&#039;%s&#039;&#039; and name=&#039;&#039;%s&#039;&#039;&#039;, type, name);&lt;br /&gt;
 info=lsl_resolver(lslString);&lt;br /&gt;
 lslStream = lsl_istream(info{1});&lt;br /&gt;
&lt;br /&gt;
 session = lsl_session;&lt;br /&gt;
 session.add_stream(lslStream);&lt;br /&gt;
&lt;br /&gt;
 session.start;&lt;br /&gt;
 ...wait some time...&lt;br /&gt;
 session.stop;&lt;br /&gt;
 data = lslStream.read;&lt;br /&gt;
&lt;br /&gt;
==Construction of a gaze trace==&lt;br /&gt;
The data from EyeSeeCam is recorded in different coordinate systems than the double polar system that we use to present our targets. The head and eye tracking data each have their own coordinate system. To accurately analyze our data we have to transform these coordinate systems to double polar coordinates in the lab frame. In order to relate the EyeSeeCam coordinates to the lab coordinates, we first need to record a starting gaze position for each trial. This means that during the recording, the subject has to look at the center speaker (0,0) when the trial starts. &lt;br /&gt;
&lt;br /&gt;
From the EyeSeeCam data we can construct a head movement trace and an eye movement trace. These can be combined to create a gaze trace.&lt;br /&gt;
&lt;br /&gt;
In Matlab we can use the class &#039;EyeSeeCamSci_Trace&#039; for calculating head, eye and gaze traces in RAS, HVF and DP coordinates.&lt;br /&gt;
&lt;br /&gt;
===Defining a coordinate system===&lt;br /&gt;
&lt;br /&gt;
For the purpose of the interpretation of the EyeSeeCam data we will define the starting direction as the direction the subject looks at at the beginning of each trial. The recording of the data should start when the subject is looking in this direction. &amp;lt;br&amp;gt;&lt;br /&gt;
The X, Y and Z of the EyeSeeCam data are in terms of RAS coordinates:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = anterior&lt;br /&gt;
Y = -right&lt;br /&gt;
Z = superior&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* When using &#039;EyeSeeCamSci_Trace&#039; head and gaze traces with RAS coordinates the values are relative to the starting position of subject. &lt;br /&gt;
* The HVF and DP coordinates of the eye trace are only valid when the head stays in the starting position.&lt;br /&gt;
&lt;br /&gt;
===Head movement===&lt;br /&gt;
EyeSeeCam_Sci provides us angle velocities for rotations around the  X,Y, and Z axes. For our analyses we want to have position data, so we have to calculate the position data from these angle velocities.&lt;br /&gt;
 &lt;br /&gt;
The head rotation axis X, Y and Z are defined with respect to the EyeSeeCam itself. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The EyeSeeCam data is &#039;&#039;&#039;not&#039;&#039;&#039; in the lab frame!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to create a head movement trace we have to calculate rotation matrices (delta_Rx, delta_Ry and delta_Rz) in EyeSeeCam coordinates for every time step. &lt;br /&gt;
&lt;br /&gt;
Since the time steps are about 2 ms (or 4 ms) the rotations for each time step are small. Therefore the order in which delta_Rx, delta_Ry and delta_Rz are multiplied are not important and we calculate delta_R(t) in EyeSeeCam coordinates by &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
delta_R(t) = delta_Rx * delta_Ry * delta_Rz.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the total rotation matrix in lab coordinates at time t we have iterate over all the time steps &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
R(t=0) = identity matrix&lt;br /&gt;
for t = 0 to t = tmax&lt;br /&gt;
   R(t) = R(t-delta_t) * delta_R(t)&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eye movement===&lt;br /&gt;
&lt;br /&gt;
The eye movements are given by rotations in the same coordinate system as the head movements.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = anterior (torsion of the pupil in the gaze direction)&lt;br /&gt;
Y = -right&lt;br /&gt;
Z = superior&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The torsion is not important for the gaze direction and is therefore excluded from the calculation.&lt;br /&gt;
&lt;br /&gt;
Azimuth can be defined as a rotation about the Z axis and Elevation as a contra rotation about the Y axis.&lt;br /&gt;
&lt;br /&gt;
Since the eye gaze is given as a rotation angle in OCS coordinates and the eye and head tracker coordinate are fixed relative to each other, we can easily transform OCS coordinates to the EyeSeeCam coordinates. We can then create rotation matrices in the EyeSeeCam coordinates for the azimuth and elevation of the gaze. Since the torsion is excluded the rotation matrices for azimuth and elevation can be multiplied in any order to get the eye rotation matrix in EyeSeeCam coordinates.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
eye_Rz(t) = Rz(eye_azimuth(t))&lt;br /&gt;
eye_Ry(t) = Ry(-eye_elevation(t))&lt;br /&gt;
eye_R(t)  = eye_Ry(t) * eye_Rz(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Gaze movement===&lt;br /&gt;
&lt;br /&gt;
The gaze movement is the combined head and eye movement.&lt;br /&gt;
To create the total rotation matrix that represents the &#039;gaze&#039; rotation in lab coordinates, you need to multiply the two rotation matrices you have for head and eye movement in the correct order. In your case, you have:&lt;br /&gt;
&lt;br /&gt;
A rotation matrix for the head in lab coordinates.&lt;br /&gt;
A rotation matrix for the eyes in head coordinates.&lt;br /&gt;
The correct order of multiplication is as follows:&lt;br /&gt;
&lt;br /&gt;
First, multiply the rotation matrix of the head in lab coordinates by the rotation matrix of the eyes in head coordinates.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
R_gaze(t) = head_R(t) * eye_R(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lastly you can multiply the R_gaze(t) with the starting gaze vector to get the gaze (in lab coordinates) at time t. We assume that the starting gaze is in the forward direction, which is in the X direction in the lab coordinates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
startingGaze = [1; 0; 0]&lt;br /&gt;
gaze(t) = R_gaze(t) * startingGaze&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Matlab programming==&lt;br /&gt;
&lt;br /&gt;
===Functions for converting EyeSeeCam data to double polar data===&lt;br /&gt;
There is one function for head movement, one for eye movement and one for gaze movement. The gaze movement combines head and eye movement.&lt;br /&gt;
&lt;br /&gt;
The functions take head rotation speeds and eye rotations (in degrees) as input and give objects containing the traces (head, eye and gaze respectivily) in double polar coordinates as output.&lt;br /&gt;
&lt;br /&gt;
* headTrace_DP = EyeSeeCamSciHeadRotationData2Trace_DP(Vx_deg, Vy_deg, Vz_deg)&lt;br /&gt;
* eyeTrace_DP  = EyeSeeCamSciEyeRotationData2Trace_DP(Zocs_deg, Yocs_deg)&lt;br /&gt;
* gazeTrace_DP = EyeSeeCamSciHeadAndEyeRotationData2Trace_DP(Vx_deg, Vy_deg, Vz_deg, Zocs_deg, Yocs_deg)&lt;br /&gt;
&lt;br /&gt;
The Vx, Vy and Vz are the head rotation speeds in the EyeSeeCam coordinates&lt;br /&gt;
The Zocs and Yocs are the eye rotations in OCS coordinates.&lt;br /&gt;
&lt;br /&gt;
===EyeSeeCam data===&lt;br /&gt;
The recorded data is read from an LSL stream.&lt;br /&gt;
&lt;br /&gt;
The lsldata is a struct and has the following fields:&lt;br /&gt;
*escdata&lt;br /&gt;
*escmetadata&lt;br /&gt;
*escstr&lt;br /&gt;
*evdata0&lt;br /&gt;
*evdata1&lt;br /&gt;
*evdata2&lt;br /&gt;
*evdata3&lt;br /&gt;
*evdata4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The lsldata.escdata contains the eye and head data. The data contains a matrix for with a row for every parameter. The total of parameters is 63. The field lsldata.escmetadata.channel lists all the names of the parameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%Eye data&lt;br /&gt;
&lt;br /&gt;
RightEyePosX = 46;&lt;br /&gt;
RightEyePosY = 47;&lt;br /&gt;
RightEyePosZ = 48;&lt;br /&gt;
&lt;br /&gt;
xeye = lsldata.escdata.Data(46,:);       % right 46, left 32&lt;br /&gt;
yeye = lsldata.escdata.Data(47,:);       % right 47, left 33&lt;br /&gt;
zeye = lsldata.escdata.Data(48,:);       % right 48, left 34&lt;br /&gt;
&lt;br /&gt;
% Head data&lt;br /&gt;
HeadInertialVelXCal = 27;&lt;br /&gt;
HeadInertialVelYCal = 29;&lt;br /&gt;
HeadInertialVelZCal = 31;&lt;br /&gt;
&lt;br /&gt;
xh = lsldata.escdata.Data(27,:);       % calibrated torion velocity data HEAD&lt;br /&gt;
yh = lsldata.escdata.Data(29,:);       % calibrated vertical velocity data HEAD&lt;br /&gt;
zh = lsldata.escdata.Data(31,:);       % calibrated horizontal velocity data HEAD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EyeSeeCam_SCI&amp;diff=4900</id>
		<title>EyeSeeCam SCI</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EyeSeeCam_SCI&amp;diff=4900"/>
		<updated>2026-04-01T11:20:56Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Matlab coding */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:EyeSeeCam_SCI2.png|thumb|EyeSeeCam SCI]]&lt;br /&gt;
==Description==&lt;br /&gt;
The EyeSeeCam SCI is a combined eye tracker and head movement tracker. The head tracking is done with an IMU and the eye tracking is done with cameras and software that tracks the pupils of both eyes. The tracking data can be read out directly in Matlab. In case a dedicated computer is used for reading out the EyeSeeCam, the data it is converted to an LSL stream. &lt;br /&gt;
&lt;br /&gt;
The EyeSeeCam Sci can record at 250 and and 500 Hz. We are typically recording at 500 Hz.&lt;br /&gt;
&lt;br /&gt;
==Setup==&lt;br /&gt;
&lt;br /&gt;
* The EyeSeeCam is connected to a NUC with two USB-C cables.&lt;br /&gt;
* The NUC is connected via ethernet with a Mac Mini.&lt;br /&gt;
* The Mac Mini runs an EyeSeeCam SCI program.&lt;br /&gt;
* The Mac Mini runs an LSL server for data transfer to a Windows Computer&lt;br /&gt;
* The windows computer runs Matlab and connect with an LSL-stream to the LSL server on the Mac Mini.&lt;br /&gt;
&lt;br /&gt;
==Startup Instructions==&lt;br /&gt;
&lt;br /&gt;
* Connect the EyeSeeCam to the NUC&lt;br /&gt;
* Remove both lens covers of the EyeSeeCam&lt;br /&gt;
* Start the NUC&lt;br /&gt;
* Start the Mac Mini&lt;br /&gt;
* Login on the Mac Mini to &#039;EyeSeeCam&#039; with password &#039;Gimbal&#039;&lt;br /&gt;
* Start the LSL script on the Mac Mini(is on the desktop)&lt;br /&gt;
* Start the EyeSeeCam SCI program on the Mac Mini&lt;br /&gt;
* Start a matlab program on the windows computer (e.g. EG_program.m)&lt;br /&gt;
* Press the &amp;lt;begin&amp;gt; button in the EyeSeeCam SCI program on the Mac Mini (in the top right corner)&lt;br /&gt;
* Let the subject put on the EyeSeeCam&lt;br /&gt;
* Press &amp;lt;prepare&amp;gt; in the EyeSeeCam SCI program on the Mac Mini (shows the traces)&lt;br /&gt;
* Press &amp;lt;start&amp;gt; in the EyeSeeCam SCI program on the Mac Mini (starts collecting data)&lt;br /&gt;
* Start the experiment&lt;br /&gt;
&lt;br /&gt;
==Matlab coding==&lt;br /&gt;
&lt;br /&gt;
The EyeSeeCam is connected to a Mac Mini. On the Mac runs an LSL server (for more info about LSL see [[Lab Streaming Layer]]). In order to get data from the EyeSeeCam you create an lslStream and session in matlab.&lt;br /&gt;
&lt;br /&gt;
Here is an example:&lt;br /&gt;
&lt;br /&gt;
 type = &#039;EyeSeeCam @ dcn-pl04&#039;;&lt;br /&gt;
 name = &#039;EyeSeeCam SCI Data&#039;;&lt;br /&gt;
 lslString = sprintf(&#039;type=&#039;&#039;%s&#039;&#039; and name=&#039;&#039;%s&#039;&#039;&#039;, type, name);&lt;br /&gt;
 info=lsl_resolver(lslString);&lt;br /&gt;
 lslStream = lsl_istream(info{1});&lt;br /&gt;
&lt;br /&gt;
 session = lsl_session;&lt;br /&gt;
 session.add_stream(lslStream);&lt;br /&gt;
&lt;br /&gt;
 session.start;&lt;br /&gt;
 ...wait some time...&lt;br /&gt;
 session.stop;&lt;br /&gt;
 data = lslStream.read;&lt;br /&gt;
&lt;br /&gt;
==Construction of a gaze trace==&lt;br /&gt;
The data from EyeSeeCam is recorded in different coordinate systems than the double polar system that we use to present our targets. The head and eye tracking data each have their own coordinate system. To accurately analyze our data we have to transform these coordinate systems to double polar coordinates in the lab frame. In order to relate the EyeSeeCam coordinates to the lab coordinates, we first need to record a starting gaze position for each trial. This means that during the recording, the subject has to look at the center speaker (0,0) when the trial starts. &lt;br /&gt;
&lt;br /&gt;
From the EyeSeeCam data we can construct a head movement trace and an eye movement trace. These can be combined to create a gaze trace.&lt;br /&gt;
&lt;br /&gt;
In Matlab we can use the class &#039;EyeSeeCamSci_Trace&#039; for calculating head, eye and gaze traces in RAS, HVF and DP coordinates.&lt;br /&gt;
&lt;br /&gt;
===Defining a coordinate system===&lt;br /&gt;
&lt;br /&gt;
For the purpose of the interpretation of the EyeSeeCam data we will define the starting direction as the direction the subject looks at at the beginning of each trial. The recording of the data should start when the subject is looking in this direction. &amp;lt;br&amp;gt;&lt;br /&gt;
The X, Y and Z of the EyeSeeCam data are in terms of RAS coordinates:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = anterior&lt;br /&gt;
Y = -right&lt;br /&gt;
Z = superior&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* When using &#039;EyeSeeCamSci_Trace&#039; head and gaze traces with RAS coordinates the values are relative to the starting position of subject. &lt;br /&gt;
* The HVF and DP coordinates of the eye trace are only valid when the head stays in the starting position.&lt;br /&gt;
&lt;br /&gt;
===Head movement===&lt;br /&gt;
EyeSeeCam_Sci provides us angle velocities for rotations around the  X,Y, and Z axes. For our analyses we want to have position data, so we have to calculate the position data from these angle velocities.&lt;br /&gt;
 &lt;br /&gt;
The head rotation axis X, Y and Z are defined with respect to the EyeSeeCam itself. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The EyeSeeCam data is &#039;&#039;&#039;not&#039;&#039;&#039; in the lab frame!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to create a head movement trace we have to calculate rotation matrices (delta_Rx, delta_Ry and delta_Rz) in EyeSeeCam coordinates for every time step. &lt;br /&gt;
&lt;br /&gt;
Since the time steps are about 2 ms (or 4 ms) the rotations for each time step are small. Therefore the order in which delta_Rx, delta_Ry and delta_Rz are multiplied are not important and we calculate delta_R(t) in EyeSeeCam coordinates by &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
delta_R(t) = delta_Rx * delta_Ry * delta_Rz.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the total rotation matrix in lab coordinates at time t we have iterate over all the time steps &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
R(t=0) = identity matrix&lt;br /&gt;
for t = 0 to t = tmax&lt;br /&gt;
   R(t) = R(t-delta_t) * delta_R(t)&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eye movement===&lt;br /&gt;
&lt;br /&gt;
The eye movements are given by rotations in the same coordinate system as the head movements.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = anterior (torsion of the pupil in the gaze direction)&lt;br /&gt;
Y = -right&lt;br /&gt;
Z = superior&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The torsion is not important for the gaze direction and is therefore excluded from the calculation.&lt;br /&gt;
&lt;br /&gt;
Azimuth can be defined as a rotation about the Z axis and Elevation as a contra rotation about the Y axis.&lt;br /&gt;
&lt;br /&gt;
Since the eye gaze is given as a rotation angle in OCS coordinates and the eye and head tracker coordinate are fixed relative to each other, we can easily transform OCS coordinates to the EyeSeeCam coordinates. We can then create rotation matrices in the EyeSeeCam coordinates for the azimuth and elevation of the gaze. Since the torsion is excluded the rotation matrices for azimuth and elevation can be multiplied in any order to get the eye rotation matrix in EyeSeeCam coordinates.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
eye_Rz(t) = Rz(eye_azimuth(t))&lt;br /&gt;
eye_Ry(t) = Ry(-eye_elevation(t))&lt;br /&gt;
eye_R(t)  = eye_Ry(t) * eye_Rz(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Gaze movement===&lt;br /&gt;
&lt;br /&gt;
The gaze movement is the combined head and eye movement.&lt;br /&gt;
To create the total rotation matrix that represents the &#039;gaze&#039; rotation in lab coordinates, you need to multiply the two rotation matrices you have for head and eye movement in the correct order. In your case, you have:&lt;br /&gt;
&lt;br /&gt;
A rotation matrix for the head in lab coordinates.&lt;br /&gt;
A rotation matrix for the eyes in head coordinates.&lt;br /&gt;
The correct order of multiplication is as follows:&lt;br /&gt;
&lt;br /&gt;
First, multiply the rotation matrix of the head in lab coordinates by the rotation matrix of the eyes in head coordinates.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
R_gaze(t) = head_R(t) * eye_R(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lastly you can multiply the R_gaze(t) with the starting gaze vector to get the gaze (in lab coordinates) at time t. We assume that the starting gaze is in the forward direction, which is in the X direction in the lab coordinates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
startingGaze = [1; 0; 0]&lt;br /&gt;
gaze(t) = R_gaze(t) * startingGaze&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Matlab programming==&lt;br /&gt;
&lt;br /&gt;
===Functions for converting EyeSeeCam data to double polar data===&lt;br /&gt;
There is one function for head movement, one for eye movement and one for gaze movement. The gaze movement combines head and eye movement.&lt;br /&gt;
&lt;br /&gt;
The functions take head rotation speeds and eye rotations (in degrees) as input and give objects containing the traces (head, eye and gaze respectivily) in double polar coordinates as output.&lt;br /&gt;
&lt;br /&gt;
* headTrace_DP = EyeSeeCamSciHeadRotationData2Trace_DP(Vx_deg, Vy_deg, Vz_deg)&lt;br /&gt;
* eyeTrace_DP  = EyeSeeCamSciEyeRotationData2Trace_DP(Zocs_deg, Yocs_deg)&lt;br /&gt;
* gazeTrace_DP = EyeSeeCamSciHeadAndEyeRotationData2Trace_DP(Vx_deg, Vy_deg, Vz_deg, Zocs_deg, Yocs_deg)&lt;br /&gt;
&lt;br /&gt;
The Vx, Vy and Vz are the head rotation speeds in the EyeSeeCam coordinates&lt;br /&gt;
The Zocs and Yocs are the eye rotations in OCS coordinates.&lt;br /&gt;
&lt;br /&gt;
===EyeSeeCam data===&lt;br /&gt;
The recorded data is read from an LSL stream.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% todo: LSL streaming parameters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The lsldata is a struct and has the following fields:&lt;br /&gt;
*escdata&lt;br /&gt;
*escmetadata&lt;br /&gt;
*escstr&lt;br /&gt;
*evdata0&lt;br /&gt;
*evdata1&lt;br /&gt;
*evdata2&lt;br /&gt;
*evdata3&lt;br /&gt;
*evdata4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The lsldata.escdata contains the eye and head data. The data contains a matrix for with a row for every parameter. The total of parameters is 63. The field lsldata.escmetadata.channel lists all the names of the parameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%Eye data&lt;br /&gt;
&lt;br /&gt;
RightEyePosX = 46;&lt;br /&gt;
RightEyePosY = 47;&lt;br /&gt;
RightEyePosZ = 48;&lt;br /&gt;
&lt;br /&gt;
xeye = lsldata.escdata.Data(46,:);       % right 46, left 32&lt;br /&gt;
yeye = lsldata.escdata.Data(47,:);       % right 47, left 33&lt;br /&gt;
zeye = lsldata.escdata.Data(48,:);       % right 48, left 34&lt;br /&gt;
&lt;br /&gt;
% Head data&lt;br /&gt;
HeadInertialVelXCal = 27;&lt;br /&gt;
HeadInertialVelYCal = 29;&lt;br /&gt;
HeadInertialVelZCal = 31;&lt;br /&gt;
&lt;br /&gt;
xh = lsldata.escdata.Data(27,:);       % calibrated torion velocity data HEAD&lt;br /&gt;
yh = lsldata.escdata.Data(29,:);       % calibrated vertical velocity data HEAD&lt;br /&gt;
zh = lsldata.escdata.Data(31,:);       % calibrated horizontal velocity data HEAD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EyeSeeCam_SCI&amp;diff=4899</id>
		<title>EyeSeeCam SCI</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EyeSeeCam_SCI&amp;diff=4899"/>
		<updated>2026-04-01T11:20:36Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Matlab coding */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:EyeSeeCam_SCI2.png|thumb|EyeSeeCam SCI]]&lt;br /&gt;
==Description==&lt;br /&gt;
The EyeSeeCam SCI is a combined eye tracker and head movement tracker. The head tracking is done with an IMU and the eye tracking is done with cameras and software that tracks the pupils of both eyes. The tracking data can be read out directly in Matlab. In case a dedicated computer is used for reading out the EyeSeeCam, the data it is converted to an LSL stream. &lt;br /&gt;
&lt;br /&gt;
The EyeSeeCam Sci can record at 250 and and 500 Hz. We are typically recording at 500 Hz.&lt;br /&gt;
&lt;br /&gt;
==Setup==&lt;br /&gt;
&lt;br /&gt;
* The EyeSeeCam is connected to a NUC with two USB-C cables.&lt;br /&gt;
* The NUC is connected via ethernet with a Mac Mini.&lt;br /&gt;
* The Mac Mini runs an EyeSeeCam SCI program.&lt;br /&gt;
* The Mac Mini runs an LSL server for data transfer to a Windows Computer&lt;br /&gt;
* The windows computer runs Matlab and connect with an LSL-stream to the LSL server on the Mac Mini.&lt;br /&gt;
&lt;br /&gt;
==Startup Instructions==&lt;br /&gt;
&lt;br /&gt;
* Connect the EyeSeeCam to the NUC&lt;br /&gt;
* Remove both lens covers of the EyeSeeCam&lt;br /&gt;
* Start the NUC&lt;br /&gt;
* Start the Mac Mini&lt;br /&gt;
* Login on the Mac Mini to &#039;EyeSeeCam&#039; with password &#039;Gimbal&#039;&lt;br /&gt;
* Start the LSL script on the Mac Mini(is on the desktop)&lt;br /&gt;
* Start the EyeSeeCam SCI program on the Mac Mini&lt;br /&gt;
* Start a matlab program on the windows computer (e.g. EG_program.m)&lt;br /&gt;
* Press the &amp;lt;begin&amp;gt; button in the EyeSeeCam SCI program on the Mac Mini (in the top right corner)&lt;br /&gt;
* Let the subject put on the EyeSeeCam&lt;br /&gt;
* Press &amp;lt;prepare&amp;gt; in the EyeSeeCam SCI program on the Mac Mini (shows the traces)&lt;br /&gt;
* Press &amp;lt;start&amp;gt; in the EyeSeeCam SCI program on the Mac Mini (starts collecting data)&lt;br /&gt;
* Start the experiment&lt;br /&gt;
&lt;br /&gt;
==Matlab coding==&lt;br /&gt;
&lt;br /&gt;
The EyeSeeCam is connected to a Mac Mini. On the Mac runs an LSL server (for more info about LSL see [[Lab Streaming Layer]]). In order to get data from the EyeSeeCam you create an lslStream and session in matlab.&lt;br /&gt;
&lt;br /&gt;
 type = &#039;EyeSeeCam @ dcn-pl04&#039;;&lt;br /&gt;
 name = &#039;EyeSeeCam SCI Data&#039;;&lt;br /&gt;
 lslString = sprintf(&#039;type=&#039;&#039;%s&#039;&#039; and name=&#039;&#039;%s&#039;&#039;&#039;, type, name);&lt;br /&gt;
 info=lsl_resolver(lslString);&lt;br /&gt;
 lslStream = lsl_istream(info{1});&lt;br /&gt;
&lt;br /&gt;
 session = lsl_session;&lt;br /&gt;
 session.add_stream(lslStream);&lt;br /&gt;
&lt;br /&gt;
 session.start;&lt;br /&gt;
 ...wait some time...&lt;br /&gt;
 session.stop;&lt;br /&gt;
 data = lslStream.read;&lt;br /&gt;
&lt;br /&gt;
==Construction of a gaze trace==&lt;br /&gt;
The data from EyeSeeCam is recorded in different coordinate systems than the double polar system that we use to present our targets. The head and eye tracking data each have their own coordinate system. To accurately analyze our data we have to transform these coordinate systems to double polar coordinates in the lab frame. In order to relate the EyeSeeCam coordinates to the lab coordinates, we first need to record a starting gaze position for each trial. This means that during the recording, the subject has to look at the center speaker (0,0) when the trial starts. &lt;br /&gt;
&lt;br /&gt;
From the EyeSeeCam data we can construct a head movement trace and an eye movement trace. These can be combined to create a gaze trace.&lt;br /&gt;
&lt;br /&gt;
In Matlab we can use the class &#039;EyeSeeCamSci_Trace&#039; for calculating head, eye and gaze traces in RAS, HVF and DP coordinates.&lt;br /&gt;
&lt;br /&gt;
===Defining a coordinate system===&lt;br /&gt;
&lt;br /&gt;
For the purpose of the interpretation of the EyeSeeCam data we will define the starting direction as the direction the subject looks at at the beginning of each trial. The recording of the data should start when the subject is looking in this direction. &amp;lt;br&amp;gt;&lt;br /&gt;
The X, Y and Z of the EyeSeeCam data are in terms of RAS coordinates:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = anterior&lt;br /&gt;
Y = -right&lt;br /&gt;
Z = superior&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* When using &#039;EyeSeeCamSci_Trace&#039; head and gaze traces with RAS coordinates the values are relative to the starting position of subject. &lt;br /&gt;
* The HVF and DP coordinates of the eye trace are only valid when the head stays in the starting position.&lt;br /&gt;
&lt;br /&gt;
===Head movement===&lt;br /&gt;
EyeSeeCam_Sci provides us angle velocities for rotations around the  X,Y, and Z axes. For our analyses we want to have position data, so we have to calculate the position data from these angle velocities.&lt;br /&gt;
 &lt;br /&gt;
The head rotation axis X, Y and Z are defined with respect to the EyeSeeCam itself. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The EyeSeeCam data is &#039;&#039;&#039;not&#039;&#039;&#039; in the lab frame!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to create a head movement trace we have to calculate rotation matrices (delta_Rx, delta_Ry and delta_Rz) in EyeSeeCam coordinates for every time step. &lt;br /&gt;
&lt;br /&gt;
Since the time steps are about 2 ms (or 4 ms) the rotations for each time step are small. Therefore the order in which delta_Rx, delta_Ry and delta_Rz are multiplied are not important and we calculate delta_R(t) in EyeSeeCam coordinates by &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
delta_R(t) = delta_Rx * delta_Ry * delta_Rz.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the total rotation matrix in lab coordinates at time t we have iterate over all the time steps &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
R(t=0) = identity matrix&lt;br /&gt;
for t = 0 to t = tmax&lt;br /&gt;
   R(t) = R(t-delta_t) * delta_R(t)&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eye movement===&lt;br /&gt;
&lt;br /&gt;
The eye movements are given by rotations in the same coordinate system as the head movements.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = anterior (torsion of the pupil in the gaze direction)&lt;br /&gt;
Y = -right&lt;br /&gt;
Z = superior&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The torsion is not important for the gaze direction and is therefore excluded from the calculation.&lt;br /&gt;
&lt;br /&gt;
Azimuth can be defined as a rotation about the Z axis and Elevation as a contra rotation about the Y axis.&lt;br /&gt;
&lt;br /&gt;
Since the eye gaze is given as a rotation angle in OCS coordinates and the eye and head tracker coordinate are fixed relative to each other, we can easily transform OCS coordinates to the EyeSeeCam coordinates. We can then create rotation matrices in the EyeSeeCam coordinates for the azimuth and elevation of the gaze. Since the torsion is excluded the rotation matrices for azimuth and elevation can be multiplied in any order to get the eye rotation matrix in EyeSeeCam coordinates.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
eye_Rz(t) = Rz(eye_azimuth(t))&lt;br /&gt;
eye_Ry(t) = Ry(-eye_elevation(t))&lt;br /&gt;
eye_R(t)  = eye_Ry(t) * eye_Rz(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Gaze movement===&lt;br /&gt;
&lt;br /&gt;
The gaze movement is the combined head and eye movement.&lt;br /&gt;
To create the total rotation matrix that represents the &#039;gaze&#039; rotation in lab coordinates, you need to multiply the two rotation matrices you have for head and eye movement in the correct order. In your case, you have:&lt;br /&gt;
&lt;br /&gt;
A rotation matrix for the head in lab coordinates.&lt;br /&gt;
A rotation matrix for the eyes in head coordinates.&lt;br /&gt;
The correct order of multiplication is as follows:&lt;br /&gt;
&lt;br /&gt;
First, multiply the rotation matrix of the head in lab coordinates by the rotation matrix of the eyes in head coordinates.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
R_gaze(t) = head_R(t) * eye_R(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lastly you can multiply the R_gaze(t) with the starting gaze vector to get the gaze (in lab coordinates) at time t. We assume that the starting gaze is in the forward direction, which is in the X direction in the lab coordinates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
startingGaze = [1; 0; 0]&lt;br /&gt;
gaze(t) = R_gaze(t) * startingGaze&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Matlab programming==&lt;br /&gt;
&lt;br /&gt;
===Functions for converting EyeSeeCam data to double polar data===&lt;br /&gt;
There is one function for head movement, one for eye movement and one for gaze movement. The gaze movement combines head and eye movement.&lt;br /&gt;
&lt;br /&gt;
The functions take head rotation speeds and eye rotations (in degrees) as input and give objects containing the traces (head, eye and gaze respectivily) in double polar coordinates as output.&lt;br /&gt;
&lt;br /&gt;
* headTrace_DP = EyeSeeCamSciHeadRotationData2Trace_DP(Vx_deg, Vy_deg, Vz_deg)&lt;br /&gt;
* eyeTrace_DP  = EyeSeeCamSciEyeRotationData2Trace_DP(Zocs_deg, Yocs_deg)&lt;br /&gt;
* gazeTrace_DP = EyeSeeCamSciHeadAndEyeRotationData2Trace_DP(Vx_deg, Vy_deg, Vz_deg, Zocs_deg, Yocs_deg)&lt;br /&gt;
&lt;br /&gt;
The Vx, Vy and Vz are the head rotation speeds in the EyeSeeCam coordinates&lt;br /&gt;
The Zocs and Yocs are the eye rotations in OCS coordinates.&lt;br /&gt;
&lt;br /&gt;
===EyeSeeCam data===&lt;br /&gt;
The recorded data is read from an LSL stream.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% todo: LSL streaming parameters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The lsldata is a struct and has the following fields:&lt;br /&gt;
*escdata&lt;br /&gt;
*escmetadata&lt;br /&gt;
*escstr&lt;br /&gt;
*evdata0&lt;br /&gt;
*evdata1&lt;br /&gt;
*evdata2&lt;br /&gt;
*evdata3&lt;br /&gt;
*evdata4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The lsldata.escdata contains the eye and head data. The data contains a matrix for with a row for every parameter. The total of parameters is 63. The field lsldata.escmetadata.channel lists all the names of the parameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%Eye data&lt;br /&gt;
&lt;br /&gt;
RightEyePosX = 46;&lt;br /&gt;
RightEyePosY = 47;&lt;br /&gt;
RightEyePosZ = 48;&lt;br /&gt;
&lt;br /&gt;
xeye = lsldata.escdata.Data(46,:);       % right 46, left 32&lt;br /&gt;
yeye = lsldata.escdata.Data(47,:);       % right 47, left 33&lt;br /&gt;
zeye = lsldata.escdata.Data(48,:);       % right 48, left 34&lt;br /&gt;
&lt;br /&gt;
% Head data&lt;br /&gt;
HeadInertialVelXCal = 27;&lt;br /&gt;
HeadInertialVelYCal = 29;&lt;br /&gt;
HeadInertialVelZCal = 31;&lt;br /&gt;
&lt;br /&gt;
xh = lsldata.escdata.Data(27,:);       % calibrated torion velocity data HEAD&lt;br /&gt;
yh = lsldata.escdata.Data(29,:);       % calibrated vertical velocity data HEAD&lt;br /&gt;
zh = lsldata.escdata.Data(31,:);       % calibrated horizontal velocity data HEAD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EyeSeeCam_SCI&amp;diff=4898</id>
		<title>EyeSeeCam SCI</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EyeSeeCam_SCI&amp;diff=4898"/>
		<updated>2026-04-01T11:19:53Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Matlab coding */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:EyeSeeCam_SCI2.png|thumb|EyeSeeCam SCI]]&lt;br /&gt;
==Description==&lt;br /&gt;
The EyeSeeCam SCI is a combined eye tracker and head movement tracker. The head tracking is done with an IMU and the eye tracking is done with cameras and software that tracks the pupils of both eyes. The tracking data can be read out directly in Matlab. In case a dedicated computer is used for reading out the EyeSeeCam, the data it is converted to an LSL stream. &lt;br /&gt;
&lt;br /&gt;
The EyeSeeCam Sci can record at 250 and and 500 Hz. We are typically recording at 500 Hz.&lt;br /&gt;
&lt;br /&gt;
==Setup==&lt;br /&gt;
&lt;br /&gt;
* The EyeSeeCam is connected to a NUC with two USB-C cables.&lt;br /&gt;
* The NUC is connected via ethernet with a Mac Mini.&lt;br /&gt;
* The Mac Mini runs an EyeSeeCam SCI program.&lt;br /&gt;
* The Mac Mini runs an LSL server for data transfer to a Windows Computer&lt;br /&gt;
* The windows computer runs Matlab and connect with an LSL-stream to the LSL server on the Mac Mini.&lt;br /&gt;
&lt;br /&gt;
==Startup Instructions==&lt;br /&gt;
&lt;br /&gt;
* Connect the EyeSeeCam to the NUC&lt;br /&gt;
* Remove both lens covers of the EyeSeeCam&lt;br /&gt;
* Start the NUC&lt;br /&gt;
* Start the Mac Mini&lt;br /&gt;
* Login on the Mac Mini to &#039;EyeSeeCam&#039; with password &#039;Gimbal&#039;&lt;br /&gt;
* Start the LSL script on the Mac Mini(is on the desktop)&lt;br /&gt;
* Start the EyeSeeCam SCI program on the Mac Mini&lt;br /&gt;
* Start a matlab program on the windows computer (e.g. EG_program.m)&lt;br /&gt;
* Press the &amp;lt;begin&amp;gt; button in the EyeSeeCam SCI program on the Mac Mini (in the top right corner)&lt;br /&gt;
* Let the subject put on the EyeSeeCam&lt;br /&gt;
* Press &amp;lt;prepare&amp;gt; in the EyeSeeCam SCI program on the Mac Mini (shows the traces)&lt;br /&gt;
* Press &amp;lt;start&amp;gt; in the EyeSeeCam SCI program on the Mac Mini (starts collecting data)&lt;br /&gt;
* Start the experiment&lt;br /&gt;
&lt;br /&gt;
==Matlab coding==&lt;br /&gt;
&lt;br /&gt;
The EyeSeeCam is connected to a Mac Mini. On the Mac runs an LSL server (for more info about LSL see [[Lab Streaming Layer]]). In matlab you create an lslStream and session for getting the data from the EyeSeeCam.&lt;br /&gt;
&lt;br /&gt;
 type = &#039;EyeSeeCam @ dcn-pl04&#039;;&lt;br /&gt;
 name = &#039;EyeSeeCam SCI Data&#039;;&lt;br /&gt;
 lslString = sprintf(&#039;type=&#039;&#039;%s&#039;&#039; and name=&#039;&#039;%s&#039;&#039;&#039;, type, name);&lt;br /&gt;
 info=lsl_resolver(lslString);&lt;br /&gt;
 lslStream = lsl_istream(info{1});&lt;br /&gt;
&lt;br /&gt;
 session = lsl_session;&lt;br /&gt;
 session.add_stream(lslStream);&lt;br /&gt;
&lt;br /&gt;
 session.start;&lt;br /&gt;
 ...wait some time...&lt;br /&gt;
 session.stop;&lt;br /&gt;
 data = lslStream.read;&lt;br /&gt;
&lt;br /&gt;
==Construction of a gaze trace==&lt;br /&gt;
The data from EyeSeeCam is recorded in different coordinate systems than the double polar system that we use to present our targets. The head and eye tracking data each have their own coordinate system. To accurately analyze our data we have to transform these coordinate systems to double polar coordinates in the lab frame. In order to relate the EyeSeeCam coordinates to the lab coordinates, we first need to record a starting gaze position for each trial. This means that during the recording, the subject has to look at the center speaker (0,0) when the trial starts. &lt;br /&gt;
&lt;br /&gt;
From the EyeSeeCam data we can construct a head movement trace and an eye movement trace. These can be combined to create a gaze trace.&lt;br /&gt;
&lt;br /&gt;
In Matlab we can use the class &#039;EyeSeeCamSci_Trace&#039; for calculating head, eye and gaze traces in RAS, HVF and DP coordinates.&lt;br /&gt;
&lt;br /&gt;
===Defining a coordinate system===&lt;br /&gt;
&lt;br /&gt;
For the purpose of the interpretation of the EyeSeeCam data we will define the starting direction as the direction the subject looks at at the beginning of each trial. The recording of the data should start when the subject is looking in this direction. &amp;lt;br&amp;gt;&lt;br /&gt;
The X, Y and Z of the EyeSeeCam data are in terms of RAS coordinates:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = anterior&lt;br /&gt;
Y = -right&lt;br /&gt;
Z = superior&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* When using &#039;EyeSeeCamSci_Trace&#039; head and gaze traces with RAS coordinates the values are relative to the starting position of subject. &lt;br /&gt;
* The HVF and DP coordinates of the eye trace are only valid when the head stays in the starting position.&lt;br /&gt;
&lt;br /&gt;
===Head movement===&lt;br /&gt;
EyeSeeCam_Sci provides us angle velocities for rotations around the  X,Y, and Z axes. For our analyses we want to have position data, so we have to calculate the position data from these angle velocities.&lt;br /&gt;
 &lt;br /&gt;
The head rotation axis X, Y and Z are defined with respect to the EyeSeeCam itself. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The EyeSeeCam data is &#039;&#039;&#039;not&#039;&#039;&#039; in the lab frame!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to create a head movement trace we have to calculate rotation matrices (delta_Rx, delta_Ry and delta_Rz) in EyeSeeCam coordinates for every time step. &lt;br /&gt;
&lt;br /&gt;
Since the time steps are about 2 ms (or 4 ms) the rotations for each time step are small. Therefore the order in which delta_Rx, delta_Ry and delta_Rz are multiplied are not important and we calculate delta_R(t) in EyeSeeCam coordinates by &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
delta_R(t) = delta_Rx * delta_Ry * delta_Rz.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the total rotation matrix in lab coordinates at time t we have iterate over all the time steps &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
R(t=0) = identity matrix&lt;br /&gt;
for t = 0 to t = tmax&lt;br /&gt;
   R(t) = R(t-delta_t) * delta_R(t)&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eye movement===&lt;br /&gt;
&lt;br /&gt;
The eye movements are given by rotations in the same coordinate system as the head movements.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = anterior (torsion of the pupil in the gaze direction)&lt;br /&gt;
Y = -right&lt;br /&gt;
Z = superior&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The torsion is not important for the gaze direction and is therefore excluded from the calculation.&lt;br /&gt;
&lt;br /&gt;
Azimuth can be defined as a rotation about the Z axis and Elevation as a contra rotation about the Y axis.&lt;br /&gt;
&lt;br /&gt;
Since the eye gaze is given as a rotation angle in OCS coordinates and the eye and head tracker coordinate are fixed relative to each other, we can easily transform OCS coordinates to the EyeSeeCam coordinates. We can then create rotation matrices in the EyeSeeCam coordinates for the azimuth and elevation of the gaze. Since the torsion is excluded the rotation matrices for azimuth and elevation can be multiplied in any order to get the eye rotation matrix in EyeSeeCam coordinates.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
eye_Rz(t) = Rz(eye_azimuth(t))&lt;br /&gt;
eye_Ry(t) = Ry(-eye_elevation(t))&lt;br /&gt;
eye_R(t)  = eye_Ry(t) * eye_Rz(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Gaze movement===&lt;br /&gt;
&lt;br /&gt;
The gaze movement is the combined head and eye movement.&lt;br /&gt;
To create the total rotation matrix that represents the &#039;gaze&#039; rotation in lab coordinates, you need to multiply the two rotation matrices you have for head and eye movement in the correct order. In your case, you have:&lt;br /&gt;
&lt;br /&gt;
A rotation matrix for the head in lab coordinates.&lt;br /&gt;
A rotation matrix for the eyes in head coordinates.&lt;br /&gt;
The correct order of multiplication is as follows:&lt;br /&gt;
&lt;br /&gt;
First, multiply the rotation matrix of the head in lab coordinates by the rotation matrix of the eyes in head coordinates.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
R_gaze(t) = head_R(t) * eye_R(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lastly you can multiply the R_gaze(t) with the starting gaze vector to get the gaze (in lab coordinates) at time t. We assume that the starting gaze is in the forward direction, which is in the X direction in the lab coordinates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
startingGaze = [1; 0; 0]&lt;br /&gt;
gaze(t) = R_gaze(t) * startingGaze&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Matlab programming==&lt;br /&gt;
&lt;br /&gt;
===Functions for converting EyeSeeCam data to double polar data===&lt;br /&gt;
There is one function for head movement, one for eye movement and one for gaze movement. The gaze movement combines head and eye movement.&lt;br /&gt;
&lt;br /&gt;
The functions take head rotation speeds and eye rotations (in degrees) as input and give objects containing the traces (head, eye and gaze respectivily) in double polar coordinates as output.&lt;br /&gt;
&lt;br /&gt;
* headTrace_DP = EyeSeeCamSciHeadRotationData2Trace_DP(Vx_deg, Vy_deg, Vz_deg)&lt;br /&gt;
* eyeTrace_DP  = EyeSeeCamSciEyeRotationData2Trace_DP(Zocs_deg, Yocs_deg)&lt;br /&gt;
* gazeTrace_DP = EyeSeeCamSciHeadAndEyeRotationData2Trace_DP(Vx_deg, Vy_deg, Vz_deg, Zocs_deg, Yocs_deg)&lt;br /&gt;
&lt;br /&gt;
The Vx, Vy and Vz are the head rotation speeds in the EyeSeeCam coordinates&lt;br /&gt;
The Zocs and Yocs are the eye rotations in OCS coordinates.&lt;br /&gt;
&lt;br /&gt;
===EyeSeeCam data===&lt;br /&gt;
The recorded data is read from an LSL stream.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% todo: LSL streaming parameters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The lsldata is a struct and has the following fields:&lt;br /&gt;
*escdata&lt;br /&gt;
*escmetadata&lt;br /&gt;
*escstr&lt;br /&gt;
*evdata0&lt;br /&gt;
*evdata1&lt;br /&gt;
*evdata2&lt;br /&gt;
*evdata3&lt;br /&gt;
*evdata4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The lsldata.escdata contains the eye and head data. The data contains a matrix for with a row for every parameter. The total of parameters is 63. The field lsldata.escmetadata.channel lists all the names of the parameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%Eye data&lt;br /&gt;
&lt;br /&gt;
RightEyePosX = 46;&lt;br /&gt;
RightEyePosY = 47;&lt;br /&gt;
RightEyePosZ = 48;&lt;br /&gt;
&lt;br /&gt;
xeye = lsldata.escdata.Data(46,:);       % right 46, left 32&lt;br /&gt;
yeye = lsldata.escdata.Data(47,:);       % right 47, left 33&lt;br /&gt;
zeye = lsldata.escdata.Data(48,:);       % right 48, left 34&lt;br /&gt;
&lt;br /&gt;
% Head data&lt;br /&gt;
HeadInertialVelXCal = 27;&lt;br /&gt;
HeadInertialVelYCal = 29;&lt;br /&gt;
HeadInertialVelZCal = 31;&lt;br /&gt;
&lt;br /&gt;
xh = lsldata.escdata.Data(27,:);       % calibrated torion velocity data HEAD&lt;br /&gt;
yh = lsldata.escdata.Data(29,:);       % calibrated vertical velocity data HEAD&lt;br /&gt;
zh = lsldata.escdata.Data(31,:);       % calibrated horizontal velocity data HEAD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EyeSeeCam_SCI&amp;diff=4897</id>
		<title>EyeSeeCam SCI</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EyeSeeCam_SCI&amp;diff=4897"/>
		<updated>2026-04-01T11:18:29Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Matlab coding */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:EyeSeeCam_SCI2.png|thumb|EyeSeeCam SCI]]&lt;br /&gt;
==Description==&lt;br /&gt;
The EyeSeeCam SCI is a combined eye tracker and head movement tracker. The head tracking is done with an IMU and the eye tracking is done with cameras and software that tracks the pupils of both eyes. The tracking data can be read out directly in Matlab. In case a dedicated computer is used for reading out the EyeSeeCam, the data it is converted to an LSL stream. &lt;br /&gt;
&lt;br /&gt;
The EyeSeeCam Sci can record at 250 and and 500 Hz. We are typically recording at 500 Hz.&lt;br /&gt;
&lt;br /&gt;
==Setup==&lt;br /&gt;
&lt;br /&gt;
* The EyeSeeCam is connected to a NUC with two USB-C cables.&lt;br /&gt;
* The NUC is connected via ethernet with a Mac Mini.&lt;br /&gt;
* The Mac Mini runs an EyeSeeCam SCI program.&lt;br /&gt;
* The Mac Mini runs an LSL server for data transfer to a Windows Computer&lt;br /&gt;
* The windows computer runs Matlab and connect with an LSL-stream to the LSL server on the Mac Mini.&lt;br /&gt;
&lt;br /&gt;
==Startup Instructions==&lt;br /&gt;
&lt;br /&gt;
* Connect the EyeSeeCam to the NUC&lt;br /&gt;
* Remove both lens covers of the EyeSeeCam&lt;br /&gt;
* Start the NUC&lt;br /&gt;
* Start the Mac Mini&lt;br /&gt;
* Login on the Mac Mini to &#039;EyeSeeCam&#039; with password &#039;Gimbal&#039;&lt;br /&gt;
* Start the LSL script on the Mac Mini(is on the desktop)&lt;br /&gt;
* Start the EyeSeeCam SCI program on the Mac Mini&lt;br /&gt;
* Start a matlab program on the windows computer (e.g. EG_program.m)&lt;br /&gt;
* Press the &amp;lt;begin&amp;gt; button in the EyeSeeCam SCI program on the Mac Mini (in the top right corner)&lt;br /&gt;
* Let the subject put on the EyeSeeCam&lt;br /&gt;
* Press &amp;lt;prepare&amp;gt; in the EyeSeeCam SCI program on the Mac Mini (shows the traces)&lt;br /&gt;
* Press &amp;lt;start&amp;gt; in the EyeSeeCam SCI program on the Mac Mini (starts collecting data)&lt;br /&gt;
* Start the experiment&lt;br /&gt;
&lt;br /&gt;
==Matlab coding==&lt;br /&gt;
&lt;br /&gt;
The EyeSeeCam is connected to a Mac Mini. On the Mac runs an LSL server (for more info about LSL see [[Lab Streaming Layer]]).&lt;br /&gt;
&lt;br /&gt;
 type = &#039;EyeSeeCam @ dcn-pl04&#039;;&lt;br /&gt;
 name = &#039;EyeSeeCam SCI Data&#039;;&lt;br /&gt;
 lslString = sprintf(&#039;type=&#039;&#039;%s&#039;&#039; and name=&#039;&#039;%s&#039;&#039;&#039;, type, name);&lt;br /&gt;
 info=lsl_resolver(lslString);&lt;br /&gt;
 lslStream = lsl_istream(info{1});&lt;br /&gt;
&lt;br /&gt;
 session = lsl_session;&lt;br /&gt;
 session.add_stream(lslStream);&lt;br /&gt;
&lt;br /&gt;
 session.start;&lt;br /&gt;
 ...wait some time...&lt;br /&gt;
 session.stop;&lt;br /&gt;
 data = lslStream.read;&lt;br /&gt;
&lt;br /&gt;
==Construction of a gaze trace==&lt;br /&gt;
The data from EyeSeeCam is recorded in different coordinate systems than the double polar system that we use to present our targets. The head and eye tracking data each have their own coordinate system. To accurately analyze our data we have to transform these coordinate systems to double polar coordinates in the lab frame. In order to relate the EyeSeeCam coordinates to the lab coordinates, we first need to record a starting gaze position for each trial. This means that during the recording, the subject has to look at the center speaker (0,0) when the trial starts. &lt;br /&gt;
&lt;br /&gt;
From the EyeSeeCam data we can construct a head movement trace and an eye movement trace. These can be combined to create a gaze trace.&lt;br /&gt;
&lt;br /&gt;
In Matlab we can use the class &#039;EyeSeeCamSci_Trace&#039; for calculating head, eye and gaze traces in RAS, HVF and DP coordinates.&lt;br /&gt;
&lt;br /&gt;
===Defining a coordinate system===&lt;br /&gt;
&lt;br /&gt;
For the purpose of the interpretation of the EyeSeeCam data we will define the starting direction as the direction the subject looks at at the beginning of each trial. The recording of the data should start when the subject is looking in this direction. &amp;lt;br&amp;gt;&lt;br /&gt;
The X, Y and Z of the EyeSeeCam data are in terms of RAS coordinates:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = anterior&lt;br /&gt;
Y = -right&lt;br /&gt;
Z = superior&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* When using &#039;EyeSeeCamSci_Trace&#039; head and gaze traces with RAS coordinates the values are relative to the starting position of subject. &lt;br /&gt;
* The HVF and DP coordinates of the eye trace are only valid when the head stays in the starting position.&lt;br /&gt;
&lt;br /&gt;
===Head movement===&lt;br /&gt;
EyeSeeCam_Sci provides us angle velocities for rotations around the  X,Y, and Z axes. For our analyses we want to have position data, so we have to calculate the position data from these angle velocities.&lt;br /&gt;
 &lt;br /&gt;
The head rotation axis X, Y and Z are defined with respect to the EyeSeeCam itself. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The EyeSeeCam data is &#039;&#039;&#039;not&#039;&#039;&#039; in the lab frame!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to create a head movement trace we have to calculate rotation matrices (delta_Rx, delta_Ry and delta_Rz) in EyeSeeCam coordinates for every time step. &lt;br /&gt;
&lt;br /&gt;
Since the time steps are about 2 ms (or 4 ms) the rotations for each time step are small. Therefore the order in which delta_Rx, delta_Ry and delta_Rz are multiplied are not important and we calculate delta_R(t) in EyeSeeCam coordinates by &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
delta_R(t) = delta_Rx * delta_Ry * delta_Rz.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the total rotation matrix in lab coordinates at time t we have iterate over all the time steps &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
R(t=0) = identity matrix&lt;br /&gt;
for t = 0 to t = tmax&lt;br /&gt;
   R(t) = R(t-delta_t) * delta_R(t)&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eye movement===&lt;br /&gt;
&lt;br /&gt;
The eye movements are given by rotations in the same coordinate system as the head movements.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = anterior (torsion of the pupil in the gaze direction)&lt;br /&gt;
Y = -right&lt;br /&gt;
Z = superior&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The torsion is not important for the gaze direction and is therefore excluded from the calculation.&lt;br /&gt;
&lt;br /&gt;
Azimuth can be defined as a rotation about the Z axis and Elevation as a contra rotation about the Y axis.&lt;br /&gt;
&lt;br /&gt;
Since the eye gaze is given as a rotation angle in OCS coordinates and the eye and head tracker coordinate are fixed relative to each other, we can easily transform OCS coordinates to the EyeSeeCam coordinates. We can then create rotation matrices in the EyeSeeCam coordinates for the azimuth and elevation of the gaze. Since the torsion is excluded the rotation matrices for azimuth and elevation can be multiplied in any order to get the eye rotation matrix in EyeSeeCam coordinates.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
eye_Rz(t) = Rz(eye_azimuth(t))&lt;br /&gt;
eye_Ry(t) = Ry(-eye_elevation(t))&lt;br /&gt;
eye_R(t)  = eye_Ry(t) * eye_Rz(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Gaze movement===&lt;br /&gt;
&lt;br /&gt;
The gaze movement is the combined head and eye movement.&lt;br /&gt;
To create the total rotation matrix that represents the &#039;gaze&#039; rotation in lab coordinates, you need to multiply the two rotation matrices you have for head and eye movement in the correct order. In your case, you have:&lt;br /&gt;
&lt;br /&gt;
A rotation matrix for the head in lab coordinates.&lt;br /&gt;
A rotation matrix for the eyes in head coordinates.&lt;br /&gt;
The correct order of multiplication is as follows:&lt;br /&gt;
&lt;br /&gt;
First, multiply the rotation matrix of the head in lab coordinates by the rotation matrix of the eyes in head coordinates.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
R_gaze(t) = head_R(t) * eye_R(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lastly you can multiply the R_gaze(t) with the starting gaze vector to get the gaze (in lab coordinates) at time t. We assume that the starting gaze is in the forward direction, which is in the X direction in the lab coordinates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
startingGaze = [1; 0; 0]&lt;br /&gt;
gaze(t) = R_gaze(t) * startingGaze&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Matlab programming==&lt;br /&gt;
&lt;br /&gt;
===Functions for converting EyeSeeCam data to double polar data===&lt;br /&gt;
There is one function for head movement, one for eye movement and one for gaze movement. The gaze movement combines head and eye movement.&lt;br /&gt;
&lt;br /&gt;
The functions take head rotation speeds and eye rotations (in degrees) as input and give objects containing the traces (head, eye and gaze respectivily) in double polar coordinates as output.&lt;br /&gt;
&lt;br /&gt;
* headTrace_DP = EyeSeeCamSciHeadRotationData2Trace_DP(Vx_deg, Vy_deg, Vz_deg)&lt;br /&gt;
* eyeTrace_DP  = EyeSeeCamSciEyeRotationData2Trace_DP(Zocs_deg, Yocs_deg)&lt;br /&gt;
* gazeTrace_DP = EyeSeeCamSciHeadAndEyeRotationData2Trace_DP(Vx_deg, Vy_deg, Vz_deg, Zocs_deg, Yocs_deg)&lt;br /&gt;
&lt;br /&gt;
The Vx, Vy and Vz are the head rotation speeds in the EyeSeeCam coordinates&lt;br /&gt;
The Zocs and Yocs are the eye rotations in OCS coordinates.&lt;br /&gt;
&lt;br /&gt;
===EyeSeeCam data===&lt;br /&gt;
The recorded data is read from an LSL stream.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% todo: LSL streaming parameters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The lsldata is a struct and has the following fields:&lt;br /&gt;
*escdata&lt;br /&gt;
*escmetadata&lt;br /&gt;
*escstr&lt;br /&gt;
*evdata0&lt;br /&gt;
*evdata1&lt;br /&gt;
*evdata2&lt;br /&gt;
*evdata3&lt;br /&gt;
*evdata4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The lsldata.escdata contains the eye and head data. The data contains a matrix for with a row for every parameter. The total of parameters is 63. The field lsldata.escmetadata.channel lists all the names of the parameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%Eye data&lt;br /&gt;
&lt;br /&gt;
RightEyePosX = 46;&lt;br /&gt;
RightEyePosY = 47;&lt;br /&gt;
RightEyePosZ = 48;&lt;br /&gt;
&lt;br /&gt;
xeye = lsldata.escdata.Data(46,:);       % right 46, left 32&lt;br /&gt;
yeye = lsldata.escdata.Data(47,:);       % right 47, left 33&lt;br /&gt;
zeye = lsldata.escdata.Data(48,:);       % right 48, left 34&lt;br /&gt;
&lt;br /&gt;
% Head data&lt;br /&gt;
HeadInertialVelXCal = 27;&lt;br /&gt;
HeadInertialVelYCal = 29;&lt;br /&gt;
HeadInertialVelZCal = 31;&lt;br /&gt;
&lt;br /&gt;
xh = lsldata.escdata.Data(27,:);       % calibrated torion velocity data HEAD&lt;br /&gt;
yh = lsldata.escdata.Data(29,:);       % calibrated vertical velocity data HEAD&lt;br /&gt;
zh = lsldata.escdata.Data(31,:);       % calibrated horizontal velocity data HEAD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=EyeSeeCam_SCI&amp;diff=4896</id>
		<title>EyeSeeCam SCI</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=EyeSeeCam_SCI&amp;diff=4896"/>
		<updated>2026-04-01T11:17:58Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Matlab coding */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:EyeSeeCam_SCI2.png|thumb|EyeSeeCam SCI]]&lt;br /&gt;
==Description==&lt;br /&gt;
The EyeSeeCam SCI is a combined eye tracker and head movement tracker. The head tracking is done with an IMU and the eye tracking is done with cameras and software that tracks the pupils of both eyes. The tracking data can be read out directly in Matlab. In case a dedicated computer is used for reading out the EyeSeeCam, the data it is converted to an LSL stream. &lt;br /&gt;
&lt;br /&gt;
The EyeSeeCam Sci can record at 250 and and 500 Hz. We are typically recording at 500 Hz.&lt;br /&gt;
&lt;br /&gt;
==Setup==&lt;br /&gt;
&lt;br /&gt;
* The EyeSeeCam is connected to a NUC with two USB-C cables.&lt;br /&gt;
* The NUC is connected via ethernet with a Mac Mini.&lt;br /&gt;
* The Mac Mini runs an EyeSeeCam SCI program.&lt;br /&gt;
* The Mac Mini runs an LSL server for data transfer to a Windows Computer&lt;br /&gt;
* The windows computer runs Matlab and connect with an LSL-stream to the LSL server on the Mac Mini.&lt;br /&gt;
&lt;br /&gt;
==Startup Instructions==&lt;br /&gt;
&lt;br /&gt;
* Connect the EyeSeeCam to the NUC&lt;br /&gt;
* Remove both lens covers of the EyeSeeCam&lt;br /&gt;
* Start the NUC&lt;br /&gt;
* Start the Mac Mini&lt;br /&gt;
* Login on the Mac Mini to &#039;EyeSeeCam&#039; with password &#039;Gimbal&#039;&lt;br /&gt;
* Start the LSL script on the Mac Mini(is on the desktop)&lt;br /&gt;
* Start the EyeSeeCam SCI program on the Mac Mini&lt;br /&gt;
* Start a matlab program on the windows computer (e.g. EG_program.m)&lt;br /&gt;
* Press the &amp;lt;begin&amp;gt; button in the EyeSeeCam SCI program on the Mac Mini (in the top right corner)&lt;br /&gt;
* Let the subject put on the EyeSeeCam&lt;br /&gt;
* Press &amp;lt;prepare&amp;gt; in the EyeSeeCam SCI program on the Mac Mini (shows the traces)&lt;br /&gt;
* Press &amp;lt;start&amp;gt; in the EyeSeeCam SCI program on the Mac Mini (starts collecting data)&lt;br /&gt;
* Start the experiment&lt;br /&gt;
&lt;br /&gt;
==Matlab coding==&lt;br /&gt;
&lt;br /&gt;
The EyeSeeCam is connected to a Mac Mini. On the Mac runs an LSL server (see [[Lab Streaming Layer]] for information about LSL).&lt;br /&gt;
&lt;br /&gt;
 type = &#039;EyeSeeCam @ dcn-pl04&#039;;&lt;br /&gt;
 name = &#039;EyeSeeCam SCI Data&#039;;&lt;br /&gt;
 lslString = sprintf(&#039;type=&#039;&#039;%s&#039;&#039; and name=&#039;&#039;%s&#039;&#039;&#039;, type, name);&lt;br /&gt;
 info=lsl_resolver(lslString);&lt;br /&gt;
 lslStream = lsl_istream(info{1});&lt;br /&gt;
&lt;br /&gt;
 session = lsl_session;&lt;br /&gt;
 session.add_stream(lslStream);&lt;br /&gt;
&lt;br /&gt;
 session.start;&lt;br /&gt;
 ...wait some time...&lt;br /&gt;
 session.stop;&lt;br /&gt;
 data = lslStream.read;&lt;br /&gt;
&lt;br /&gt;
==Construction of a gaze trace==&lt;br /&gt;
The data from EyeSeeCam is recorded in different coordinate systems than the double polar system that we use to present our targets. The head and eye tracking data each have their own coordinate system. To accurately analyze our data we have to transform these coordinate systems to double polar coordinates in the lab frame. In order to relate the EyeSeeCam coordinates to the lab coordinates, we first need to record a starting gaze position for each trial. This means that during the recording, the subject has to look at the center speaker (0,0) when the trial starts. &lt;br /&gt;
&lt;br /&gt;
From the EyeSeeCam data we can construct a head movement trace and an eye movement trace. These can be combined to create a gaze trace.&lt;br /&gt;
&lt;br /&gt;
In Matlab we can use the class &#039;EyeSeeCamSci_Trace&#039; for calculating head, eye and gaze traces in RAS, HVF and DP coordinates.&lt;br /&gt;
&lt;br /&gt;
===Defining a coordinate system===&lt;br /&gt;
&lt;br /&gt;
For the purpose of the interpretation of the EyeSeeCam data we will define the starting direction as the direction the subject looks at at the beginning of each trial. The recording of the data should start when the subject is looking in this direction. &amp;lt;br&amp;gt;&lt;br /&gt;
The X, Y and Z of the EyeSeeCam data are in terms of RAS coordinates:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = anterior&lt;br /&gt;
Y = -right&lt;br /&gt;
Z = superior&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* When using &#039;EyeSeeCamSci_Trace&#039; head and gaze traces with RAS coordinates the values are relative to the starting position of subject. &lt;br /&gt;
* The HVF and DP coordinates of the eye trace are only valid when the head stays in the starting position.&lt;br /&gt;
&lt;br /&gt;
===Head movement===&lt;br /&gt;
EyeSeeCam_Sci provides us angle velocities for rotations around the  X,Y, and Z axes. For our analyses we want to have position data, so we have to calculate the position data from these angle velocities.&lt;br /&gt;
 &lt;br /&gt;
The head rotation axis X, Y and Z are defined with respect to the EyeSeeCam itself. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;The EyeSeeCam data is &#039;&#039;&#039;not&#039;&#039;&#039; in the lab frame!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to create a head movement trace we have to calculate rotation matrices (delta_Rx, delta_Ry and delta_Rz) in EyeSeeCam coordinates for every time step. &lt;br /&gt;
&lt;br /&gt;
Since the time steps are about 2 ms (or 4 ms) the rotations for each time step are small. Therefore the order in which delta_Rx, delta_Ry and delta_Rz are multiplied are not important and we calculate delta_R(t) in EyeSeeCam coordinates by &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
delta_R(t) = delta_Rx * delta_Ry * delta_Rz.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the total rotation matrix in lab coordinates at time t we have iterate over all the time steps &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
R(t=0) = identity matrix&lt;br /&gt;
for t = 0 to t = tmax&lt;br /&gt;
   R(t) = R(t-delta_t) * delta_R(t)&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eye movement===&lt;br /&gt;
&lt;br /&gt;
The eye movements are given by rotations in the same coordinate system as the head movements.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X = anterior (torsion of the pupil in the gaze direction)&lt;br /&gt;
Y = -right&lt;br /&gt;
Z = superior&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The torsion is not important for the gaze direction and is therefore excluded from the calculation.&lt;br /&gt;
&lt;br /&gt;
Azimuth can be defined as a rotation about the Z axis and Elevation as a contra rotation about the Y axis.&lt;br /&gt;
&lt;br /&gt;
Since the eye gaze is given as a rotation angle in OCS coordinates and the eye and head tracker coordinate are fixed relative to each other, we can easily transform OCS coordinates to the EyeSeeCam coordinates. We can then create rotation matrices in the EyeSeeCam coordinates for the azimuth and elevation of the gaze. Since the torsion is excluded the rotation matrices for azimuth and elevation can be multiplied in any order to get the eye rotation matrix in EyeSeeCam coordinates.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
eye_Rz(t) = Rz(eye_azimuth(t))&lt;br /&gt;
eye_Ry(t) = Ry(-eye_elevation(t))&lt;br /&gt;
eye_R(t)  = eye_Ry(t) * eye_Rz(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Gaze movement===&lt;br /&gt;
&lt;br /&gt;
The gaze movement is the combined head and eye movement.&lt;br /&gt;
To create the total rotation matrix that represents the &#039;gaze&#039; rotation in lab coordinates, you need to multiply the two rotation matrices you have for head and eye movement in the correct order. In your case, you have:&lt;br /&gt;
&lt;br /&gt;
A rotation matrix for the head in lab coordinates.&lt;br /&gt;
A rotation matrix for the eyes in head coordinates.&lt;br /&gt;
The correct order of multiplication is as follows:&lt;br /&gt;
&lt;br /&gt;
First, multiply the rotation matrix of the head in lab coordinates by the rotation matrix of the eyes in head coordinates.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
R_gaze(t) = head_R(t) * eye_R(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lastly you can multiply the R_gaze(t) with the starting gaze vector to get the gaze (in lab coordinates) at time t. We assume that the starting gaze is in the forward direction, which is in the X direction in the lab coordinates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
startingGaze = [1; 0; 0]&lt;br /&gt;
gaze(t) = R_gaze(t) * startingGaze&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Matlab programming==&lt;br /&gt;
&lt;br /&gt;
===Functions for converting EyeSeeCam data to double polar data===&lt;br /&gt;
There is one function for head movement, one for eye movement and one for gaze movement. The gaze movement combines head and eye movement.&lt;br /&gt;
&lt;br /&gt;
The functions take head rotation speeds and eye rotations (in degrees) as input and give objects containing the traces (head, eye and gaze respectivily) in double polar coordinates as output.&lt;br /&gt;
&lt;br /&gt;
* headTrace_DP = EyeSeeCamSciHeadRotationData2Trace_DP(Vx_deg, Vy_deg, Vz_deg)&lt;br /&gt;
* eyeTrace_DP  = EyeSeeCamSciEyeRotationData2Trace_DP(Zocs_deg, Yocs_deg)&lt;br /&gt;
* gazeTrace_DP = EyeSeeCamSciHeadAndEyeRotationData2Trace_DP(Vx_deg, Vy_deg, Vz_deg, Zocs_deg, Yocs_deg)&lt;br /&gt;
&lt;br /&gt;
The Vx, Vy and Vz are the head rotation speeds in the EyeSeeCam coordinates&lt;br /&gt;
The Zocs and Yocs are the eye rotations in OCS coordinates.&lt;br /&gt;
&lt;br /&gt;
===EyeSeeCam data===&lt;br /&gt;
The recorded data is read from an LSL stream.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% todo: LSL streaming parameters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The lsldata is a struct and has the following fields:&lt;br /&gt;
*escdata&lt;br /&gt;
*escmetadata&lt;br /&gt;
*escstr&lt;br /&gt;
*evdata0&lt;br /&gt;
*evdata1&lt;br /&gt;
*evdata2&lt;br /&gt;
*evdata3&lt;br /&gt;
*evdata4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The lsldata.escdata contains the eye and head data. The data contains a matrix for with a row for every parameter. The total of parameters is 63. The field lsldata.escmetadata.channel lists all the names of the parameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%Eye data&lt;br /&gt;
&lt;br /&gt;
RightEyePosX = 46;&lt;br /&gt;
RightEyePosY = 47;&lt;br /&gt;
RightEyePosZ = 48;&lt;br /&gt;
&lt;br /&gt;
xeye = lsldata.escdata.Data(46,:);       % right 46, left 32&lt;br /&gt;
yeye = lsldata.escdata.Data(47,:);       % right 47, left 33&lt;br /&gt;
zeye = lsldata.escdata.Data(48,:);       % right 48, left 34&lt;br /&gt;
&lt;br /&gt;
% Head data&lt;br /&gt;
HeadInertialVelXCal = 27;&lt;br /&gt;
HeadInertialVelYCal = 29;&lt;br /&gt;
HeadInertialVelZCal = 31;&lt;br /&gt;
&lt;br /&gt;
xh = lsldata.escdata.Data(27,:);       % calibrated torion velocity data HEAD&lt;br /&gt;
yh = lsldata.escdata.Data(29,:);       % calibrated vertical velocity data HEAD&lt;br /&gt;
zh = lsldata.escdata.Data(31,:);       % calibrated horizontal velocity data HEAD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=Lab_Streaming_Layer&amp;diff=4895</id>
		<title>Lab Streaming Layer</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=Lab_Streaming_Layer&amp;diff=4895"/>
		<updated>2026-04-01T11:15:40Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Matlab Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Lab Streaming Layer (LSL) is an open‑source software framework designed to make it easy to send, receive, and synchronize data streams in real time. It acts like a universal “data highway” that different devices and programs can use to communicate with each other.&lt;br /&gt;
&lt;br /&gt;
LSL is commonly used in research settings—especially in neuroscience, psychology, and human‑computer interaction—to collect data from multiple sources at the same time. For example, you can stream EEG signals, motion‑tracking data, eye‑tracking data, and experiment events through LSL and keep them perfectly time‑aligned.&lt;br /&gt;
It is typically used to:&lt;br /&gt;
- Connect different sensors and software tools without worrying about compatibility&lt;br /&gt;
- Record synchronized data from multiple devices&lt;br /&gt;
- Build experiments that require real‑time data exchange&lt;br /&gt;
- Store all incoming data in a single, well‑organized format&lt;br /&gt;
&lt;br /&gt;
==LSL in Matlab (biofysica toolbox)==&lt;br /&gt;
&lt;br /&gt;
Generic lsl functions can be found in the biofysica toolbox in the directory &amp;lt;..biofysica\liblsl\liblsl-Matlab&amp;gt;. &lt;br /&gt;
*Each lsl-device can have one or more lsl-streams.&lt;br /&gt;
*An lsl-stream is identified by a type and a name. &lt;br /&gt;
*The function lsl_resolver checks if it can find the requested lslStream on the intranet.&lt;br /&gt;
*When the stream is found you must add it to a session. &lt;br /&gt;
*The session controls the actual data-acquisition with start and stop. &lt;br /&gt;
*The data is read from each stream object.&lt;br /&gt;
&lt;br /&gt;
==Matlab Example==&lt;br /&gt;
&lt;br /&gt;
*Open a stream to the EyeSeeCam&lt;br /&gt;
&lt;br /&gt;
 type = &#039;EyeSeeCam @ dcn-pl04&#039;;&lt;br /&gt;
 name = &#039;EyeSeeCam SCI Data&#039;;&lt;br /&gt;
 lslString = sprintf(&#039;type= &#039;&#039;%s&#039;&#039; and name= &#039;&#039;%s&#039;&#039;&#039;, type, name);&lt;br /&gt;
 info=lsl_resolver(lslString);&lt;br /&gt;
 lslStream = lsl_istream(info{1});&lt;br /&gt;
&lt;br /&gt;
*Open a session and add the stream to the session.&lt;br /&gt;
&lt;br /&gt;
 session = lsl_session;&lt;br /&gt;
 session.add_stream(lslStream);&lt;br /&gt;
&lt;br /&gt;
*Start and stop the session and get the data from the stream.&lt;br /&gt;
&lt;br /&gt;
 session.start;&lt;br /&gt;
 ....wait some time....&lt;br /&gt;
 session.stop;&lt;br /&gt;
 data = lslStream.read;&lt;br /&gt;
&lt;br /&gt;
In the directory &amp;lt;...biofysica\liblsl\liblsl-Matlab\examples&amp;gt; you can find more examples (with descriptions in the readme.md file).&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=Lab_Streaming_Layer&amp;diff=4894</id>
		<title>Lab Streaming Layer</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=Lab_Streaming_Layer&amp;diff=4894"/>
		<updated>2026-04-01T11:15:16Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* LSL in Matlab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Lab Streaming Layer (LSL) is an open‑source software framework designed to make it easy to send, receive, and synchronize data streams in real time. It acts like a universal “data highway” that different devices and programs can use to communicate with each other.&lt;br /&gt;
&lt;br /&gt;
LSL is commonly used in research settings—especially in neuroscience, psychology, and human‑computer interaction—to collect data from multiple sources at the same time. For example, you can stream EEG signals, motion‑tracking data, eye‑tracking data, and experiment events through LSL and keep them perfectly time‑aligned.&lt;br /&gt;
It is typically used to:&lt;br /&gt;
- Connect different sensors and software tools without worrying about compatibility&lt;br /&gt;
- Record synchronized data from multiple devices&lt;br /&gt;
- Build experiments that require real‑time data exchange&lt;br /&gt;
- Store all incoming data in a single, well‑organized format&lt;br /&gt;
&lt;br /&gt;
==LSL in Matlab (biofysica toolbox)==&lt;br /&gt;
&lt;br /&gt;
Generic lsl functions can be found in the biofysica toolbox in the directory &amp;lt;..biofysica\liblsl\liblsl-Matlab&amp;gt;. &lt;br /&gt;
*Each lsl-device can have one or more lsl-streams.&lt;br /&gt;
*An lsl-stream is identified by a type and a name. &lt;br /&gt;
*The function lsl_resolver checks if it can find the requested lslStream on the intranet.&lt;br /&gt;
*When the stream is found you must add it to a session. &lt;br /&gt;
*The session controls the actual data-acquisition with start and stop. &lt;br /&gt;
*The data is read from each stream object.&lt;br /&gt;
&lt;br /&gt;
==Matlab Example==&lt;br /&gt;
&lt;br /&gt;
*Open a stream to the EyeSeeCam&lt;br /&gt;
&lt;br /&gt;
 type = &#039;EyeSeeCam @ dcn-pl04&#039;;&lt;br /&gt;
 name = &#039;EyeSeeCam SCI Data&#039;;&lt;br /&gt;
 type = &#039;Digital Events @ lslder01&#039;;&lt;br /&gt;
 name = &#039;Digital Events 1&#039;;&lt;br /&gt;
 lslString = sprintf(&#039;type= &#039;&#039;%s&#039;&#039; and name= &#039;&#039;%s&#039;&#039;&#039;, type, name);&lt;br /&gt;
 info=lsl_resolver(lslString);&lt;br /&gt;
 lslStream = lsl_istream(info{1});&lt;br /&gt;
&lt;br /&gt;
*Open a session and add the stream to the session.&lt;br /&gt;
&lt;br /&gt;
 session = lsl_session;&lt;br /&gt;
 session.add_stream(lslStream);&lt;br /&gt;
&lt;br /&gt;
*Start and stop the session and get the data from the stream.&lt;br /&gt;
&lt;br /&gt;
 session.start;&lt;br /&gt;
 ....wait some time....&lt;br /&gt;
 session.stop;&lt;br /&gt;
 data = lslStream.read;&lt;br /&gt;
&lt;br /&gt;
In the directory &amp;lt;...biofysica\liblsl\liblsl-Matlab\examples&amp;gt; you can find more examples (with descriptions in the readme.md file).&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=Lab_Streaming_Layer&amp;diff=4893</id>
		<title>Lab Streaming Layer</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=Lab_Streaming_Layer&amp;diff=4893"/>
		<updated>2026-04-01T11:14:44Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* LSL in Matlab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Lab Streaming Layer (LSL) is an open‑source software framework designed to make it easy to send, receive, and synchronize data streams in real time. It acts like a universal “data highway” that different devices and programs can use to communicate with each other.&lt;br /&gt;
&lt;br /&gt;
LSL is commonly used in research settings—especially in neuroscience, psychology, and human‑computer interaction—to collect data from multiple sources at the same time. For example, you can stream EEG signals, motion‑tracking data, eye‑tracking data, and experiment events through LSL and keep them perfectly time‑aligned.&lt;br /&gt;
It is typically used to:&lt;br /&gt;
- Connect different sensors and software tools without worrying about compatibility&lt;br /&gt;
- Record synchronized data from multiple devices&lt;br /&gt;
- Build experiments that require real‑time data exchange&lt;br /&gt;
- Store all incoming data in a single, well‑organized format&lt;br /&gt;
&lt;br /&gt;
==LSL in Matlab==&lt;br /&gt;
&lt;br /&gt;
Generic lsl functions can be found in the biofysica toolbox in the directory &amp;lt;..biofysica\liblsl\liblsl-Matlab&amp;gt;. &lt;br /&gt;
*Each lsl-device can have one or more lsl-streams.&lt;br /&gt;
*An lsl-stream is identified by a type and a name. &lt;br /&gt;
*The function lsl_resolver checks if it can find the requested lslStream on the intranet.&lt;br /&gt;
*When the stream is found you must add it to a session. &lt;br /&gt;
*The session controls the actual data-acquisition with start and stop. &lt;br /&gt;
*The data is read from each stream object.&lt;br /&gt;
&lt;br /&gt;
==Matlab Example==&lt;br /&gt;
&lt;br /&gt;
*Open a stream to the EyeSeeCam&lt;br /&gt;
&lt;br /&gt;
 type = &#039;EyeSeeCam @ dcn-pl04&#039;;&lt;br /&gt;
 name = &#039;EyeSeeCam SCI Data&#039;;&lt;br /&gt;
 type = &#039;Digital Events @ lslder01&#039;;&lt;br /&gt;
 name = &#039;Digital Events 1&#039;;&lt;br /&gt;
 lslString = sprintf(&#039;type= &#039;&#039;%s&#039;&#039; and name= &#039;&#039;%s&#039;&#039;&#039;, type, name);&lt;br /&gt;
 info=lsl_resolver(lslString);&lt;br /&gt;
 lslStream = lsl_istream(info{1});&lt;br /&gt;
&lt;br /&gt;
*Open a session and add the stream to the session.&lt;br /&gt;
&lt;br /&gt;
 session = lsl_session;&lt;br /&gt;
 session.add_stream(lslStream);&lt;br /&gt;
&lt;br /&gt;
*Start and stop the session and get the data from the stream.&lt;br /&gt;
&lt;br /&gt;
 session.start;&lt;br /&gt;
 ....wait some time....&lt;br /&gt;
 session.stop;&lt;br /&gt;
 data = lslStream.read;&lt;br /&gt;
&lt;br /&gt;
In the directory &amp;lt;...biofysica\liblsl\liblsl-Matlab\examples&amp;gt; you can find more examples (with descriptions in the readme.md file).&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=Lab_Streaming_Layer&amp;diff=4892</id>
		<title>Lab Streaming Layer</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=Lab_Streaming_Layer&amp;diff=4892"/>
		<updated>2026-04-01T11:13:10Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Matlab Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Lab Streaming Layer (LSL) is an open‑source software framework designed to make it easy to send, receive, and synchronize data streams in real time. It acts like a universal “data highway” that different devices and programs can use to communicate with each other.&lt;br /&gt;
&lt;br /&gt;
LSL is commonly used in research settings—especially in neuroscience, psychology, and human‑computer interaction—to collect data from multiple sources at the same time. For example, you can stream EEG signals, motion‑tracking data, eye‑tracking data, and experiment events through LSL and keep them perfectly time‑aligned.&lt;br /&gt;
It is typically used to:&lt;br /&gt;
- Connect different sensors and software tools without worrying about compatibility&lt;br /&gt;
- Record synchronized data from multiple devices&lt;br /&gt;
- Build experiments that require real‑time data exchange&lt;br /&gt;
- Store all incoming data in a single, well‑organized format&lt;br /&gt;
&lt;br /&gt;
==LSL in Matlab==&lt;br /&gt;
&lt;br /&gt;
Generic lsl functions can be found in the biofysica toolbox in the directory &amp;lt;..biofysica\liblsl\liblsl-Matlab&amp;gt;. &lt;br /&gt;
*Each lsl-device can have one or more lsl-streams.&lt;br /&gt;
*An lsl-stream is identified by a type and a name. &lt;br /&gt;
*The function lsl_resolver checks if it can find the requested lslStream on the intranet. &lt;br /&gt;
*When the stream is found you must add it to the session. &lt;br /&gt;
*The session controls the actual data-acquisition with start and stop. &lt;br /&gt;
*The data is read from the stream.&lt;br /&gt;
&lt;br /&gt;
==Matlab Example==&lt;br /&gt;
&lt;br /&gt;
*Open a stream to the EyeSeeCam&lt;br /&gt;
&lt;br /&gt;
 type = &#039;EyeSeeCam @ dcn-pl04&#039;;&lt;br /&gt;
 name = &#039;EyeSeeCam SCI Data&#039;;&lt;br /&gt;
 type = &#039;Digital Events @ lslder01&#039;;&lt;br /&gt;
 name = &#039;Digital Events 1&#039;;&lt;br /&gt;
 lslString = sprintf(&#039;type= &#039;&#039;%s&#039;&#039; and name= &#039;&#039;%s&#039;&#039;&#039;, type, name);&lt;br /&gt;
 info=lsl_resolver(lslString);&lt;br /&gt;
 lslStream = lsl_istream(info{1});&lt;br /&gt;
&lt;br /&gt;
*Open a session and add the stream to the session.&lt;br /&gt;
&lt;br /&gt;
 session = lsl_session;&lt;br /&gt;
 session.add_stream(lslStream);&lt;br /&gt;
&lt;br /&gt;
*Start and stop the session and get the data from the stream.&lt;br /&gt;
&lt;br /&gt;
 session.start;&lt;br /&gt;
 ....wait some time....&lt;br /&gt;
 session.stop;&lt;br /&gt;
 data = lslStream.read;&lt;br /&gt;
&lt;br /&gt;
In the directory &amp;lt;...biofysica\liblsl\liblsl-Matlab\examples&amp;gt; you can find more examples (with descriptions in the readme.md file).&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=Lab_Streaming_Layer&amp;diff=4891</id>
		<title>Lab Streaming Layer</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=Lab_Streaming_Layer&amp;diff=4891"/>
		<updated>2026-04-01T11:11:34Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Matlab Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Lab Streaming Layer (LSL) is an open‑source software framework designed to make it easy to send, receive, and synchronize data streams in real time. It acts like a universal “data highway” that different devices and programs can use to communicate with each other.&lt;br /&gt;
&lt;br /&gt;
LSL is commonly used in research settings—especially in neuroscience, psychology, and human‑computer interaction—to collect data from multiple sources at the same time. For example, you can stream EEG signals, motion‑tracking data, eye‑tracking data, and experiment events through LSL and keep them perfectly time‑aligned.&lt;br /&gt;
It is typically used to:&lt;br /&gt;
- Connect different sensors and software tools without worrying about compatibility&lt;br /&gt;
- Record synchronized data from multiple devices&lt;br /&gt;
- Build experiments that require real‑time data exchange&lt;br /&gt;
- Store all incoming data in a single, well‑organized format&lt;br /&gt;
&lt;br /&gt;
==LSL in Matlab==&lt;br /&gt;
&lt;br /&gt;
Generic lsl functions can be found in the biofysica toolbox in the directory &amp;lt;..biofysica\liblsl\liblsl-Matlab&amp;gt;. &lt;br /&gt;
*Each lsl-device can have one or more lsl-streams.&lt;br /&gt;
*An lsl-stream is identified by a type and a name. &lt;br /&gt;
*The function lsl_resolver checks if it can find the requested lslStream on the intranet. &lt;br /&gt;
*When the stream is found you must add it to the session. &lt;br /&gt;
*The session controls the actual data-acquisition with start and stop. &lt;br /&gt;
*The data is read from the stream.&lt;br /&gt;
&lt;br /&gt;
==Matlab Example==&lt;br /&gt;
&lt;br /&gt;
*Open a stream to the EyeSeeCam&lt;br /&gt;
&lt;br /&gt;
 type = &#039;EyeSeeCam @ dcn-pl04&#039;;&lt;br /&gt;
 name = &#039;EyeSeeCam SCI Data&#039;;&lt;br /&gt;
 type = &#039;Digital Events @ lslder01&#039;;&lt;br /&gt;
 name = &#039;Digital Events 1&#039;;&lt;br /&gt;
 lslString = sprintf(&#039;type= &#039;&#039;%s&#039;&#039; and name= &#039;&#039;%s&#039;&#039;&#039;, type, name);&lt;br /&gt;
 info=lsl_resolver(lslString);&lt;br /&gt;
 lslStream = lsl_istream(info{1});&lt;br /&gt;
&lt;br /&gt;
*Open a session and add the stream to the session.&lt;br /&gt;
&lt;br /&gt;
 session = lsl_session;&lt;br /&gt;
 session.add_stream(lslStream);&lt;br /&gt;
&lt;br /&gt;
*Start and stop the session and get the data from the stream.&lt;br /&gt;
&lt;br /&gt;
 session.start;&lt;br /&gt;
 ....wait some time....&lt;br /&gt;
 session.stop;&lt;br /&gt;
 data = lslStream.read;&lt;br /&gt;
&lt;br /&gt;
In the directory &amp;lt;...biofysica\liblsl\liblsl-Matlab\examples&amp;gt; you can find more examples.&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=Lab_Streaming_Layer&amp;diff=4890</id>
		<title>Lab Streaming Layer</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=Lab_Streaming_Layer&amp;diff=4890"/>
		<updated>2026-04-01T11:11:02Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* LSL in Matlab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Lab Streaming Layer (LSL) is an open‑source software framework designed to make it easy to send, receive, and synchronize data streams in real time. It acts like a universal “data highway” that different devices and programs can use to communicate with each other.&lt;br /&gt;
&lt;br /&gt;
LSL is commonly used in research settings—especially in neuroscience, psychology, and human‑computer interaction—to collect data from multiple sources at the same time. For example, you can stream EEG signals, motion‑tracking data, eye‑tracking data, and experiment events through LSL and keep them perfectly time‑aligned.&lt;br /&gt;
It is typically used to:&lt;br /&gt;
- Connect different sensors and software tools without worrying about compatibility&lt;br /&gt;
- Record synchronized data from multiple devices&lt;br /&gt;
- Build experiments that require real‑time data exchange&lt;br /&gt;
- Store all incoming data in a single, well‑organized format&lt;br /&gt;
&lt;br /&gt;
==LSL in Matlab==&lt;br /&gt;
&lt;br /&gt;
Generic lsl functions can be found in the biofysica toolbox in the directory &amp;lt;..biofysica\liblsl\liblsl-Matlab&amp;gt;. &lt;br /&gt;
*Each lsl-device can have one or more lsl-streams.&lt;br /&gt;
*An lsl-stream is identified by a type and a name. &lt;br /&gt;
*The function lsl_resolver checks if it can find the requested lslStream on the intranet. &lt;br /&gt;
*When the stream is found you must add it to the session. &lt;br /&gt;
*The session controls the actual data-acquisition with start and stop. &lt;br /&gt;
*The data is read from the stream.&lt;br /&gt;
&lt;br /&gt;
==Matlab Example==&lt;br /&gt;
&lt;br /&gt;
*Open a stream to the EyeSeeCam&lt;br /&gt;
&lt;br /&gt;
 type = &#039;EyeSeeCam @ dcn-pl04&#039;;&lt;br /&gt;
 name = &#039;EyeSeeCam SCI Data&#039;;&lt;br /&gt;
 type = &#039;Digital Events @ lslder01&#039;;&lt;br /&gt;
 name = &#039;Digital Events 1&#039;;&lt;br /&gt;
 lslString = sprintf(&#039;type= &#039;&#039;%s&#039;&#039; and name= &#039;&#039;%s&#039;&#039;&#039;, type, name);&lt;br /&gt;
 info=lsl_resolver(lslString);&lt;br /&gt;
 lslStream = lsl_istream(info{1});&lt;br /&gt;
&lt;br /&gt;
*Open a session and add the stream to the session.&lt;br /&gt;
&lt;br /&gt;
 session = lsl_session;&lt;br /&gt;
 session.add_stream(lslStream);&lt;br /&gt;
&lt;br /&gt;
*Start and stop the session and get the data from the stream.&lt;br /&gt;
&lt;br /&gt;
 session.start;&lt;br /&gt;
 ....wait some time....&lt;br /&gt;
 session.stop;&lt;br /&gt;
 data = lslStream.read;&lt;br /&gt;
&lt;br /&gt;
In the directory &amp;lt;...biofysica\liblsl\liblsl-Matlab\examples&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
	<entry>
		<id>https://wiki.biophysics.science.ru.nl/index.php?title=Lab_Streaming_Layer&amp;diff=4889</id>
		<title>Lab Streaming Layer</title>
		<link rel="alternate" type="text/html" href="https://wiki.biophysics.science.ru.nl/index.php?title=Lab_Streaming_Layer&amp;diff=4889"/>
		<updated>2026-04-01T11:10:53Z</updated>

		<summary type="html">&lt;p&gt;Lof: /* Matlab Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Lab Streaming Layer (LSL) is an open‑source software framework designed to make it easy to send, receive, and synchronize data streams in real time. It acts like a universal “data highway” that different devices and programs can use to communicate with each other.&lt;br /&gt;
&lt;br /&gt;
LSL is commonly used in research settings—especially in neuroscience, psychology, and human‑computer interaction—to collect data from multiple sources at the same time. For example, you can stream EEG signals, motion‑tracking data, eye‑tracking data, and experiment events through LSL and keep them perfectly time‑aligned.&lt;br /&gt;
It is typically used to:&lt;br /&gt;
- Connect different sensors and software tools without worrying about compatibility&lt;br /&gt;
- Record synchronized data from multiple devices&lt;br /&gt;
- Build experiments that require real‑time data exchange&lt;br /&gt;
- Store all incoming data in a single, well‑organized format&lt;br /&gt;
&lt;br /&gt;
==LSL in Matlab==&lt;br /&gt;
&lt;br /&gt;
Generic lsl functions can be found in the biofysica toolbox in the directory &amp;lt;..\liblsl\liblsl-Matlab&amp;gt;. &lt;br /&gt;
*Each lsl-device can have one or more lsl-streams.&lt;br /&gt;
*An lsl-stream is identified by a type and a name. &lt;br /&gt;
*The function lsl_resolver checks if it can find the requested lslStream on the intranet. &lt;br /&gt;
*When the stream is found you must add it to the session. &lt;br /&gt;
*The session controls the actual data-acquisition with start and stop. &lt;br /&gt;
*The data is read from the stream.&lt;br /&gt;
&lt;br /&gt;
==Matlab Example==&lt;br /&gt;
&lt;br /&gt;
*Open a stream to the EyeSeeCam&lt;br /&gt;
&lt;br /&gt;
 type = &#039;EyeSeeCam @ dcn-pl04&#039;;&lt;br /&gt;
 name = &#039;EyeSeeCam SCI Data&#039;;&lt;br /&gt;
 type = &#039;Digital Events @ lslder01&#039;;&lt;br /&gt;
 name = &#039;Digital Events 1&#039;;&lt;br /&gt;
 lslString = sprintf(&#039;type= &#039;&#039;%s&#039;&#039; and name= &#039;&#039;%s&#039;&#039;&#039;, type, name);&lt;br /&gt;
 info=lsl_resolver(lslString);&lt;br /&gt;
 lslStream = lsl_istream(info{1});&lt;br /&gt;
&lt;br /&gt;
*Open a session and add the stream to the session.&lt;br /&gt;
&lt;br /&gt;
 session = lsl_session;&lt;br /&gt;
 session.add_stream(lslStream);&lt;br /&gt;
&lt;br /&gt;
*Start and stop the session and get the data from the stream.&lt;br /&gt;
&lt;br /&gt;
 session.start;&lt;br /&gt;
 ....wait some time....&lt;br /&gt;
 session.stop;&lt;br /&gt;
 data = lslStream.read;&lt;br /&gt;
&lt;br /&gt;
In the directory &amp;lt;...biofysica\liblsl\liblsl-Matlab\examples&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lof</name></author>
	</entry>
</feed>