Several questions regarding Open Sesame experiment user interface
I'm currently working on my Master Project and I have to create an experiment. Since I have some previous knowledge of Open Sesame, I want to use that. However I'm not quite sure if the things I want to implement are possible in Open Sesame. Therefore I first want to check here if these things are even possible before fully focussing on implementation.
The first question I have is if it is possible to have a second screen or pop up with a scroll bar in it. In my experiment participants have to rate 3 stimuli for 16 trials and they should be able to see the previous ratings as well. Since putting that all on one screen is a lot of information, I thought being able to scroll through that screen would be a solution. Is having a seperate screen or a scroll function an option in Open Sesame? If not would there be some sort of alternative way in which I could present this information clearly to the participant?
The second question is about widgets. Can widgets be locked in any way, such that they are still on the screen but they cannot be interacted with anymore? Say that a participant put in a score of 3, 4 and 5 for the three stimuli at trial 10. Now that they go to trial 11 I want them to be able to still see the 3, 4 and 5, but they shouldnt be able to change their answer anymore, nor should they be able to fill in answers from trial 12 already. I was thinking of using sliders as widgets (I've tried out the implementation mentioned on this forum and with a few adjustments I think I could make them work), so i'd like to keep the sliders on screen instead of just a number. So a slider on the value 4 instead of just the number 4, as that will be most similar to what participants have to fill in in the next trial.
Thanks in advance for any replies, and if anything is still unclear I will gladly provide more information!
Comments
Hi sanne,
a second screen or pop up with a scroll bar in it
That is not possible I am afraid. You could in theory open new windows, but that complicates things a lot, and I am quite sure Opensesame's "regular" behaviour will be weird if you try to do that.
If not would there be some sort of alternative way in which I could present this information clearly to the participant?
You could spread your information on different form items. If you have one form per stimulus, there would "only" be 16 rating on a single form. I think it is possible to present this amount of information without causing to much of an overload on the screen.
I am even not so sure whether it is a given that presenting 3*16 rating will have to be too confusing as well. It would be best, if your experiment a bit with forms and how much information to present in which way. Once you made yourself a better impression of that, you will also have a better idea of what a good way to present the information would be. You should check out this doc page in the process of doing so.
Can widgets be locked in any way, such that they are still on the screen but they cannot be interacted with anymore?
No, they can't. What you can do though is to change the input widget (whichever you use) into a presentation widget. So, for example, a text input widget can become a text display widget. That requires however, that you make and show a new form.
If you want to use sliders, you could prepare 5 screenshots of the opensesame slider (one for each response on a 5-point likert scale) and show the images of the previous sliders instead the actual sliders for previous responses. Future responses, I would simply not show at all. That should be the least confusing.
I hope this helps!
Eduard
Hi Eduard,
Thanks so much for answering! This already helped me get a lot further with everything. I am currently using a python inline script to create the form page and it works really well.
I do have some other questions that have popped up.
My previous post that I typed up suddenly disappeared, so therefore I'm writing this current one (which will hopefully stay up).
The first one is about adding a background to the experiment. I've included a picture to show what I mean. I want one side to have a ground-like background and the other to sort of look like a screen. I assumed that what is created in the prepare phase and then put on the screen in the run phase as a first item will be the one that is most to the back and everything else will overlap it. As can be seen in this (very unfished experiment) screenshot, this does indeed work for images and text. They lay over the background. However when using any type of interactive widget (buttons, image buttons, input fields and checkboxes) these things do not work. If I remove the background then those interactive widgets do work. I've also tried to already set the background on the screen in the prepare phase instead of the run one, but this also does not work. Is there any way to get these interactive widgets to work while having a background as well? I also don't mind having to put only one background image in (that goes behind the roster in some way), just as long as everything else still works.
The second question I have is about backgrounds as well. Depending on the size of the picture that is the background it either fully fills the space or it doesn't. This can already be seen in the difference between the brown and the grey-gradient background. Is there any place to see what the measurements of the screen are? That way I could calculate how big the pictures should be to fit neatly on the screen.
My last question is about something else. I would like to display the stimuli on the left part of the screen in random locations. Is there a way that I can put the stimuli on random positions (there are 3 columns of equal length on the left part and they should be 4 rows long just like the diamond is now) on the screen, while also making sure that they don't overlap with each other? Is there an easy way to do this? Or is it just going to be a whole lot of if-else checks.
Is the position the stimuli is placed in saved in the global variables? I want to show a screen with just the static images first, and then after a certain time, the interactive widgets come into play. I thought the easiest way to do this is to just make a new form that is the same as this one, but with the interactive elements included. However as the stimuli will appear in random places it would be useful to be able to say "remember the last position you were in? go there".
Apologies for the many questions and thanks again for the very clear answers last time!
Hi @Sannee ,
Regarding question 1: this indeed sounds like it has to do with OpenSesame's prepare-run strategy. Is it possible to upload your experiment?
Regarding question 2: perhaps the built-in variables
width
andheight
can be of use? To print them to the console, you can use:To change the resolution of the screen, you could use the tab of the very first item in the experimental overview:
Regarding question 3:
There are 3 columns of equal length on the left part and they should be 4 rows long just like the diamond is now.
(This sounded to me like you want to place your stimuli on an imaginary 3*4 grid. If I assumed incorrectly, and you want positions to be completely random, just let us know.)
Somewhere before your block loop, append an
inline_script
item to define all possible (x,y) combinations:And then append a second
inline_script
item to your trial sequence to retrieve the current position:I uploaded an example experiment.
Hope this helps!
Cheers,
Lotje
Did you like my answer? Feel free to
Hi!
Apologies for the late reply, I hadn't been able to get to programming this week yet.
Sadly enough I cannot upload the file I'm working with, it exits with code 413. I also cannot see your example experiment though, so maybe it is something else? Uploading a smaller file did work, so I put the main parts of my code into the file "WidgetTest.osexp" and uploaded that here.
An important thing to note is that in this file it takes 13 seconds for the rating boxes and the outcome to appear (even though the duration is set to 2?), so it will take a while for it to jump to something. Feel free to adjust the timing!
Working with the width and height did indeed work! Currently setting the "screen" widget is commented out, because otherwise the rating does not work.
Would the random function also work for a grid? So would I then still have x,y coordinates or something more along the line of: possible_x_cols = (1,2,3,4)?
Kind regards,
Sanne
Hi Sanne,
Herewith the experiment I tried to upload to show how to implement a grid of possible target locations.
Did you like my answer? Feel free to
Hi Lotje,
I modified your solution to the grid and it did indeed work, thank you so much!
I had one last question if that is alright? It's more about how OpenSesame works, so if I should open a new discussion for this please do say so!
Right now I have two separate python inline-script forms which run after each other in succession. (Sadly enough the file still won't upload). The first script, Cond000S shows for 2 seconds and after that Cond000 shows for 13 seconds. These two forms show practically the same things, except that Cond000 also shows an outcome. As they show the same things I'd like for them to look practically the same, however this is kind of where my problem starts.
Since both forms are named differently I thought I could just copy-paste the prepare part of Cond000S and paste it onto the prepare part of Cond000. Then in run just change the form they are set to and done! But all of the things that were already created and set on the first form, did not show up on the second form. I currently fix that by naming them differently. For example I tried to make this a bit more clear by adding this picture:
In my first form, I called the trial numbers "T1" to "T2" and set them in the run part. Then in the second form, I put the O for output behind them. This works for now, but as I have to create 4 more inline-scripts in this way (for different conditions), I don't want to end up with Cond000_T1_O for all of them, since that would make everything less clear to read in my opinion.
I thought that maybe the T1 to T16 are still in memory from the first form and thus the fact that they are created again messes something up. However just leaving out the T1O to T16O and setting T1 to T16 in the run of the second python for also does not work.
My questions is, is there a way to name these variables in such a way that I can use them over different python inline-script forms? This would improve readability in my opinion and would also save me some extra time.
Kind regards,
Sanne
Hi Sanne,
If I understand the problem right, then this is indeed weird, however, I am not sure I do :)
Could you upload your experiment, and maybe put a few comments in there with what the problem is exactly?
Thanks,
Eduard
Hi Eduard,
I would love to upload my experiment! However when I try I sadly get an error message: "Request failed with status code 413", and I cannot upload it. Would there be any way to go around that?
Kind regards,
Sanne
Yup. e.g. wetransfer.com or any other filesharing platform
Here is the experiment file!
In the notepad "Current_Problems" I described the problems.
If you want to run the experiment set the subject number to 1, the order of conditions depends on subject number.
Kind regards,
Sanne
Hi sanne,
The problem seems to be twofold. First, the same label widget cannot be linked to two different forms (maybe @sebastiaan could (dis)confirm that?). At least, I can't explain otherwise why the Label widgets won't appear on the second form.
The second problem was that you had two inline_scripts, back to back. However, as you had code in both the prepare and run phase of each of them, the sequence of executing was this: inline1_prepare, inline2_prepare, inline1_run, inline2_run. Therefore, you haven't actually created two sets of labels (1-16), but you have simply overwritten the first set with the second set. That being said, I am still confused why this should be a problem for showing them on the forms (which brings us back to the first issue). As a work around, you could leave your code as it is, but move the entire code into one phase of each inline_script. Like that they are really executed sequentially. Alternatively, you could first prepare both forms, and then execute them both. In this case you would only need one inline_script. Either way, there wouldn't be the need to have the labels T1 and T1O.
I haven't yet fixed that in your code, as it is up to you which version you want to implement. However, I took the freedom to simplify your code here and there, which made it quite a bit shorter. Apologies if I changed something unintentionally.
Hope this is useful to you.
Eduard
Hi Eduard,
Thank you so much for all the help!
I read your simplifications in the code and they make it a lot cleaner and better to read and I learned a lot from them! I didn't know you did not explicitly have to set things and it makes it much clearer.
I will see which of the two methods I will implement! I thought that the order would be inline1_prepare, inline1_run and then inline2_prepare and inline2_run, but it actually makes much more sense that it is the other way around. I'll have a good look at my code and see what I will do.
Thanks again and kind regards,
Sanne
@eduard
The problem seems to be twofold. First, the same label widget cannot be linked to two different forms (maybe @sebastiaan could (dis)confirm that?)
That's true, actually! I filed an issue for this, because this should either be possible or there should be an error message.
Check out SigmundAI.eu for our OpenSesame AI assistant!
I'm wondering if it's feasible to incorporate a second screen or a pop-up with a scroll bar in my experiment. Participants are required to rate three stimuli across 16 trials, and I want them to be able to view their previous ratings. Since displaying all this information on a single screen might be overwhelming, I'm exploring the possibility of allowing participants to scroll through the content. Is it possible to implement a separate screen or a scroll function in Open Sesame? If not, are there alternative approaches to present this information clearly to the participants?
Hi Eleanor,
I'm wondering if it's feasible to incorporate a second screen or a pop-up with a scroll bar in my experiment
No, this is not possible unfortunately.
Is it possible to implement a separate screen or a scroll function in Open Sesame?
Not really, at least not in the way you might envision it. In theory, it is possible to present all that information on a single sketchpad or in a single form, but that probably requires quite a bit of fiddling and finetuning (essentially you manually subdivide a single screen into an overview part and a current rating part). It won't be pretty, but it could work.
I guess your best bet is to find a representation of the previous choices that is quite clear and space-efficient, so that you can easily add it to the current rating screen.
Perhaps you can look at the last form in this tutorial here: https://osf.io/zue8s
It might have a structure that could be useful to you.
Eduard