Control a CRS Bits# device. See typical usage in the class summary (and in the menu demos>hardware>BitsBox of PsychoPy’s Coder view).
Important: See note on BitsPlusPlusIdentityLUT
||The main class to control a Bits++ box.|
||Set the contrast of the LUT for ‘bits++’ mode only|
||Set the LUT to have the requested gamma value Currently also resets the LUT to be a linear contrast ramp spanning its full range.|
||Sets the LUT to a specific range of values in ‘bits++’ mode only|
BitsPlusPlus(win, contrast=1.0, gamma=None, nEntries=256, mode='bits++', rampType='configFile')¶
The main class to control a Bits++ box.
This is usually a class added within the window object and is typically accessed from there. e.g.:
from psychopy import visual from psychopy.hardware import crs win = visual.Window([800,600]) bits = crs.BitsPlusPlus(win, mode='bits++') # use bits++ to reduce the whole screen contrast by 50%: bits.setContrast(0.5)
Deprecated: This was used on the old Bits++ to power-cycle the box It required the compiled dll, which only worked on windows and doesn’t work with Bits#
setContrast(contrast, LUTrange=1.0, gammaCorrect=None)¶
Set the contrast of the LUT for ‘bits++’ mode only
Set the LUT to have the requested gamma value Currently also resets the LUT to be a linear contrast ramp spanning its full range. May change this to read the current LUT, undo previous gamm and then apply new one?
setLUT(newLUT=None, gammaCorrect=True, LUTrange=1.0)¶
Sets the LUT to a specific range of values in ‘bits++’ mode only
Note that, if you leave gammaCorrect=True then any LUT values you supply will automatically be gamma corrected.
The LUT will take effect on the next Window.flip()
(NB by using BitsBox.setContr() and BitsBox.setGamma() users may not need this function)
For the Bits++ (and related) devices to work correctly it is essential that the graphics card is not altering in any way the values being passed to the monitor (e.g. by gamma correcting). It turns out that finding the ‘identity’ LUT, where exactly the same values come out as were put in, is not trivial. The obvious LUT would have something like 0/255, 1/255, 2/255... in entry locations 0,1,2... but unfortunately most graphics cards on most operating systems are ‘broken’ in one way or another, with rounding errors and incorrect start points etc.
PsychoPy provides a few of the common variants of LUT and that can be chosen when you initialise the device using the parameter rampType. If no rampType is specified then PsychoPy will choose one for you:from psychopy import visual from psychopy.hardware import crs win = visual.Window([1024,768], useFBO=True) #we need to be rendering to framebuffer bits = crs.BitsPlusPlus(win, mode = 'bits++', rampType = 1)
The Bits# is capable of reporting back the pixels in a line and this can be used to test that a particular LUT is indeed providing identity values. If you have previously connected a
BitsSharpdevice and used it with PsychoPy then a file will have been stored with a LUT that has been tested with that device. In this case set rampType = “configFile” for PsychoPy to use it if such a file is found.