Streamix was born in the context of a PHD in Computer Science as a coordination language that allows to describe a network of interacting components. This network description is then translated into an executable program where each component runs independently but may interact with other components.
A scientific lab infrastructure may consist of several (hardware) devices that are used to concurrently gather participant data and deliver stimuli. The coordination language Streamix is used to map this lab topology to an executable application that allows to store the measured data and produce events controlling experimental stimuli.
The generated application consists of a set of components which are interconnected with each other. Each component performs a specific task and only communicates with other components as specified by the Streamix coordination language.
Design the experiment flow through a sequence of trials. The experiment flow may advance automatically through trials or can be blocked on specific trials. Trials can be grouped into blocks and sessions and associated to protocols.
Any number of protocols is supported. When performing the experimentat, each participant is assigned to one protocol.
Configure the logic for each trial with a finite state machine (FSM). An FSM changes states based on trigger events and may produce events on state changes.
An extensive list of event messages is provided. The available event messages which can trigger a state change or can be generated on a state change depend on the components which wre included in the Streamix application during the mapping of the lab topology.
An ongoing experiment can be controlled and monitored through a configurable graphical user interface.
The user interface offers several widgets which allow to display information of the current protocol and of specific components currently running in the application.
While the defined protocol automates the experiment flow allowing for an economic and reproducible data collection, the experimenter still has full control over the experiment and can interrupt or stop the experimental flow at any moment.
A running application creates an extensive log which allows to verify and debug operations with great precision. Different log levels can be configured for each component.
Captured data is stored into a database. This allows to selectively fetch only the data that is needed for analysis while keeping raw data in the database without impacting performance.