scoring a nonresponse as a correct answer
David McFarlane
mcfarla9 at msu.edu
Thu Feb 25 23:14:27 UTC 2010
Jim,
>1) Does adding the inline code increase the duration of the overall
>task (does the magnitude of this increase in duration depend on the
>length of inline code)?
As I have said recently in another thread, you might be surprised at
just how much code modern machines can run in under a millisecond. I
once wrote a complete & inefficient Maximum Liklihood Estimation
staircase program in EP code that did dozens of logarithmic
calculations and multiplications between each stimulus, and noticed
no delays at all. Most time bottlenecks these days are not due to
running code, but to loading files from the disk or interruptions
from the operating system. So in principle, yes, the more code you
add the more you will add delays, but in practice, unless you run
actual timing delay loops or sleep commands, I highly doubt you will
see any difference. And once again, you should devise your own tests
to see if I know what I am talking about.
More importantly, even in the worst case of delays added from inline
code, Cumulative mode will *still* provide the proper
.TargetOnsetTimes. It *must*, because it is just simple arithmetic,
as I explain below.
>2) Does adding inline code cause responses to be logged and scored
>prior to the termination of the 1250ms response window? (If so, how
>much)
Note first that scoring, setting, and logging are all different
things. Scoring happens either internally by the object, or
externally when you add inline code such as
If StimText.RESP = "1" Then StimText.ACC = 1
What I will call "setting" (lacking a better term on the spur of the
moment) happens when you or E-Prime adds code such as
c.SetAttrib "StimText.ACC", StimText.ACC
This sets the value of an attribute which can then be
logged. Finally, logging happens with the line
c.Log
This line gets added silently & automatically at the end of every
Procedure (unless you disable that, which is by design hard to
do). Go ahead, look at the full generated code and see if you can
find the c.Log just before the End Sub of every Procedure. So you
can have c.SetAttrib change the value of any attribute wherever and
as many times as you like within a Procedure, but it will get logged
using the latest value only at the end of the Procedure.
So in answer to your question, if your scoring inline takes place
before the response then the response may not get properly scored;
all input masks will get logged at the end of the Procedure, whether
or not a response has come by then and notwithstanding any nonsense
that goes on in intervening inline code; and inline code cannot "log"
(as opposed to score) responses prematurely unless you deliberately
add the c.Log line yourself, in which case you are just asking for
trouble (unless you are an E-Prime Master and really know what you are doing).
>3) To clarify your earlier point, David, I am assuming that removing
>all prereleases shouldn't change the overall duration of my task, just
>the magnitude of onset delays, right?
As long as you set everything to use Cumulative timing mode, yes,
that is correct. It has to be, because of the laws of arithmetic and
the simple arithmetic relationship between consecutive
.TargetOnsetTimes (which PST fails to properly explain). Taking the
simple case of Cumulative timing where objects never get terminated
by a response, given two objects A and B where B follows A (whether
within the same Procedure or on the following trial, and where B may
in fact just be a repetition of A), then the following simple relation holds:
B.TargetOnsetTime = A.TargetOnsetTime + A.Duration
Note that PreRelease and actual OnsetTime (let alone OnsetDelay) play
absolutely *no* role in this calculation. Thus, in this simple case,
the timing synchronization of .TargetOnsetTime (which is all that we
can really control) absolutely *cannot* drift.
Now, PreRelease simply advances the .OffsetTime of objects, thus,
A.TargetOffsetTime = A.TargetOnsetTime + A.Duration - A.PreRelease
Note that neither A.TargetOffsetTime nor A.OffsetTime control when B
will start, that is controlled only by
B.TargetOnsetTime. A.TargetOffsetTime simply controls when E-Prime
ceases the idle loop that runs during A, and allows the processor to
do some other work (e.g., run inline code, or load image or sound
files). B will not start until the Clock reaches B.TargetOnsetTime,
regardless of how early A.TargetOffsetTime comes. Finally, if by
some quirk E-Prime does not get to B until the Clock is already past
B.TargetOnsetTime, B will just start immediately, and (in Cumulative
mode) B.TargetOffsetTime (as well as, now, C.TargetOnsetTime) will
still just be A.TargetOnsetTime + A.Duration. Follow? (This is in
fact an advanced trick that I take advatage of in some
programs.) Again, this is just elementary arithmetic, nothing
magic. (And if you understand the underlying mechanics like I do,
you will see how silly this whole PreRelease mechanism is, but that
is another matter.)
And once again, do NOT take my word, or even PST's word, for *any* of
this. You really have to knuckle down, make a bunch of small demo
programs for yourself, turn on logging of *everything*, start making
changes and see for yourself how all these parameters really affect
all the timing measures. How do you think *I* figured this all
out? I certainly did not get it from reading PST's documentation
(Chapter 3 notwithstanding), nor did I get it from reading the online
posts of some random self-styled "Faultfinder" like me.
-- David McFarlane, Professional Faultfinder
"You got to test that piece of software, You got to test it for yourself,
No one else can test it for you, You got to test it for yourself."
(Apologies to the Fairfield Four)
--
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