Millisecond Forums

GoNoGo-Task -> trial ends to quick to record proper answer

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

By IsabelBr - 4/27/2023

Hi Inquisits,

I am currently working on a GoNoGo-task which involves a default dot, the test person has to fixate. This dot then, in random time spacings of a few seconds, turns into one of two symbols. The test person has to only press the space bar, if the right symbol appears...but then as fast as possible. My issue now is, that the GoNoGo-symbols only appear for 200ms before returning to the default dot. Since reaction times cannot be faster than those 200ms, the test persons answer usually takes place, when the symbol-trial is already over. This results in the system assigning the buttonpress to the dot trial after. I already thought about changing the dot trials after each of the symbols the test person hast to react to to response trials. So then actually the response to the dot after and not to the symbol itself would be counted. However, then reacting times would be confused and not be beginning from the GoNoGo-trial on.

I hope I was able to describe my problem sufficiently. Is there any way, to assign a response to a trial which has already expired and a new one has started?

Thanks so much
Isabel
By Dave - 4/27/2023

IsabelBr - 4/27/2023
Hi Inquisits,

I am currently working on a GoNoGo-task which involves a default dot, the test person has to fixate. This dot then, in random time spacings of a few seconds, turns into one of two symbols. The test person has to only press the space bar, if the right symbol appears...but then as fast as possible. My issue now is, that the GoNoGo-symbols only appear for 200ms before returning to the default dot. Since reaction times cannot be faster than those 200ms, the test persons answer usually takes place, when the symbol-trial is already over. This results in the system assigning the buttonpress to the dot trial after. I already thought about changing the dot trials after each of the symbols the test person hast to react to to response trials. So then actually the response to the dot after and not to the symbol itself would be counted. However, then reacting times would be confused and not be beginning from the GoNoGo-trial on.

I hope I was able to describe my problem sufficiently. Is there any way, to assign a response to a trial which has already expired and a new one has started?

Thanks so much
Isabel

> Is there any way, to assign a response to a trial which has already expired and a new one has started?

No.

You should rethink your design, however. There is no reason for the symbol trial to end after only 200ms. That same trial can return to displaying the default dot after 200ms and continue to collect a response.
By Dave - 4/27/2023

Dave - 4/27/2023
IsabelBr - 4/27/2023
Hi Inquisits,

I am currently working on a GoNoGo-task which involves a default dot, the test person has to fixate. This dot then, in random time spacings of a few seconds, turns into one of two symbols. The test person has to only press the space bar, if the right symbol appears...but then as fast as possible. My issue now is, that the GoNoGo-symbols only appear for 200ms before returning to the default dot. Since reaction times cannot be faster than those 200ms, the test persons answer usually takes place, when the symbol-trial is already over. This results in the system assigning the buttonpress to the dot trial after. I already thought about changing the dot trials after each of the symbols the test person hast to react to to response trials. So then actually the response to the dot after and not to the symbol itself would be counted. However, then reacting times would be confused and not be beginning from the GoNoGo-trial on.

I hope I was able to describe my problem sufficiently. Is there any way, to assign a response to a trial which has already expired and a new one has started?

Thanks so much
Isabel

> Is there any way, to assign a response to a trial which has already expired and a new one has started?

No.

You should rethink your design, however. There is no reason for the symbol trial to end after only 200ms. That same trial can return to displaying the default dot after 200ms and continue to collect a response.

Here's a very basic example to illustrate what I mean:

<values>
/ dotduration = 0 //fixation period in ms
/ precedingfixationperiod = 0
/ symbolduration = 200
/ trialcount = 0
</values>

<list default>
/ items = (1000, 2000, 3000, 4000, 5000)
</list>

<page intro>
^Concentrate on the dot in the center of the screen. At random times, the dot will briefly turn into either a square or a triangle.

Press the SPACE BAR as quickly as you can after the dot turned into a triangle.

Do NOTHING when the dot turned into a square.
</page>


<block example>
/ preinstructions = (page.intro)
/ trials = [1 = trial.start; 2-11 = noreplace(trial.target, trial.nontarget)] // 10 trials in this example, 5 x target & 5 x nontarget
</block>

// first fixation period
<trial start>
/ ontrialbegin = [
    values.dotduration = list.default.nextvalue;
]
/ stimulustimes = [0 = clearscreen, text.defaultdot]
/ validresponse = (0)
/ trialduration = values.dotduration
</trial>

<trial target>
/ ontrialbegin = [
    trial.target.resetstimulusframes();
    values.trialcount += 1;
    values.precedingfixationperiod = values.dotduration;
    values.dotduration = list.default.nextvalue;
    trial.target.insertstimulustime(clearscreen, values.symbolduration); //clear target symbol from screen after 200 ms
    trial.target.insertstimulustime(text.defaultdot, values.symbolduration); //and display default dot for variable time
    ]
/ stimulustimes = [0=clearscreen, text.targetsymbol]
/ validresponse = (57, 0) // valid responses are space bar or no response
/ correctresponse = (57) // target is present, so correct response is space bar
/ beginresponsetime = 0
/ responseinterrupt = frames
/ trialduration = values.symbolduration + values.dotduration
</trial>

<trial nontarget>
/ ontrialbegin = [
    trial.nontarget.resetstimulusframes();
    values.trialcount += 1;
    values.precedingfixationperiod = values.dotduration;
    values.dotduration = list.default.nextvalue;
    trial.nontarget.insertstimulustime(clearscreen, values.symbolduration); //clear nontarget symbol from screen after 200 ms
    trial.nontarget.insertstimulustime(text.defaultdot, values.symbolduration); //and display default dot for variable time
    ]
/ stimulustimes = [0=clearscreen, text.nontargetsymbol]
/ validresponse = (57, 0) // valid responses are space bar or no response
/ correctresponse = (0) // target is absent, so correct response is no response
/ beginresponsetime = 0
/ responseinterrupt = frames
/ trialduration = values.symbolduration + values.dotduration
</trial>

<text defaultdot>
/ items = ("⬤")
/ erase = false
</text>

<text targetsymbol>
/ items = ("▲")
/ erase = false
</text>

<text nontargetsymbol>
/ items = ("■")
/ erase = false
</text>

<data>
/ columns = (date time subject group session blocknum blockcode values.trialcount trialcode values.precedingfixationperiod response latency correct)
/ separatefiles = true
</data>