Millisecond Forums

How to insert a blank without messing up rest of trial?

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

By Anoushka Shahane - 8/29/2014

Hello everyone!

My task is quite simple: I flash letters on the screen and if there is an A followed by an X, that is a target so subjects click the left mouse button. If it is any other sequence of two letters, it is a non-target, so subjects click the right mouse button.

In this particular trial, there is a voice that says "If X Target" when it is A followed by X, and a voice that says "Nontarget" when it is any other sequence (latter half code not shown below).

So the sequence should be:

blank
A
blank 
X
blank 
"If X Target"

But it is currently:

blank
A
blank
X
"If X Target"

So the sound is coming when the X is still on the screen. If I go to the stimulusframes in <trial ax_xWAND> (bolded line of code below) and insert a blank after ax_x to try to fix this, the X doesn't even show up and the whole branched trial gets messed up. How do I go about inserting the blank while retaining the X so then the "If X Target" voice shows up when the screen is blank right after the X? Any insight into this matter would be appreciated greatly. Thank you very much!


<trial ax_aWAND>
/ stimulusframes = [1=blank, ax_a]
/ pretrialpause = 800
/ trialduration = 1950
/ posttrialpause = 900
/ validresponse = (" ", noresponse)
/ correctresponse = (noresponse)
/ branch = [trial.ax_xWAND]
/ ontrialend = [if ( block.ax.totalcount >= 2 && trial.ax_aWAND.correct == false ) values.axtestcomissionerrorcount += 1]
/ ontrialend = [if ( block.ax.totalcount >= 2 ) values.axtestcomissiontrialcount += 1]
/ ontrialend = [if ( block.ax.totalcount >= 2 )  values.axtestcomissionerrorrate = values.axtestcomissionerrorcount / values.axtestcomissiontrialcount ]
</trial>

<trial ax_xWAND>
/ stimulusframes = [1=blank, ax_x, IfXTarget]
/ pretrialpause = 100
/ trialduration = 1250
/ posttrialpause = 800
/ inputdevice = mouse
/ correctresponse = (lbuttondown)
/ ontrialend = [if ( block.ax.totalcount >= 2 && trial.ax_xWAND.correct == false ) values.axtestomissionerrorcount += 1]
/ ontrialend = [if ( block.ax.totalcount >= 2 ) values.axtestomissiontrialcount += 1]
/ ontrialend = [if ( block.ax.totalcount >= 2 )  values.axtestomissionerrorrate = values.axtestomissionerrorcount / values.axtestomissiontrialcount ]
</trial>
By Dave - 8/29/2014

/ stimulusframes = [1=blank, ax_x, IfXTarget]

means you're presenting blank, ax_x and IfCTarget all in the same, 1st frame, i.e. at the exact same point in time.

If you want your sound to be played at a later point, you ought to present it at a later point in time, i.e. something along the lines of

/ stimulusframes = [1=blank, ax_x; 20=blank, IfXTarget]

adjusted to whatever timing you want or need.
By Anoushka Shahane - 8/30/2014

Excellent, thank you very much for your assistance. I thought that stimulusframes were just flashed consecutively -- this makes way more sense now. Thank you!
By Dave - 8/30/2014

In addition note that /stimulustimes exists as an alternative to /stimulusframes. /stimulustimes allows you to specify the desired presentation timing in milliseconds instead of ordinal frame number:

/ stimulustimes = [0=a,b,c; 100=d,e; 500=f; ...]