Hello PsychoPy team,
I am trying to reproduce a Random Dot Kinematogram originally implemented in PsychoPy in another experimental platform, and I have come across a behaviour that I cannot explain.
In my PsychoPy script, I use:
dots = visual.DotStim(
win,
units='deg',
speed=0.07,
...
)
According to the documentation, speed is expressed in units/frame, so I would expect the dots to move by approximately 0.07 deg per displayed frame.
To verify this, I instrumented the script to record the position of one dot on every frame and computed its displacement between consecutive frames (excluding reinsertion events).
The experiment reports:
- Configured speed: 0.0700 deg/frame
- Measured refresh rate: ~60.1 Hz
- Median measured displacement: ~0.1400 deg/frame
- Corresponding speed: ~8.4 deg/s
This is approximately twice the expected displacement (0.07 × 60 ≈ 4.2 deg/s).
While looking through the source code, I noticed that draw() calls _update_dotsXY(), and that _drawLegacyGL() also appears to call _update_dotsXY() when USE_LEGACY_GL is active. This made me wonder whether the positions could be updated twice under some rendering paths, although I may be misunderstanding the rendering pipeline.
Could you clarify whether:
speedis expected to correspond exactly to the displacement between two displayed frames?- Is there any rendering path (e.g., Legacy OpenGL) where the effective displacement can differ from the configured
speed? - Alternatively, am I likely measuring the wrong internal quantity by tracking
dots._dotsXY?
Thank you very much for your time.
Best regards,