implement change blindness flicker paradigm

319 views
Skip to first unread message

melissa

unread,
Jun 21, 2010, 10:27:52 AM6/21/10
to E-Prime
Hi,

I am trying to implement the classic flicker paradigm for a change
blindness study. I would like to oscillate between a picture and its
mask for 40 seconds or until a participant hits a button. I think the
best way to do this would be to use one slide object and oscillate
between slide states (1 state for the picture, 1 state for the mask)
in order to keep track of RT for the user response. Is this possible?

Thank you,
Melissa

David McFarlane

unread,
Jun 21, 2010, 1:36:20 PM6/21/10
to e-p...@googlegroups.com
Melissa,

Stock reminder: 1) I do not work for PST. 2) PST's trained staff
takes any and all questions at
http://support.pstnet.com/e%2Dprime/support/login.asp , and they
strive to respond to all requests in 24-48 hours (although current
estimates are more like 10 days) -- this is pretty much their
substitute for proper documentation, so make full use of it. 3) If
you do get an answer from PST Web Support, please extend the courtesy
of posting their reply back here for the sake of others.

That said, here is my take...

Yes, that is possible, to a point. However, if you use an input mask
on the Slide and just rapidly re-run that Slide, you will have some
trouble with RTs. That is because the input mask will not be armed
in the short intervals between each running of the Slide object, and
if a response comes in during those intervals then it will be
missed. And the more rapidly you cycle through your Slide, the
greater the effect. (I know, because I ran into this with an
experiment a few years ago.)

For something like this, better to use "extended response" (see
Appendix C of the User's Guide that came with E-Prime). Implement
your flicker loop however you like, and just before your flicker loop
add a Wait object. Set its Duration to 0, give it an appropriate
input mask, and set the Time Limit to (infinite), or a time limit
that you choose. Set End Action to Terminate or (none), as seems
appropriate. Now the input mask from the Wait object will run over
all the iterations of your flicker loop and will catch a response at
any time. If you want the flicker loop to then react to the
response, use some inline code such as (assuming you name your Wait
object RespWait)

If Not(RespWait.InputMasks.IsPending()) Then ...
If RespWait.RT <> 0 Then ...
If RespWait.RTTime <> 0 Then ...
If RespWait.RESP <> "" Then ...

Finally, given that the Wait object takes care of getting the
response, I would probably dispense with the two-state Slide (which
requires even more inline code) and just use a pair of ordinary
stimulus objects for the flicker loop.

-- David McFarlane, Professional Faultfinder

melissa

unread,
Jun 21, 2010, 3:11:56 PM6/21/10
to E-Prime
David,

Thank you. That solves the problem of getting the response time while
the flickering is occurring. However, I am still having issues with
how to create a loop that will loop the two stimulus objects back and
forth for either 40 secs or until user input. First off, how would I
implement this type of loop? With an inline object? Secondly, guess
I could have the loop end when the wait object ends or unless there is
user input? I am not quite sure how this would be done in Eprime.

Thank you for the help!
Melissa

On Jun 21, 1:36 pm, David McFarlane <mcfar...@msu.edu> wrote:
> Melissa,
>
> Stock reminder:  1) I do not work for PST.  2) PST's trained staff
> takes any and all questions athttp://support.pstnet.com/e%2Dprime/support/login.asp, and they

David McFarlane

unread,
Jun 21, 2010, 3:40:09 PM6/21/10
to e-p...@googlegroups.com
Melissa,

Look at the InputMask.IsPending topic in the online E-Basic
Help. See that the RespWait.InputMasks.IsPending() test will detect
whether RespWait has timed out (e.g., set Time Limit to 40000) or has
received a response, as I mentioned earlier. So you may use that in
inline code to end your flicker loop.

Many ways to implement this loop. E.g., put a label like
FlickerLoopLabel in front of your flicker stimuli, and some inline
right after the stimuli, such as

If RespWait.InputMasks.IsPending() Then Goto FlickerLoopLabel

Alternatively, use a List (e.g., FlickerList) to run your loop. Set
the FlickerList to run for some long time, put your flicker stimuli
into a List Procedure (e.g., FlickerProc), and in inline right after
the stimuli do

If Not(RespWait.InputMasks.IsPending()) Then FlickerList.Terminate

More generally, first work through Chapter 4 of the User's Guide for
some exercises on using inline code. And get familiar with the
online E-Basic Help.

Angela Kilb

unread,
Feb 14, 2018, 12:30:08 PM2/14/18
to E-Prime
Hello,

I'm trying to program a flicker task that seems to be the same as Melissa's. The problem is that the reaction times aren't being logged that way that I'd like.

I have 2 alternating pictures that are separated by a blank screen. I want them to flicker on a repeating loop until the participant presses a key or a total of 1 minute has elapsed. Critically, I want the output to log the total time that it took a participant to respond to the task, summing across all of the loops. To create the task, I used the advice above to set up the following Procedure:

FixationSlide
FlickerLoopLabel
RespWait (Duration set to 0ms and Time Limit set to 60000ms)
FlickerPic1Slide (Display set to 240ms)
FlickerFillerSlide (Display set to 80ms)
FlickerPic2Slide (Display set to 240ms)
FlickerFiller2Slide (Display set to 80ms)
InLine

The code in my InLine is as follows:

Do While RespWait.InputMasks.IsPending()
GoTo FlickerLoopLabel
Loop 

When running the task, I don't receive any errors. Everything works as expected except the task never terminates after 60000ms if there is no response. The output shows reaction times that are all less than 640ms (the duration of a single iteration of the procedure) so I think the software is not creating a cumulative reaction time across all of the loops. How can I do that? Do I need to create some sort of counter?

Thanks in advance! I've found these forums enormously helpful!!

David McFarlane

unread,
Feb 15, 2018, 2:58:48 PM2/15/18
to e-p...@googlegroups.com
First and foremost, you put FlickerLoopLabel in the wrong place, it
needs to go right *after* RespWait, and before FlickerPic1Slide.
Putting FlickerLoopLabel before RespWait means that you reinitialize
RespWait and its input mask on every loop, and you do *not* want that.
Instead, you want to execute RespWait only once before the loop, and
then have its input mask continue all during the loop.

But wait, don't go yet! You really, really need to fix your InLine at
the end! Yes, it happens to work, but it's way weird. It happens to do
the same as simply

If RespWait.InputMasks.IsPending() Then GoTo FlickerLoopLabel

but your Do Loop is a very oddball way that makes it very hard to
understand what you mean, it took me 5 minutes of looking at it to
untangle it. Please don't do that to me! :)

---------------
David McFarlane
E-Prime® 2.0 training online:
psychology.msu.edu/workshop-and-additional-course/e-prime-introduction-to-programming-computerized-behavioral-tasks
Twitter: @EPrimeMaster (twitter.com/EPrimeMaster)


On 2018-02-14 12:30 PM, Angela Kilb wrote:
> Hello,
>
> I'm trying to program a flicker task that seems to be the same as
> Melissa's. The problem is that the reaction times aren't being logged that
> way that I'd like.
>
> I have 2 alternating pictures that are separated by a blank screen. I want
> them to flicker on a repeating loop until the participant presses a key or
> a total of 1 minute has elapsed. Critically, I want the output to log the
> total time that it took a participant to respond to the task, summing
> across all of the loops. To create the task, I used the advice above to set
> up the following Procedure:
>
> FixationSlide
> FlickerLoopLabel
> RespWait (Duration set to 0ms and Time Limit set to 60000ms)
> FlickerPic1Slide (Display set to 240ms)
> FlickerFillerSlide (Display set to 80ms)
> FlickerPic2Slide (Display set to 240ms)
> FlickerFiller2Slide (Display set to 80ms)
> InLine
>
> The code in my InLine is as follows:
>
> *Do While RespWait.InputMasks.IsPending()*
> * GoTo FlickerLoopLabel*
> *Loop *

Angela Kilb

unread,
Feb 22, 2018, 12:43:33 PM2/22/18
to e-p...@googlegroups.com
Thanks for your help! I have the task up and running beautifully now.


--
You received this message because you are subscribed to a topic in the Google Groups "E-Prime" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/e-prime/BiJaV_LJ3NQ/unsubscribe.
To unsubscribe from this group and all its topics, send an email to e-prime+unsubscribe@googlegroups.com.
To post to this group, send email to e-p...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/e-prime/5A85E671.3030808%40msu.edu.
For more options, visit https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages