Millisecond Forums

Fast response

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

By ylyl27 - 10/4/2020

Hi!

I'm trying to make an experiment where participants see a flash on the screen and indicate where it's on the left side (press A key) or right side (press L key) of the screen. On each trial, a name is presented, followed by a mask and a mask eraser. It works fine, but I notice that in some trials, when I respond very fast, it doesn't go to the next trial, I have to press the key twice or three times to move on to the next trial. Do you have any idea on what the problem might be and how to solve it? Thanks!!

<item names>
/1 = "Alice"
/2 = "Bob"
/3 = "John"
/4 = "Jack"
/5 = "Mary"
</item>

<item mask>
/1 = "QWEREWEROSXFF"
</item>

<text namesleft>
/ items = names
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = black
/ position = (20%,50%)
</text>

<text maskleft>
/ items = mask
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = black
/ position = (20%,50%)
</text>

<text eraserleft>
/ items = mask
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = black
/ txbgcolor = black
/ position = (20%,50%)
</text>

<text namesright>
/ items = names
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = black
/ position = (80%,50%)
</text>

<text maskright>
/ items = mask
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = black
/ position = (80%,50%)
</text>

<text eraserright>
/ items = mask
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = black
/ txbgcolor = black
/ position = (80%,50%)
</text>

<trial left>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesleft; 62 = maskleft; 124 = eraserleft]
/ validresponse = (30,38)
/ correctresponse = (30)
/ inputdevice = keyboard
</trial>

<trial right>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesright; 62 = maskright; 124 = eraserright]
/ validresponse = (30,38)
/ correctresponse = (38)
/ inputdevice = keyboard
</trial>


<block task>
/ screencolor = black
/ trials = [1-10 = noreplace(left,right)]
</block>

<expt task>
/ blocks = [1=task]
</expt>
By Dave - 10/5/2020

ylyl27 - 10/4/2020
Hi!

I'm trying to make an experiment where participants see a flash on the screen and indicate where it's on the left side (press A key) or right side (press L key) of the screen. On each trial, a name is presented, followed by a mask and a mask eraser. It works fine, but I notice that in some trials, when I respond very fast, it doesn't go to the next trial, I have to press the key twice or three times to move on to the next trial. Do you have any idea on what the problem might be and how to solve it? Thanks!!

<item names>
/1 = "Alice"
/2 = "Bob"
/3 = "John"
/4 = "Jack"
/5 = "Mary"
</item>

<item mask>
/1 = "QWEREWEROSXFF"
</item>

<text namesleft>
/ items = names
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = black
/ position = (20%,50%)
</text>

<text maskleft>
/ items = mask
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = black
/ position = (20%,50%)
</text>

<text eraserleft>
/ items = mask
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = black
/ txbgcolor = black
/ position = (20%,50%)
</text>

<text namesright>
/ items = names
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = black
/ position = (80%,50%)
</text>

<text maskright>
/ items = mask
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = black
/ position = (80%,50%)
</text>

<text eraserright>
/ items = mask
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = black
/ txbgcolor = black
/ position = (80%,50%)
</text>

<trial left>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesleft; 62 = maskleft; 124 = eraserleft]
/ validresponse = (30,38)
/ correctresponse = (30)
/ inputdevice = keyboard
</trial>

<trial right>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesright; 62 = maskright; 124 = eraserright]
/ validresponse = (30,38)
/ correctresponse = (38)
/ inputdevice = keyboard
</trial>


<block task>
/ screencolor = black
/ trials = [1-10 = noreplace(left,right)]
</block>

<expt task>
/ blocks = [1=task]
</expt>

By default, trials won't accept responses until after their entire stimulus presentation sequence has been completed, here after the the "eraser" stimulus has been displayed.

<trial right>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesright; 62 = maskright; 124 = eraserright]
/ validresponse = (30,38)
/ correctresponse = (38)
/ inputdevice = keyboard
</trial>

If you want to start accepting responses and measure latency relative to the "mask" stimulus, you ought to define

<trial right>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesright; 62 = maskright; 124 = eraserright]
/ validresponse = (30,38)
/ correctresponse = (38)
/ beginresponsetime = 62
/ responseinterrupt = frames
/ inputdevice = keyboard
</trial>

and if you want to accept responses / measure latency relative to the onset of the "names" stimulus, you ought to do

<trial right>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesright; 62 = maskright; 124 = eraserright]
/ validresponse = (30,38)
/ correctresponse = (38)
/ beginresponsetime = 0
/ responseinterrupt = frames

/ inputdevice = keyboard
</trial>
By ylyl27 - 10/5/2020

Dave - 10/5/2020
ylyl27 - 10/4/2020
Hi!

I'm trying to make an experiment where participants see a flash on the screen and indicate where it's on the left side (press A key) or right side (press L key) of the screen. On each trial, a name is presented, followed by a mask and a mask eraser. It works fine, but I notice that in some trials, when I respond very fast, it doesn't go to the next trial, I have to press the key twice or three times to move on to the next trial. Do you have any idea on what the problem might be and how to solve it? Thanks!!

<item names>
/1 = "Alice"
/2 = "Bob"
/3 = "John"
/4 = "Jack"
/5 = "Mary"
</item>

<item mask>
/1 = "QWEREWEROSXFF"
</item>

<text namesleft>
/ items = names
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = black
/ position = (20%,50%)
</text>

<text maskleft>
/ items = mask
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = black
/ position = (20%,50%)
</text>

<text eraserleft>
/ items = mask
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = black
/ txbgcolor = black
/ position = (20%,50%)
</text>

<text namesright>
/ items = names
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = black
/ position = (80%,50%)
</text>

<text maskright>
/ items = mask
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = black
/ position = (80%,50%)
</text>

<text eraserright>
/ items = mask
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = black
/ txbgcolor = black
/ position = (80%,50%)
</text>

<trial left>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesleft; 62 = maskleft; 124 = eraserleft]
/ validresponse = (30,38)
/ correctresponse = (30)
/ inputdevice = keyboard
</trial>

<trial right>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesright; 62 = maskright; 124 = eraserright]
/ validresponse = (30,38)
/ correctresponse = (38)
/ inputdevice = keyboard
</trial>


<block task>
/ screencolor = black
/ trials = [1-10 = noreplace(left,right)]
</block>

<expt task>
/ blocks = [1=task]
</expt>

By default, trials won't accept responses until after their entire stimulus presentation sequence has been completed, here after the the "eraser" stimulus has been displayed.

<trial right>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesright; 62 = maskright; 124 = eraserright]
/ validresponse = (30,38)
/ correctresponse = (38)
/ inputdevice = keyboard
</trial>

If you want to start accepting responses and measure latency relative to the "mask" stimulus, you ought to define

<trial right>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesright; 62 = maskright; 124 = eraserright]
/ validresponse = (30,38)
/ correctresponse = (38)
/ beginresponsetime = 62
/ responseinterrupt = frames
/ inputdevice = keyboard
</trial>

and if you want to accept responses / measure latency relative to the onset of the "names" stimulus, you ought to do

<trial right>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesright; 62 = maskright; 124 = eraserright]
/ validresponse = (30,38)
/ correctresponse = (38)
/ beginresponsetime = 0
/ responseinterrupt = frames

/ inputdevice = keyboard
</trial>

Hi Dave, thank you so much!! Just one more question. After I changed it to "/ beginresponsetime = 0", in the raw data, the stimulusonset1 for the "names" stimulus changed into 16, instead of 0, and the the stimulusonset2 for the "mask" stimulus changed into 83 accordingly. I wonder why that's the case. These didn't happen when I changed it into "/ beginresponsetime = 62".

Thanks!!
By Dave - 10/5/2020

ylyl27 - 10/5/2020
Dave - 10/5/2020
ylyl27 - 10/4/2020
Hi!

I'm trying to make an experiment where participants see a flash on the screen and indicate where it's on the left side (press A key) or right side (press L key) of the screen. On each trial, a name is presented, followed by a mask and a mask eraser. It works fine, but I notice that in some trials, when I respond very fast, it doesn't go to the next trial, I have to press the key twice or three times to move on to the next trial. Do you have any idea on what the problem might be and how to solve it? Thanks!!

<item names>
/1 = "Alice"
/2 = "Bob"
/3 = "John"
/4 = "Jack"
/5 = "Mary"
</item>

<item mask>
/1 = "QWEREWEROSXFF"
</item>

<text namesleft>
/ items = names
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = black
/ position = (20%,50%)
</text>

<text maskleft>
/ items = mask
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = black
/ position = (20%,50%)
</text>

<text eraserleft>
/ items = mask
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = black
/ txbgcolor = black
/ position = (20%,50%)
</text>

<text namesright>
/ items = names
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = black
/ position = (80%,50%)
</text>

<text maskright>
/ items = mask
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = black
/ position = (80%,50%)
</text>

<text eraserright>
/ items = mask
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = black
/ txbgcolor = black
/ position = (80%,50%)
</text>

<trial left>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesleft; 62 = maskleft; 124 = eraserleft]
/ validresponse = (30,38)
/ correctresponse = (30)
/ inputdevice = keyboard
</trial>

<trial right>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesright; 62 = maskright; 124 = eraserright]
/ validresponse = (30,38)
/ correctresponse = (38)
/ inputdevice = keyboard
</trial>


<block task>
/ screencolor = black
/ trials = [1-10 = noreplace(left,right)]
</block>

<expt task>
/ blocks = [1=task]
</expt>

By default, trials won't accept responses until after their entire stimulus presentation sequence has been completed, here after the the "eraser" stimulus has been displayed.

<trial right>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesright; 62 = maskright; 124 = eraserright]
/ validresponse = (30,38)
/ correctresponse = (38)
/ inputdevice = keyboard
</trial>

If you want to start accepting responses and measure latency relative to the "mask" stimulus, you ought to define

<trial right>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesright; 62 = maskright; 124 = eraserright]
/ validresponse = (30,38)
/ correctresponse = (38)
/ beginresponsetime = 62
/ responseinterrupt = frames
/ inputdevice = keyboard
</trial>

and if you want to accept responses / measure latency relative to the onset of the "names" stimulus, you ought to do

<trial right>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesright; 62 = maskright; 124 = eraserright]
/ validresponse = (30,38)
/ correctresponse = (38)
/ beginresponsetime = 0
/ responseinterrupt = frames

/ inputdevice = keyboard
</trial>

Hi Dave, thank you so much!! Just one more question. After I changed it to "/ beginresponsetime = 0", in the raw data, the stimulusonset1 for the "names" stimulus changed into 16, instead of 0, and the the stimulusonset2 for the "mask" stimulus changed into 83 accordingly. I wonder why that's the case. These didn't happen when I changed it into "/ beginresponsetime = 62".

Thanks!!

Initializing the response listener takes some time, so that can lead to a delay on the order of one display refresh cycle. In the case where /beginresponsetime = 62, the initialization can happen while stimuli are already being displayed, so you're not seeing any drift in that case. The temporal distance between the onset of the "name" stimulus (16ms) and the "mask" stimulus (83ms), however, should still be as close to the specified 62ms as circumstances will allow (83 - 16 = 67ms in the concrete example). Not sure there's any good way to entirely avoid this kind of drift, at least not in a way that will generalize across different systems with different refresh cycles in a satisfactory way.
By ylyl27 - 10/5/2020

Dave - 10/6/2020
ylyl27 - 10/5/2020
Dave - 10/5/2020
ylyl27 - 10/4/2020
Hi!

I'm trying to make an experiment where participants see a flash on the screen and indicate where it's on the left side (press A key) or right side (press L key) of the screen. On each trial, a name is presented, followed by a mask and a mask eraser. It works fine, but I notice that in some trials, when I respond very fast, it doesn't go to the next trial, I have to press the key twice or three times to move on to the next trial. Do you have any idea on what the problem might be and how to solve it? Thanks!!

<item names>
/1 = "Alice"
/2 = "Bob"
/3 = "John"
/4 = "Jack"
/5 = "Mary"
</item>

<item mask>
/1 = "QWEREWEROSXFF"
</item>

<text namesleft>
/ items = names
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = black
/ position = (20%,50%)
</text>

<text maskleft>
/ items = mask
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = black
/ position = (20%,50%)
</text>

<text eraserleft>
/ items = mask
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = black
/ txbgcolor = black
/ position = (20%,50%)
</text>

<text namesright>
/ items = names
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = black
/ position = (80%,50%)
</text>

<text maskright>
/ items = mask
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = white
/ txbgcolor = black
/ position = (80%,50%)
</text>

<text eraserright>
/ items = mask
/ fontstyle = ("Courier",5%, false, false, false, false, 5, 0)
/ txcolor = black
/ txbgcolor = black
/ position = (80%,50%)
</text>

<trial left>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesleft; 62 = maskleft; 124 = eraserleft]
/ validresponse = (30,38)
/ correctresponse = (30)
/ inputdevice = keyboard
</trial>

<trial right>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesright; 62 = maskright; 124 = eraserright]
/ validresponse = (30,38)
/ correctresponse = (38)
/ inputdevice = keyboard
</trial>


<block task>
/ screencolor = black
/ trials = [1-10 = noreplace(left,right)]
</block>

<expt task>
/ blocks = [1=task]
</expt>

By default, trials won't accept responses until after their entire stimulus presentation sequence has been completed, here after the the "eraser" stimulus has been displayed.

<trial right>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesright; 62 = maskright; 124 = eraserright]
/ validresponse = (30,38)
/ correctresponse = (38)
/ inputdevice = keyboard
</trial>

If you want to start accepting responses and measure latency relative to the "mask" stimulus, you ought to define

<trial right>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesright; 62 = maskright; 124 = eraserright]
/ validresponse = (30,38)
/ correctresponse = (38)
/ beginresponsetime = 62
/ responseinterrupt = frames
/ inputdevice = keyboard
</trial>

and if you want to accept responses / measure latency relative to the onset of the "names" stimulus, you ought to do

<trial right>
/ posttrialpause = 1000
/ stimulustimes = [0 = namesright; 62 = maskright; 124 = eraserright]
/ validresponse = (30,38)
/ correctresponse = (38)
/ beginresponsetime = 0
/ responseinterrupt = frames

/ inputdevice = keyboard
</trial>

Hi Dave, thank you so much!! Just one more question. After I changed it to "/ beginresponsetime = 0", in the raw data, the stimulusonset1 for the "names" stimulus changed into 16, instead of 0, and the the stimulusonset2 for the "mask" stimulus changed into 83 accordingly. I wonder why that's the case. These didn't happen when I changed it into "/ beginresponsetime = 62".

Thanks!!

Initializing the response listener takes some time, so that can lead to a delay on the order of one display refresh cycle. In the case where /beginresponsetime = 62, the initialization can happen while stimuli are already being displayed, so you're not seeing any drift in that case. The temporal distance between the onset of the "name" stimulus (16ms) and the "mask" stimulus (83ms), however, should still be as close to the specified 62ms as circumstances will allow (83 - 16 = 67ms in the concrete example). Not sure there's any good way to entirely avoid this kind of drift, at least not in a way that will generalize across different systems with different refresh cycles in a satisfactory way.

Thanks for the explanation! This is very helpful!