Important changes in OpenSesame 3
- Changes in 3.3
- Changes in 3.2
- Changes in 3.1
- Changes in 3.0
Changes in 3.3
OpenSesame 3.3 several major improvements that make it even easier to develop experiments. OpenSesame 3.3 is fully backwards compatible with 3.2.
Rapunzel: a new code editor
Rapunzel is a code editor, focused on numerical computing with Python and R. Technically, Rapunzel is a set of extensions for OpenSesame. But it looks and behaves as a standalone program. Happy coding!
A new inline_script editor
Related to the development of Rapuznel: The inline_script item now uses a different library (PyQode
) for the code editor. As a result, the code editor now supports many of the features that you would expect from a modern code editor, including code introspection and static code checking.
More color spaces
OpenSesame now natively supports the HSV, HSL, and CIElab color spaces.
New sound backend based on PsychoPy
The default backend is now psycho. One of the advantages of this backend is that the timing of sound presentation should be better. If you experience stuttering (clicky sound playback), you can still fall back to the the psycho_legacy backend, which uses the old PyGame-based sound system.
Support for inline_script items in coroutines
You can now use inline_script
items in coroutines
. This makes it easier to combine Python scripting with coroutines, as compared to the old method of writing a custom generator function.
OpenSesame:
Changes in 3.2
OpenSesame 3.2 brings several major improvements that make it even easier to develop experiments. OpenSesame 3.2 is fully backwards compatible with 3.1.
A better, PEP-8-compliant Python API
PEP-8 is a style guide for Python. Much modern Python software follows the PEP-8 guidelines—but, for historical reasons, OpenSesame didn't. As of 3.2, the public API now follows the guideline that the names of classes (and factory functions that generate classes) should be CamelCase
, while names of objects and functions should be underscore_case
. Practically speaking, this means that you now create Canvas
object as follows:
my_canvas = Canvas() # Note the capital C!
my_canvas.fixdot()
my_canvas.show())
Of course, the old underscore_case
names are still available as aliases, so backwards compatibility is preserved.
The API for forms has also been simplified. You no longer need to import libopensesame.widgets
, and you no longer need to pass exp
as the first argument:
form = Form()
button = Button(text=u'Ok!')
form.set_widget(button, (0, 0))
form._exec()
Improvements to the sketchpad and Canvas
Access and modify Canvas elements
Elements of a Canvas
are now objects that can be named, accessed, and modified. This means that you no longer need to redraw an entire canvas to change a single element. For example, you can draw a rotating arm as follows:
my_canvas = Canvas()
my_canvas['arm'] = Line(0, 0, 0, 0)
for x, y in xy_circle(n=100, rho=100):
my_canvas['arm'].ex = x
my_canvas['arm'].ey = y
my_canvas.show()
clock.sleep(10)
The sketchpad also allows you to name elements.
For more information, see:
Improved support for HTML and non-Latin script
Text is now rendered by Qt, which is a modern library (the same library that is also used for the graphical interface). This means that you can now use real HTML in your text. This also means that left-to-right script and other non-Latin scripts are rendered much better.
Images can be rotated
Images can now be rotated. This work both in sketchpad items and Canvas
objects.
Work with polar coordinates
If you right-click on a sketchpad elements, you can select 'Specify polar coordinates'. This allows you to calculate cartesian (x, y) coordinates based on polar coordinates, which is especially useful if you want to create circular configurations.
Form improvements
Improved form performance
Forms are now much faster when using the psycho and xpyriment backends. This is due to the fact that Canvas
elements can now be updated individually, as described above.
Validation of form input
You can now validate the input of a form; that is, you can prevent a form from closing until certain criteria are met. In addition, you can exclude characters as input from TextInput
widgets.
For more information, see:
Keyboard Improvements
Support for key-release events
The Keyboard()
object now has a get_key_release()
function, which allows you to collect key releases. Due to limitations of the underlying libraries, the function has two important limitations:
- The returned
key
may be incorrect on non-QWERTY keyboard layouts - The function has not been implemented for the psycho backend
For more information, see:
Mouse Improvements
Support for mouse-release events
The Mouse()
object now has a get_click_release()
function, which allows you to collect mouse-click releases. This function is currently not implemented for the psycho backend.
For more information, see:
Use sketchpads to define regions of interest
You can now define a linked sketchpad in a mouse_response
item. If you do this, the names of the elements on the sketchpad will be automatically used as regions of interest (ROIs) for the mouse clicks.
Forcibly end your experiment
You can now forcibly end your experiment by clicking on the Kill button in the main toolbar. This means that you no longer need to open a process/ task manager to end run-away experiments!
Improved Mac OS support
The Mac OS packages have been rebuilt from the ground up by @dschreij. The Mac OS experience should now be much smoother, faster, and less crash-prone.
A Turkish translation
A complete Turkish translation has been contributed by @aytackarabay. This means that OpenSesame is now fully translated into French, German, and Turkish. A partial translation is available in several other languages.
Changes in 3.1
OpenSesame 3.1 brings many improvements that make it even easier to develop experiments. OpenSesame 3.1 is fully backwards compatible with 3.0.
A new look!
OpenSesame has a new icon theme, based on Moka by Sam Hewitt. In addition, the user interface has been redesigned based on consistent human-interface guidelines. We hope you like the new look as much as we do!
A redesigned loop
The loop is now easier to use, and allows you to constrain randomization; this makes it possible, for example, to prevent the same stimulus from occurring twice in a row.
For more information, see:
Coroutines: doing things in parallel
The coroutines plugin is now included by default. coroutines allows you to run multiple other items in parallel; this makes it possible, for example, to continuously collect key presses while presenting a series of sketchpads.
For more information, see:
Open Science Framework integration
You can now log into the Open Science Framework (OSF) from within OpenSesame, and effortlessly synchronize experiments and data between your computer and the OSF. Thanks to the Center for Open Science for supporting this functionality!
For more information, see:
A responses object
There is a new standard Python object: responses
. This keeps track of all responses that have been collected during the experiment.
For more information, see:
Changes in 3.0
OpenSesame 3.0 has brought many improvements that make it even easier to develop experiments. Most changes are backwards compatible. That is, you can still do things the old way. However, a handful of changes are backwards incompatible, and it's important to be aware of those.
Backwards incompatible changes
Sampler properties
The sampler object has a number of properties that were previously functions. This concerns:
sampler.fade_in
sampler.pan
sampler.pitch
sampler.volume
For more information, see:
CSS3-compatible colors
You can now use CSS3-compatible color specifications, as described here:
If you use color names (e.g. 'red', 'green', etc.), this may result in slightly different colors. For example, according to CSS3, 'green' is #008000
instead (as was the case previously) of #00FF00
.
New file format (.osexp)
OpenSesame now saves experiments in .osexp
format. Of course, you can still open the old formats (.opensesame
and .opensesame.tar.gz
). For more information, see:
Simplified Python API
No more self and exp
It is no longer necessary to prefix self.
or exp.
when calling commonly used functions. For example, this will programmatically set the subject number to 2:
set_subject_nr(2)
For a list of common functions, see:
The var
object: Easy getting and setting of experimental variables
The old way of using self.get()
to get, and exp.set()
to set experimental variables has been replaced by a simpler syntax. For example, to set the variable condition
, so that you can refer to it as [condition]
in sketchpads, etc.:
var.condition = 'easy`'
And to get an experimental variable condition
that was, for example, defined in a loop:
print('Condition is %s' % var.condition)
For more information, see:
The clock
object: Time functions
Time functions are now available through the clock
object:
print('Current timestamp: %s' % clock.time())
clock.sleep(1000) # Sleep for 1 s
For more information, see:
The pool
object: Accessing the file pool
The file pool is now accessible through the pool
object, which supports a dict
-like interface (but is not really a Python dict
):
path = pool['image.png']
print('The full path to image.png is: %s' % path)
For more information, see:
No more from openexp.* import *
It is no longer necessary to import openexp
classes, and to pass exp
as the first argument. Instead, to create a canvas
object, you can simply do:
my_canvas = canvas()
There are similar factory functions (as these are called) for keyboard
, mouse
, and sampler.
For more information, see:
The synth is now a sampler
The synth is no longer a class of its own. Instead, it's a function that returns a sampler object that has been filled with a synthesized sample.
User-interface improvements
An IPython debug window
IPython, an interactive Python terminal for scientific computing, is now used for the debug window.
A live variable inspector
The variable inspector now shows the actual values of your variables while your experiment is running, and after your experiment has finished.
Undo
You can finally undo actions!
A new color scheme
The default color scheme is now Monokai. Again a dark color scheme, but with a higher contrast than the previous default, Solarized. This increased should increase legibility. And it looks good!
Consistent coordinates
Previously, OpenSesame used mixed, inconsistent screen coordinates: 0,0
was the display top-left when using Python code, and the display center when working in sketchpad items etc. As of 3.0, the display center is always 0,0
, also in Python code.
If you want to switch back to the old behavior, you can disable the 'Uniform coordinates' option in the general tab. For backwards compatibility, 'Uniform coordinates' are automatically disabled when you open an old experiment.
Using Python in text strings
You can now embed Python in text strings using the [=...]
syntax. For example, the following text string in a sketchpad:
Two times two equals [=2*2]
... will show:
Two times two equals 4
For more information, see:
Support for Python 3
OpenSesame now supports Python >= 3.4. However, many of OpenSesame's dependencies, notably PsychoPy and Expyriment, are Python 2-only. Therefore, Python 2.7 remains the default version of Python.