Several flickering tasks run simultaneously
David McFarlane
mcfarla9 at msu.edu
Thu Jul 7 19:08:39 UTC 2011
Ah, checked my own E-Prime FAQ, and here is the
link of where I have addressed this kind of
question
before:
http://groups.google.com/group/e-prime/browse_thread/thread/fda0b9bbe3a149c3
-- David McFarlane, Professional Faultfinder
(Now next time someone asks this, I will try to
direct them to the thread from today :))
At 7/7/2011 03:03 PM Thursday, David McFarlane wrote:
>Mich beat me to the punch, and with the answer
>that I would have given at first. And Mich adds
>a crucial concern that I would have overlooked,
>namely that your chosen flicker times only work
>if they are each commensurate with your display
>refresh rate, which they probably are not (your
>chosen flicker frequencies translate to periods
>of 83.3, 100, 116.3, and 113.3 ms, respectively,
>and you would have to find a common divisor to
>all of those in the range of roughly 8.3 to 16,
>good luck!). But I can't resist weighing in further...
>
>Setting aside your incommensurate flicker rates,
>can E-Prime do this? Well (as Mich already
>said), yes, in principle; but in practice, for
>this particular task you might be far better off
>using something like Presentation, or MATLAB
>with the Psychophysics Toolkit (my own first
>choice for your task). You would like a toolset
>that includes pre-made objects that can flicker
>themselves at specified rates, and then set
>those running. AFAIK, EP has no such facility,
>but maybe Presentation or MATLAB or Psychopy do, and then Bob's your uncle!
>
>Next, you could try Mich's fine suggestion, but
>once again I fear that incommensurability will
>raise its ugly head. Now you not only need a
>common divisor, but you need a List that
>contains the pattern of on-off images for each
>time point until the entire temporal pattern
>repeats, and that will not happen until you
>reach the least-common-multiple of the
>individual period times, and in your case that
>will be greater than, say, 83.3 * 113.3 = 9.5 s,
>and perhaps as great as 83.3 * 100 * 116.3 *
>113.3 = 30.7 h. Yikes! Of course, if you are
>not wedded to these period times, then you might
>adust them to more workable values (there's a nice academic exercise for you).
>
>But I said E-Prime could do this, and here's
>how. It would require some intricate code, the
>same way that you could do it in any
>full-featured programming language, such as C or
>C++ or even JavaScript, and I have done things
>like this myself in C. You would need to
>contruct your own "event loop" (do a search of
>the Group or the Forum on that phrase to see
>where I have discussed this before). In short,
>you create an array that holds the upcoming
>transition time for each object (in this case,
>your four flickering targets). Each time
>through the loop it just checks each of these
>times against the current clock time, and when
>any one reaches its next transition time then
>the loop updates that target and adjuts its
>transition time for the next one. Your loop
>just does that for the duration of the
>display. Here is some pseudo-code for that
>(using my own odd mixture of C-like and other notation):
>
>while( presentation_ongoing )
> for( i = 1 to nTargets )
> if( Clock.Read >= target[i].tNext )
> target[i].toggle
> target[i].tNext = target[i].tNext + target[i].tPeriod
>
>Of course, you also have to initialize .tPeriod
>and .tNext for each target, and I left out the
>mechanics of how to implement anything like a
>.toggle method to redraw a target between its
>two states, but I leave those as exercises.
>
>-- David McFarlane, Professional Faultfinder
>
>
>(P.s. For those who know more C-like notation,
>the pseudo-code above could be more nicely written as
>
>while( presentation_ongoing )
> for( i = 1 to nTargets )
> if( Clock.Read >= target[i].tNext )
> target[i].toggle
> target[i].tNext += target[i].tPeriod
>
>Isnt' that nice?)
>
>
>At 7/6/2011 05:12 AM Wednesday, Michiel Spape wrote:
>>Oh, wait, simultaneous tasks, you say?
>>I think there are a few ways of handling this...
>>How about you make one slide with your four
>>targets. These are four text "sub objects".
>>Each target has a colour: white (as in, off,
>>since the background is white), or black. See
>>first how you can make them black or white
>>(it's the background colour thing). Then, set
>>each to [Target1Colour], [Target2Colour],
>>[Target3Colour] and [Target4Colour] instead.
>>The slide has a duration of slightly below your
>>maximum refresh rate (i.e. 15 ms if your
>>monitor runs at 60 Hz), and onset sync is on.
>>Make a list, sequential selection, 1 procedure,
>>and set Exit after to 1 sec (i.e., it repeats
>>for one second). Drag the slide you just made to the one procedure.
>>Add 4 procedures to the list: Target1Colour,
>>Target2Colour, Target3Colour, Target4Colour.
>>Think of the list as one second, and add levels
>>accordingly: if your monitor runs at 60 Hz,
>>there should be at least 60 levels. Find out,
>>at each level, which of the targets is black.
>>For instance, your second target, flickering at
>>10 Hz, should be black at the first level (time
>>= 0 ms), 7th level (time = 100 ms), 13th level
>>(time = 200 ms) and so on, but white at level 2-6, and so on.
>>
>>Well, voila, there you go, it should now
>>flicker. Of course, nothing is randomised, but
>>it should work, and I think you might be able
>>to take it from there. Also, no code yet.
>>Best,
>>Michiel
>>
>>Michiel Spapé
>>Research Fellow
>>Perception & Action group
>>University of Nottingham
>>School of Psychology
>>www.cognitology.eu
>>
>>
>>-----Original Message-----
>>From: e-prime at googlegroups.com
>>[mailto:e-prime at googlegroups.com] On Behalf Of pati-confidence
>>Sent: 06 July 2011 06:17
>>To: E-Prime
>>Subject: Several flickering tasks run simultaneously
>>
>>I want to build a BCI system, which presents four targets on LCD
>>screen, with flickering frequencies of 12Hz, 10Hz, 8.6Hz and 7.5Hz.
>>respectively.
>>
>>And the four targets are flickering simultaneously.
>>
>>Can E-prime achieve the goal?
>>
>>Any tips will be appreciate. Thank you.
>
>--
>You received this message because you are
>subscribed to the Google Groups "E-Prime" group.
>To post to this group, send email to e-prime at googlegroups.com.
>To unsubscribe from this group, send email to
>e-prime+unsubscribe at googlegroups.com.
>For more options, visit this group at
>http://groups.google.com/group/e-prime?hl=en.
--
You received this message because you are subscribed to the Google Groups "E-Prime" group.
To post to this group, send email to e-prime at googlegroups.com.
To unsubscribe from this group, send email to e-prime+unsubscribe at googlegroups.com.
For more options, visit this group at http://groups.google.com/group/e-prime?hl=en.
More information about the Eprime
mailing list