Millisecond Forums

show mouse cursor with conditional statement

https://forums.millisecond.com/Topic30469.aspx

By eleonora_parr - 1/11/2021

Hi all,
I am programming an experiment during which subjects are shown with a series of picture frames that  in sequence create a brief video. After watching the video the item on the screen suddenly disappears, and that's when subjects have to use the mouse cursor to select where they think the item was before it disappeared. 
For this reason I don't want the mouse cursor to be on the screen for the whole trial, in order to prevent that subjects could trace with the mouse the position of the item before it disappears. 
So, my problem is that -as far as I know - the showmousecursor property could be set either to true or false, but I want the mouse cursor to show just at the end of the trial, specifically when the last frame is presented. Do you know any trick (i.e. conditional statements that could be used) to show the mouse cursor just at the end of trial (i.e. when participant have to make the response)??

Here is my code:

<values>
/Actiontype=0
/con = 0
/object = 0
/length = 0
/time_sound = (round(rand(60,180)))
/time_second_frame = time_sound+60+5
/time_third_frame = time_sound+60+5+5
/time_final_third = time_sound+60+5+5+5
</values>

<trial safe_3_backward_inc>
/ ontrialbegin = [values.Actiontype="Withdrawal"; values.con = "Incongruent"; values.object = "safe"; values.length = 3]
/ ontrialbegin = [trial.safe_3_backward_inc.insertstimulusframe(sound.take, values.time_sound); trial.safe_3_backward_inc.insertstimulusframe(picture.safe_minus_second_frame, values.time_second_frame);trial.safe_3_backward_inc.insertstimulusframe(picture.safe_minus_third_frame, values.time_third_frame);trial.safe_3_backward_inc.insertstimulusframe(picture.safe_w, values.time_final_third)]
/ stimulusframes = [1 = safe_first_frame]
/ inputdevice = mouse
/ correctresponse =(lbuttondown)
/ validresponse = (lbuttondown)
/ responsetrial = (lbuttondown, space)
/ ontrialend = [values.x=trial.safe_3_backward_inc.responsex;values.y=trial.safe_3_backward_inc.responsey;]
</trial>


Thank you in advance!


Eleonora
By Dave - 1/11/2021

eleonora_parr - 1/11/2021
Hi all,
I am programming an experiment during which subjects are shown with a series of picture frames that  in sequence create a brief video. After watching the video the item on the screen suddenly disappears, and that's when subjects have to use the mouse cursor to select where they think the item was before it disappeared. 
For this reason I don't want the mouse cursor to be on the screen for the whole trial, in order to prevent that subjects could trace with the mouse the position of the item before it disappears. 
So, my problem is that -as far as I know - the showmousecursor property could be set either to true or false, but I want the mouse cursor to show just at the end of the trial, specifically when the last frame is presented. Do you know any trick (i.e. conditional statements that could be used) to show the mouse cursor just at the end of trial (i.e. when participant have to make the response)??

Here is my code:

<values>
/Actiontype=0
/con = 0
/object = 0
/length = 0
/time_sound = (round(rand(60,180)))
/time_second_frame = time_sound+60+5
/time_third_frame = time_sound+60+5+5
/time_final_third = time_sound+60+5+5+5
</values>

<trial safe_3_backward_inc>
/ ontrialbegin = [values.Actiontype="Withdrawal"; values.con = "Incongruent"; values.object = "safe"; values.length = 3]
/ ontrialbegin = [trial.safe_3_backward_inc.insertstimulusframe(sound.take, values.time_sound); trial.safe_3_backward_inc.insertstimulusframe(picture.safe_minus_second_frame, values.time_second_frame);trial.safe_3_backward_inc.insertstimulusframe(picture.safe_minus_third_frame, values.time_third_frame);trial.safe_3_backward_inc.insertstimulusframe(picture.safe_w, values.time_final_third)]
/ stimulusframes = [1 = safe_first_frame]
/ inputdevice = mouse
/ correctresponse =(lbuttondown)
/ validresponse = (lbuttondown)
/ responsetrial = (lbuttondown, space)
/ ontrialend = [values.x=trial.safe_3_backward_inc.responsex;values.y=trial.safe_3_backward_inc.responsey;]
</trial>


Thank you in advance!


Eleonora

The only trick I can think of would be to split things into two trials, i.e. something like this:

<values>
/Actiontype=0
/con = 0
/object = 0
/length = 0
/time_sound = (round(rand(60,180)))
/time_second_frame = time_sound+60+5
/time_third_frame = time_sound+60+5+5
/time_final_third = time_sound+60+5+5+5
</values>

<trial safe_3_backward_inc_present>
/ ontrialbegin = [values.Actiontype="Withdrawal"; values.con = "Incongruent"; values.object = "safe"; values.length = 3]
/ ontrialbegin = [trial.safe_3_backward_inc.insertstimulusframe(sound.take, values.time_sound);
    trial.safe_3_backward_inc.insertstimulusframe(picture.safe_minus_second_frame, values.time_second_frame);
    trial.safe_3_backward_inc.insertstimulusframe(picture.safe_minus_third_frame, values.time_third_frame);
]
/ stimulusframes = [1 = safe_first_frame]
/ validresponse = (0)
/ inputdevice = mousekey
/ showmousecursor = false
/ trialduration = values.time_final_third
/ branch = [
    trial.safe_3_backward_inc_respond;
]
/ recorddata = false
</trial>

<trial safe_3_backward_inc_respond>
/ stimulusframes = [1=safe_w]
/ inputdevice = mouse
/ showmousecursor = true
/ validresponse = (lbuttondown)
/ correctresponse = (lbuttondown)
...
/ ontrialend = [values.x=trial.safe_3_backward_inc_respond.responsex;values.y=trial.safe_3_backward_inc_respond.responsey;]
</trial>
By eleonora_parr - 1/11/2021

Dave - 1/11/2021
eleonora_parr - 1/11/2021
Hi all,
I am programming an experiment during which subjects are shown with a series of picture frames that  in sequence create a brief video. After watching the video the item on the screen suddenly disappears, and that's when subjects have to use the mouse cursor to select where they think the item was before it disappeared. 
For this reason I don't want the mouse cursor to be on the screen for the whole trial, in order to prevent that subjects could trace with the mouse the position of the item before it disappears. 
So, my problem is that -as far as I know - the showmousecursor property could be set either to true or false, but I want the mouse cursor to show just at the end of the trial, specifically when the last frame is presented. Do you know any trick (i.e. conditional statements that could be used) to show the mouse cursor just at the end of trial (i.e. when participant have to make the response)??

Here is my code:

<values>
/Actiontype=0
/con = 0
/object = 0
/length = 0
/time_sound = (round(rand(60,180)))
/time_second_frame = time_sound+60+5
/time_third_frame = time_sound+60+5+5
/time_final_third = time_sound+60+5+5+5
</values>

<trial safe_3_backward_inc>
/ ontrialbegin = [values.Actiontype="Withdrawal"; values.con = "Incongruent"; values.object = "safe"; values.length = 3]
/ ontrialbegin = [trial.safe_3_backward_inc.insertstimulusframe(sound.take, values.time_sound); trial.safe_3_backward_inc.insertstimulusframe(picture.safe_minus_second_frame, values.time_second_frame);trial.safe_3_backward_inc.insertstimulusframe(picture.safe_minus_third_frame, values.time_third_frame);trial.safe_3_backward_inc.insertstimulusframe(picture.safe_w, values.time_final_third)]
/ stimulusframes = [1 = safe_first_frame]
/ inputdevice = mouse
/ correctresponse =(lbuttondown)
/ validresponse = (lbuttondown)
/ responsetrial = (lbuttondown, space)
/ ontrialend = [values.x=trial.safe_3_backward_inc.responsex;values.y=trial.safe_3_backward_inc.responsey;]
</trial>


Thank you in advance!


Eleonora

The only trick I can think of would be to split things into two trials, i.e. something like this:

<values>
/Actiontype=0
/con = 0
/object = 0
/length = 0
/time_sound = (round(rand(60,180)))
/time_second_frame = time_sound+60+5
/time_third_frame = time_sound+60+5+5
/time_final_third = time_sound+60+5+5+5
</values>

<trial safe_3_backward_inc_present>
/ ontrialbegin = [values.Actiontype="Withdrawal"; values.con = "Incongruent"; values.object = "safe"; values.length = 3]
/ ontrialbegin = [trial.safe_3_backward_inc.insertstimulusframe(sound.take, values.time_sound);
    trial.safe_3_backward_inc.insertstimulusframe(picture.safe_minus_second_frame, values.time_second_frame);
    trial.safe_3_backward_inc.insertstimulusframe(picture.safe_minus_third_frame, values.time_third_frame);
]
/ stimulusframes = [1 = safe_first_frame]
/ validresponse = (0)
/ inputdevice = mousekey
/ showmousecursor = false
/ trialduration = values.time_final_third
/ branch = [
    trial.safe_3_backward_inc_respond;
]
/ recorddata = false
</trial>

<trial safe_3_backward_inc_respond>
/ stimulusframes = [1=safe_w]
/ inputdevice = mouse
/ showmousecursor = true
/ validresponse = (lbuttondown)
/ correctresponse = (lbuttondown)
...
/ ontrialend = [values.x=trial.safe_3_backward_inc_respond.responsex;values.y=trial.safe_3_backward_inc_respond.responsey;]
</trial>

Hi Dave,
Thank you for your answer.
Do you mean that after your code I would then need to combine the trials within a block?
Just to make sure that I am understanding correctly.. 
I've already tried the option of splitting the two but I would have preferred to keep everything into a single trial, that is why I was looking for a trick :) If that's not possible I will go with this option though 

Thank you again,

Eleonora
By Dave - 1/11/2021

eleonora_parr - 1/11/2021
Dave - 1/11/2021
eleonora_parr - 1/11/2021
Hi all,
I am programming an experiment during which subjects are shown with a series of picture frames that  in sequence create a brief video. After watching the video the item on the screen suddenly disappears, and that's when subjects have to use the mouse cursor to select where they think the item was before it disappeared. 
For this reason I don't want the mouse cursor to be on the screen for the whole trial, in order to prevent that subjects could trace with the mouse the position of the item before it disappears. 
So, my problem is that -as far as I know - the showmousecursor property could be set either to true or false, but I want the mouse cursor to show just at the end of the trial, specifically when the last frame is presented. Do you know any trick (i.e. conditional statements that could be used) to show the mouse cursor just at the end of trial (i.e. when participant have to make the response)??

Here is my code:

<values>
/Actiontype=0
/con = 0
/object = 0
/length = 0
/time_sound = (round(rand(60,180)))
/time_second_frame = time_sound+60+5
/time_third_frame = time_sound+60+5+5
/time_final_third = time_sound+60+5+5+5
</values>

<trial safe_3_backward_inc>
/ ontrialbegin = [values.Actiontype="Withdrawal"; values.con = "Incongruent"; values.object = "safe"; values.length = 3]
/ ontrialbegin = [trial.safe_3_backward_inc.insertstimulusframe(sound.take, values.time_sound); trial.safe_3_backward_inc.insertstimulusframe(picture.safe_minus_second_frame, values.time_second_frame);trial.safe_3_backward_inc.insertstimulusframe(picture.safe_minus_third_frame, values.time_third_frame);trial.safe_3_backward_inc.insertstimulusframe(picture.safe_w, values.time_final_third)]
/ stimulusframes = [1 = safe_first_frame]
/ inputdevice = mouse
/ correctresponse =(lbuttondown)
/ validresponse = (lbuttondown)
/ responsetrial = (lbuttondown, space)
/ ontrialend = [values.x=trial.safe_3_backward_inc.responsex;values.y=trial.safe_3_backward_inc.responsey;]
</trial>


Thank you in advance!


Eleonora

The only trick I can think of would be to split things into two trials, i.e. something like this:

<values>
/Actiontype=0
/con = 0
/object = 0
/length = 0
/time_sound = (round(rand(60,180)))
/time_second_frame = time_sound+60+5
/time_third_frame = time_sound+60+5+5
/time_final_third = time_sound+60+5+5+5
</values>

<trial safe_3_backward_inc_present>
/ ontrialbegin = [values.Actiontype="Withdrawal"; values.con = "Incongruent"; values.object = "safe"; values.length = 3]
/ ontrialbegin = [trial.safe_3_backward_inc.insertstimulusframe(sound.take, values.time_sound);
    trial.safe_3_backward_inc.insertstimulusframe(picture.safe_minus_second_frame, values.time_second_frame);
    trial.safe_3_backward_inc.insertstimulusframe(picture.safe_minus_third_frame, values.time_third_frame);
]
/ stimulusframes = [1 = safe_first_frame]
/ validresponse = (0)
/ inputdevice = mousekey
/ showmousecursor = false
/ trialduration = values.time_final_third
/ branch = [
    trial.safe_3_backward_inc_respond;
]
/ recorddata = false
</trial>

<trial safe_3_backward_inc_respond>
/ stimulusframes = [1=safe_w]
/ inputdevice = mouse
/ showmousecursor = true
/ validresponse = (lbuttondown)
/ correctresponse = (lbuttondown)
...
/ ontrialend = [values.x=trial.safe_3_backward_inc_respond.responsex;values.y=trial.safe_3_backward_inc_respond.responsey;]
</trial>

Hi Dave,
Thank you for your answer.
Do you mean that after your code I would then need to combine the trials within a block?
Just to make sure that I am understanding correctly.. 
I've already tried the option of splitting the two but I would have preferred to keep everything into a single trial, that is why I was looking for a trick :) If that's not possible I will go with this option though 

Thank you again,

Eleonora

> Do you mean that after your code I would then need to combine the trials within a block?

You only need to run the first ("present") trial via a block or other means. That trial then automatically invokes the corresponding "respond" trial via /branch.

I really cannot think of any other option, so this would be the way to go.