Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Supported by

[open] How to select monitor for displaying experiment?

edited June 2013 in OpenSesame

I want to present my experiment on extra display connected to my laptop. I use xpyriment back-end. How can I choose on what monitor experiment must be presented?

Comments

  • edited 9:23AM

    I don't believe Expyriment offers any control over which monitor is selected in a dual-monitor set-up, although you could ask the Expyriment developers to make sure.

    PsychoPy does offer this functionality, so you could consider switching to the psycho back-end. I believe the way it works is that you define a monitor in the PsychoPy monitor center (you may have to install standalone PsychoPy to get this program). In OpenSesame, you can then select this monitor in the back-end settings.

    I have never done this myself, so the instructions above are approximate. Please post if you have any experiences to share!

    Cheers!
    Sebastiaan

  • edited 9:23AM

    In my opinion dual-monitor set-up is very useful. You can sit at control room and participant in another (silent, shielded) room. And all what you need for this is one another monitor and appropriate cable (VGA or so). Cheap and cheerful :)

    It's can be done with Windows settings.
    1. Run OpenSesme
    2. Double‐click on the Display control panel icon (for Windows XP)
    3. Click the Settings tab
    4. Find the drop down menu and select your second monitor. Below the window, there should be a check box that says, "Extend my Windows desktop onto this monitor" and "Use this device as the primary monitor". Check both.
    5. Apply.

    After it if you run your experiment it will be shown on the second monitor.

  • edited 9:23AM

    Ah, thank you for sharing these instructions! That sounds simple enough.

  • edited 9:23AM

    If I recall correctly, OpenSesame simply uses monitor '0' when creating the PsychoPy Window object (named 'win' within an experiment). Therefore one doesn't have to bother with the monitor center, simply figuring out which monitor is '0' (I believe it normally is the leftmost) should be enough.

  • edited 9:23AM

    @Edwin can you give short example, or another start point for me?

  • edited June 2013

    There's not much to get you started with, I'm afraid :p

    The thing is that in OpenSesame, a PsychoPy Window is created and no value is passed for the keyword argument 'screen', therefore its value defaults to 0. This means the physical screen number you'll use is always '0'. I'm not quite sure whether this is your main monitor, the leftmost monitor or the monitor that contains point (0,0) (or something entirely different). EDIT: it appears to be the monitor that contains point (0,0); it does not seem to matter whether this is your primary monitor (Kubuntu).

    PsychoPy Window: http://www.psychopy.org/api/visual/window.html

    The creation of a PsychoPy Window in OpenSesame: https://github.com/smathot/OpenSesame/blob/master/openexp/_canvas/psycho.py#L409

    EDIT: all right, never mind. I've just checked the statement above and it does NOT apply for all systems. Apparently, on Kubuntu 12.04 the screen argument doesn't do anything. You can test this yourself, by using the following script:

    # run this script using Python, mind you!
    
    # import some stuff we need
    import time
    from psychopy.visual import Window
    from psychopy.visual import TextStim
    
    # loop through possible screens (0 and 1 in this case)
    for scr in range(0,2):
        # create a Window
        win = Window(size=(1280,1024), fullscr=True, monitor="testMonitor", units='pix', winType='pyglet', screen=scr)
        # draw some text on the Window
        TextStim(win, text="This is screen %d" %scr).draw()
        win.flip()
        # wait a bit (so you can see the Window and read the text)
        time.sleep(2)
        # close the Window again
        win.close()
        # wait a bit more before showing the next Window
        time.sleep(2)
    

    I guess your monitor will simply be whatever your default for "testMonitor" is.

    EDIT2: Just checked the PsychoPy documentation (http://www.psychopy.org/api/monitors.html) on the monitors: it appears that you cannot specify which of the physical screens attached to your PC is linked to which psychopy.monitors.Monitor object. Therefore, at least on the system that I am testing this on at the moment, you cannot specify which monitor OpenSesame should use in any other way that making sure that the monitor you want to use contains point (0,0).

    (confused yet? :p)

  • edited 9:23AM

    @Edwin For me (win7) your code is working in PsychoPy shell tab of standalone version.
    So how can I manipulate screen parameter of PsychoPy in OpenSesame?

  • edited June 2013

    So, on Windows 7 you do see the window consecutively appear on two different screens? That's great! In that case, you could try the following:

    Run this in a PsychoPy shell:

    import time
    from psychopy.visual import Window
    from psychopy.visual import TextStim
    
    # create a new Window
    win = Window(size=(1280,1024), fullscr=True, monitor="testMonitor", units='pix', winType='pyglet', screen=0)
    
    # draw some text
    TextStim(win, text="This is screen 0").draw()
    win.flip()
    
    # wait for a bit
    time.sleep(2)
    
    # change the window property of the Window
    win.screen = 1
    
    # draw some text
    TextStim(win, text="This should be screen 1 now").draw()
    win.flip()
    
    # wait a bit more
    time.sleep(2)
    
    # close the Window
    win.close()
    

    If this works, you might implement this in OpenSesame, using an inline_script item placed somewhere at the start of your experiment. In the Run Phase of this inline_script, write the following:

    # set physical screen to screen nr. 1
    win.screen = 1
    

    Make sure your back-end is set to psycho when you try this! In that back-end, 'win' is a PsychoPy Window object. You can change it's screen property just the same as you would do in a regular Python script (as you did using my first two code examples).

    Hope this works for you!

  • edited 9:23AM

    Hi guys,

    Changing the screen attribute will have no effect, because (I assume) it is used only when the window is created. But what you could do in theory is close the window, and open a new one with the desired screen keyword:

    from psychopy.visual import Window
    exp.window.close()  
    exp.window = Window(fullscr=True, units='pix', screen=1)
    

    However, on my system this causes PsychoPy to throw an Exception. But it should work in principle and your mileage on other systems may vary.

    Alternatively, you could get the source file openexp/_canvas/psycho.py and change the initialization of the PsychoPy window (link). Then you can replace the original openexp/_canvas/psychopy.py (or psychopy.pyo) in your OpenSesame installation. Does that make sense? Admittedly, this is a hack, but it shouldn't be too difficult to do.

    I also opened up a feature request for this:

    Cheers!
    Sebastiaan

  • edited 9:23AM

    "hack" method is working nice

  • I know this is an older thread(!), but I just wanted to confirm, for anyone who stumbled across this thread and is still wondering... Expyriment currently does not support multiple monitors, according to the website.

  • edited February 8

    Thanks sebastiaan, using PsychoPy and editing the psycho.py file worked.

    So for future reference I did the following:

    I went to "C:\Program Files (x86)\OpenSesame\Lib\site-packages\openexp\_canvas" and opened "psycho.py"

    After finding the screen numbers with sebatiaans code, I edited the following parts of the file:


    u"psychopy_screen" : {

    u"name" : u"Screen",

    u"description" : u"The physical screen that is used",

    u"default" : 0,

    },

    And changed the 0 to 1.


    Then further down the following part:

    screen = experiment.var.get(u'psychopy_screen', 0)

    And changed the 0 to 1 as well.

    Then saved the file and that's it.

Sign In or Register to comment.