MWorks 0.7 released
MWorks 0.7 is now available. Highlights of this release include:
- A new user manual
- A new text stimulus
- A new video stimulus
- Support for Firmata-compatible devices (e.g. Arduino)
- Support for ISCAN eye trackers
- Support for assigning to sub-elements of list and dictionary-valued variables
- Filtering and streamlined editing in the variables window
- A client-side console window
Note that MWorks now requires OS X 10.9 “Mavericks” or later. In addition, the MATLAB tools now require MATLAB R2013a or later.
Also, please be aware that MWorks no longer includes 32-bit binaries. All applications, frameworks, libraries, and plugins are now 64-bit only.
For a full list of changes in this release, please see the release notes below.
Documentation
-
A new, Sphinx-based user manual is available (online and locally). Currently, the manual includes a component reference, which describes all available experiment components and their parameters. More content will be added in the future.
-
Local documentation can be accessed via the “Help” menu in MWServer, MWClient, and MWEditor
Core
Variables
-
Experiments can now assign to sub-elements of list and dictionary-valued variables. Specifically, the
variable
parameter of assignment actions can include one or more square-bracket-enclosed subscript expressions (e.g.x[0]["foo"]
) that indicate the sub-element to which to assign a new value. Assigning past the end of a list causes the intervening elements to be filled with “undefined” values. -
Local variable scoping once again works as intended
-
If omitted from the experiment XML, variable parameters
type
andscope
now default toany
andglobal
, respectively -
Variables now accept only
never
andwhen_changed
for theirlogging
parameter (the other options were never implemented and resulted in no logging) -
If omitted from the experiment XML, variable parameter
logging
now defaults towhen_changed
(instead ofnever
) -
Selection variable parameters
selection
,nsamples
, andsampling_method
now default tosequential
,1
, andcycles
, respectively
Paradigm Components
-
Protocol, Block, List, and Trial parameters
selection
,nsamples
, andsampling_method
now default tosequential
,1
, andcycles
, respectively -
Task System and Task System State now announce local variables (to the event stream and event file) when entered
-
Removed unused
description
parameter from all paradigm components -
Improved parameter validation in paradigm components
Actions
-
Added Blackrock LED Driver Prepare action
-
Added Blackrock LED Driver Read Temperatures action. Temperatures are no longer updated automatically and must be explicitly requested by the experiment.
-
Scheduled actions are now canceled automatically when the experiment stops
-
Bring Stimulus to Front and Send Stimulus to Back now work on stimulus group elements (previously they had no effect)
-
Live Queue Stimulus now respects
explicit
stimulus loading
Visual Stimuli
-
Added Text Stimulus for displaying dynamically-generated text
-
Added Video Stimulus for playing video files
-
The main display refresh rate is now announced (to the server console and event stream) when an experiment starts
-
MWorks now issues an error about and refuses to draw non-loaded stimuli
I/O Devices
-
Added Firmata interface for performing digital I/O with Arduino boards and other compatible hardware
-
Added support for ISCAN eye trackers
-
-
Support connection via a USB-to-serial adapter
-
Allow user to set units for rate and volume
-
Send all pumping parameters during pump initialization and re-send them only if they change
-
Updating the output variable now (potentially) uploads the rate, volume, and direction settings even if the device is not active; however, infusion/withdrawal still happens only when the device is active
-
Added option to disable logging of command I/O
-
Strip control characters from command and response strings before logging them
-
-
-
Can now receive input from the mirror window (instead of the main stimulus display)
-
Fixes to cursor hiding
-
Other
-
-
Make computed velocity components available to experiments
-
Removed the “advanced” eye monitor, as it was never fully implemented and didn’t do any more than the “basic” one
-
-
Timers no longer spawn a new thread to expire themselves
-
Support saving data files to subdirectories of the data file directory (achieved by including the sub-path as part of the data file name)
-
Correctly load resource files identified by client-side absolute paths from server-side experiment storage
Applications
Client
-
Console window is now available in MWClient
-
Added search field to variables window. Typing text in to the search field filters the variables list to include only variables whose name includes the text. Pressing the TAB key when in the search field jumps to and begins editing the first matched variable (and shift-TAB jumps to the last match).
-
MATLAB window now supports “cleanup” functions
-
Prevent deadlock when changing MATLAB script while experiment is running
-
When connecting to an already-open experiment, MWClient now shows the most recently used variable set
-
When displaying the location of calibration samples, the eye window now uses calibrated coordinates (obtained by applying the current calibration to the raw sample coordinates), instead of the raw sample coordinates
Server
-
Moved MWServer’s network settings in to its main preferences window
-
Allow selection of MWServer’s listening port
-
Replaced MWServer’s “Network” toolbar button with a “Preferences” one, and removed its “Network” menu
-
Removed “File” and “Actions” menus from MWServer, as the functionality they offered is provided by MWClient
-
Removed “Use high-precision clock” option from MWServer’s preferences window, as the alternative clock is no longer available
-
Console window now persists its “Scroll to bottom on message” and “Alert on error” settings
Installer
-
Installer disk image is now signed (in addition to the installer itself and installed apps)
-
Installer now always backs up previous installation (to prevent custom plugins that require recompilation from causing crashes)
Internals/Development
-
All binaries are now 64-bit only
-
Most Objective-C code now uses Automatic Reference Counting (ARC)
-
MWorks is now built against the latest macOS SDK, using
-Wpartial-availability
(available as of Xcode 7.3) to catch unintended usage of APIs not available on all supported OS versions -
Added a script that converts MWLibrary.xml to MWComponents.yaml. The latter is ingested to generate the component reference.
-
Upgraded to new versions of several supporting libraries:
- boost: 1.59.0 ➞ 1.62.0
- jpeg: 9a ➞ 9b
- libpng: 1.2.52 ➞ 1.2.56
- zeromq: 4.1.3 ➞ 4.1.6
-
Added msgpack to supporting libs
-
Inter-app event I/O now uses ZeroMQ and MessagePack instead of Scarab. Scarab is now used only for reading/writing event files.
-
Datum no longer uses ScarabDatum internally. Instead, Datum instances are converted to/from ScarabDatum instances as needed.
-
Replaced constructors/methods of Datum and Event for converting from/to ScarabDatum’s with standalone conversion functions
-
Many changes and improvements to the implementation and API of Datum
-
ComponentInfo now supports ignored parameters
-
Added SerialPort class
-
Removed MachClock. Requests for it now return HighPrecisionClock.
-
Added SimpleClock, which is used by MWClient and, unlike HighPrecisionClock, does not use a real-time thread
-
Added Clock::yield, which waits for a minimal (but non-zero) time interval
-
Added ColoredTransformStimulus, which derives from BasicTransformStimulus and now serves as the base class for RectangleStimulus and CircleStimulus
-
Added DynamicStimulusBase template class, which performs the same functions as StandardDynamicStimulus but takes the base stimulus type as a template parameter. StandardDynamicStimulus is now an instantiation of DynamicStimulusBase (using Stimulus as the base stimulus type).
-
Stimulus::needDraw now takes the StimulusDisplay instance as a parameter
-
Previously empty Stimulus methods load/unload now set/clear the
loaded
flag