Can't get AddObservation to work, or plague of the Type Mismatch

Micah Allen micah at cfin.dk
Thu Mar 10 16:09:29 UTC 2011


Hi Michiel,

I'm afraid that did not fix it. I can see from the debug that if on 'no
awareness' trials Awaretrial resolves to " ". I think the problem might just
be my syntax, as it seems to add nothing every time. Is there a particular
way to use if-then statements to add incrementally to a variable?

Best,
Micah

On Thu, Mar 10, 2011 at 3:56 PM, Michiel Spape <
Michiel.Spape at nottingham.ac.uk> wrote:

> Hiya,
> It's a no-HTML mailinglist, sadly - some code formatting would be nice. I
> copy-pasted it into eprime and fiddled around with it:
>
> ------------
>
> trialnum=trialnum+1      'this part adds total trials (moved this to
> beginning)
>
> If c.GetAttrib("trialtype") = "lure" AND TextDisplay1.RESP = "" then'I
> prefer 'no response' to '0 RT', as the other suggests there's a very fast
> RT!
>        c.SetAttrib "ogperf", 1
>        killme = 0
>         else
>        c.SetAttrib "ogperf", 0
>         killme = 1
> end if
>
> 'here's a debugging thingy for you:
> Debug.Print "I'm currently getting Awaretrial= " &
> c.GetAttrib("awaretrial") & "killme = " & cstr(killme)
> 'However, I notice killme is undeclared up to this point (followed later,
> now earlier)
> if c.GetAttrib("awaretrial") = "1" and killme = 1 then        'this part
> determines the awaresness, 1=aware of an error, killme=1  means participant
> failed to stop on an awaretrial (and hence should report)
>         awaretrials=awaretrials+1 'as far as i saw, this came a bit later,
> saves a few lines
>         if TextDisplay1.RESP = "2" then
>                c.SetAttrib "ogaware", 0
>        else
>                c.SetAttrib "ogaware", 1
>        end if
> end if
>
> 'i did the killme above (since it is based on ogperf, it might as well be
> done in the same loop, no?
>
> Debug.print awaretrials  & " = awaretrialtotal" ' these parts should spit
> out a counter. the trialnum works correctly, but awaretrial just spits out a
> '0' over and over
> Debug.print trialnum
> ----------------
>
> Maybe it works now? If it doesn't, the debug.print which immediately
> precedes the IF statement which leads to awaretrials counter being updated
> should spit out exactly why not. But I think it's the killme, which was
> defined AFTER polling whether it's 1 or 0 (hence, presumably always 0). I've
> also cleaned a bit.
> Best,
> Mich
>
> 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 Micah
> Sent: 10 March 2011 14:39
> To: E-Prime
> Subject: Re: Can't get AddObservation to work, or plague of the Type
> Mismatch
>
> Hi,
>
> I know everyone is very busy. Maybe I can get some help just by
> narrowing the issue a bit. I'm trying to implement the counter
> technique and have got the TrialNum working correctly. Now, I had the
> thought that I could create another variable that adds one each time
> there is an 'aware trial' (i.e., where the attributed awaretrial=1 and
> the variable killme=1 (indicating an aware trial where the participant
> failed to stop.
>
> Globally, I declared both Trialnum and Awaretrials. I then used the
> following inline to try and sum up the total aware trials. My thinking
> is that if this works, I can then do the same thing for a variable
> called 'correctaware' and easily calculate the mean % in a debug as
> you suggested. Here is the inline (new parts in bold)
>
> If c.GetAttrib("trialtype") = "lure" then         'this part
> determines the inhibition accuracy, 1=successful 'stop'
>        if TextDisplay1.RT = 0 then
>                c.SetAttrib "ogperf", 1
>        else
>                c.SetAttrib "ogperf", 0
>        end if
> end if
>
>
>
> if c.GetAttrib("awaretrial") = "1" and killme = 1 then        'this
> part determines the awaresness, 1=aware of an error, killme=1  means
> participant failed to stop on an awaretrial (and hence should report)
>        if TextDisplay1.RESP = "2" then
>                c.SetAttrib "ogaware", 0
>        else
>                c.SetAttrib "ogaware", 1
>        end if
> end if
>
> if c.GetAttrib("ogperf") = "0" then                      'this part is
> needed to determine when a participant has failed to stop
>        killme = 1
> else
>        killme = 0
> end if
>
> if c.GetAttrib("awaretrial")="1" and killme =1 then 'these are the new
> parts. I expect it to add one to 'awaretrials' each trial if criterion
> are satisfied
> awaretrials=awaretrials+1
>        end if
>
> trialnum=trialnum+1      'this part adds total trials
>
> Debug.print awaretrials  & " = awaretrialtotal" ' these parts should
> spit out a counter. the trialnum works correctly, but awaretrial just
> spits out a '0' over and over
>
> Debug.print trialnum
>
>
> If someone can help me get the awareness counter working, I think I'll
> be home free.
>
> On Mar 10, 1:08 pm, Michiel Spape <Michiel.Sp... at nottingham.ac.uk>
> wrote:
> > Hiya,
> > Sorry, that is indeed just bad reading on my part :) It remains a
> sometimes worthy suggestion for other people here though, as I've often seen
> "IF .....ACC = 1 then countup ELSE dontcountup" whereas count = count + ACC
> looks very nice and clean. For a truly suitable answer, I should really have
> a look at your script and see what exactly you mean, but alas, no time!
> >
> > Cheers,
> > Mich
> >
> > Michiel Spapé
> > Research Fellow
> > Perception & Action group
> > University of Nottingham
> > School of Psychologywww.cognitology.eu
> >
> >
> >
> >
> >
> >
> >
> > -----Original Message-----From:e-prime at googlegroups.com[mailto:
> e-prime at googlegroups.com]On Behalf Of Micah
> > Sent: 10 March 2011 11:43
> > To: E-Prime
> > Subject: Re: Can't get AddObservation to work, or plague of the Type
> Mismatch
> >
> > Hey Michiel,
> >
> > Awesome reply. My only question is how this can incorporate the
> > specifics of my experiment where I have two 'accuracy' measures that
> > are not actually incorporated in the Stimulus.ACC object. Both
> > inhibition performance and error-awareness in this case are calculated
> > by the post-trial in-line, and so I'm not sure I understand how
> > TextDisplay1.ACC would gather any information on them. I could set it
> > collect inhibition accuracy easily enough, but error-awareness needs
> > the scripting to determine when there was a failed stop (there can
> > only be awareness for errors, so there's nothing to report on
> > successful stops). Anyway, I will poke around with your idea and see
> > what happens.
> >
> > Best,
> > Micah
> >
> > On Mar 9, 5:39 pm, Michiel Spape <Michiel.Sp... at nottingham.ac.uk>
> > wrote:
> > > Hiya,
> > > Well, let's see how far you'll get :) I thought I might add that I
> generally have two global variables (i.e. declared in the User tab), one
> being TrialNum, which just adds one up to the trial, and one TrialsCorrect.
> > > So, every trial, I tend to have an inline with the following:
> > > TrialNum = TrialNum + 1 'just so that number of trials is counted, also
> useful if you want to present a break
> > > TrialsCorrect = TrialsCorrect + myStimulus.ACC 'which saves one IF/THEN
> object.
> >
> > > Visual basic tends to be a bit tricky in terms of variables being
> converted on the spot, whether you like it or not, but if you just want to
> know the percentage, the following tends to work pretty well:
> > > TrialNum = 30 'just as an example, 30 trials done so far
> > > TrialsCorrect = 10 'just as an example, 10 trials correct
> > > Debug.print cint(cstr(trialscorrect / numtrials / 0.01)) "% correct"
> > > This returns "33% correct" (in the output).
> >
> > > So, if you would just dump that into a new attribute (don't add it to
> the list, it confuses things sometimes):
> > > c.SetAttrib "thismuch", cint(cstr(trialscorrect / numtrials / 0.01))
> >
> > > and have a slide, saying "You had [thismuch]% correct", you're
> basically there (just tested it). Not to say you can't do the same with
> summation objects, but the above, taking out my debug, takes only 3 lines of
> code (excluding 2 lines of user script variable declarations).
> > > Cheers,
> > > Mich
> >
> > > Michiel Spapé
> > > Research Fellow
> > > Perception & Action group
> > > University of Nottingham
> > > School of Psychologywww.cognitology.eu
> >
> > > -----OriginalMessage-----From:e-prime at googlegroups.com[mailto:
> e-prime at googlegroups.com]On Behalf Of Micah
> > > Sent: 09 March 2011 16:06
> > > To: E-Prime
> > > Subject: Re: Can't get AddObservation to work, or plague of the Type
> Mismatch
> >
> > > Hi Michiel,
> >
> > > Thanks for the useful reply! Ogperf and ogaware are actually list
> > > objects, and the related code is designed to log stops and successful
> > > error reports. So the first bit of code should be resolving to either
> > > a '1' or a '0' for either accurate/inaccurate stop or correct error
> > > report/missed error report. That being said I see your point with the
> > > need to simplify and had wondered if I could get by without the
> > > summation object. My worry is that, sense the accuracy data is not
> > > generated directly by the list or procedure, I need this summation
> > > object to collect data from the ogperf ogaware inline. The last bit
> > > ( c.SetAttrib "errorawareness",
> > > Format((errorawareness.Mean),"Percent")) is supposed to then format
> > > the summation object for placement in the end of block report
> > > ("Congratulations, you successfully inhibited on [stopaccuracy] of
> > > trials and reported your errors [erroraware] of the time").
> >
> > > Will try to wrap my head around how to do this without the summation-
> > > appreciate your help!
> >
> > > On Mar 9, 4:55 pm, Michiel Spape <Michiel.Sp... at nottingham.ac.uk>
> > > wrote:
> > > > Hiya,
> > > > Ugh, lots of code. Forgive me, like many coding people, I tend to be
> lazy and simply won't read long threads. I've never had any use for this
> "summation object" deal, but your code is really quite confusing:
> >
> > > > > > dim stopaccuracy as Summation
> > > > > > dim erroraware as Summation
> > > > > > c.SetAttrib "stopaccuracy", Format((stopaccuracy.Mean),"Percent")
> > > > > > c.SetAttrib "errorawareness",
> Format((errorawareness.Mean),"Percent")
> > > > > > stopaccuracy.AddObservation c.GetAttrib("ogperf")
> > > > > > errorawareness.AddObservation c.GetAttrib("ogaware")
> >
> > > > What exactly are you doing here? Stopaccuracy is both a "summation"
> and an "attribute in a list". Errorwareness is only semi-overlapping with
> this attribute, although I see no reason why you would want this. Ogperf is
> not even an attribute but a local variable. If you have declared it
> somewhere, it probably looks into a list anyway, finds a question mark,
> tries to put this into stopaccuracy. Thus, what you get is
> StopAccuracy.AddObservation ?, or, dbl(?), which doesn't work either.
> >
> > > > If you want to find out what's going on with the mismatch (one of the
> more simpler things to solve):>stopaccuracy.AddObservation
> c.GetAttrib("ogperf")
> >
> > > > Then try change this into:
> > > > stopaccuracy.AddObservation 0
> > > > if the latter works but the former doesn't, then
> c.GetAttrib("ogperf") probably receives a string instead, or, in other
> words, Ben would be right. See what ogperf is by doing "debug.print
> c.GetAttrib("ogperf"). So, try beginning simple with working code, then add
> - rather than the opposite.
> >
> > > > So, start with as clean and working code as possible. My suggestion
> would be to start with getting rid of the summation stuff (after all, what
> more is stopaccuracy.mean then merely numberofstopaccuratetrials /
> numberoftrials?) and the c.getattrib/set stuff until you can get everything
> working on one level.
> > > > Cheers,
> > > > Mich
> >
> > > > Michiel Spapé
> > > > Research Fellow
> > > > Perception & Action group
> > > > University of Nottingham
> > > > School of Psychologywww.cognitology.eu
> >
> > > >-----OriginalMessage-----From:e-prime at googlegroups.com[mailto:
> e-prime at googlegroups.com]On Behalf Of Micah
> > > > Sent: 09 March 2011 15:19
> > > > To: E-Prime
> > > > Subject: Re: Can't get AddObservation to work, or plague of the Type
> Mismatch
> >
> > > > Hi Ben,
> >
> > > > Sincere thanks for your suggestion. Helped me to feel like I'm
> getting
> > > > somewhere in my understanding of E-basic, as I had the same idea.
> > > > Sadly neither CInt or CDbl used in that way change the error. I also
> > > > tried declaring erroraware and stopaccuracy as doubles, and tried
> > > > converting them into new variables that would be numbers. I'm not
> sure
> > > > I did that correctly however.
> >
> > > > Thanks for your help- i'll be really excited if we can solve this.
> >
> > > > On Mar 9, 3:17 pm, ben robinson <baltimore.... at gmail.com> wrote:
> > > > > try changing them to:
> > > > > stopaccuracy.AddObservation CInt(c.GetAttrib("ogperf"))
> > > > > errorawareness.AddObservation CInt(c.GetAttrib("ogaware"))
> >
> > > > > or CDbl(...) if CInt(...) isn't what you need.
> > > > > i think the problem might be that when you c.GetAttrib the value it
> pulls
> > > > > from the list is understood as a string, rather than some sort of
> number...
> >
> > > > > On Wed, Mar 9, 2011 at 8:34 AM, Micah <ucfmi... at gmail.com> wrote:
> > > > > > Hello,
> >
> > > > > > This is probably a very easy to solve problem, but it's just
> about
> > > > > > beaten me down. I am trying to make a training script for my
> error-
> > > > > > awareness paradigm that can log inhibition and error-awareness
> > > > > > performance and then report these to the subject at the end of
> the
> > > > > > trial. The task is very simple and works fine, as does the
> performance
> > > > > > logging. I can't seem to get my summation object to work though-
> > > > > > everytime it gives me a 'type mismatch'. I've tried creating a
> > > > > > variable from the logging vars in a double format but that does
> not
> > > > > > fix it. Can someone take a look at my code and see what's up?
> >
> > > > > > I start with the following setup inline and usertab code:
> > > > > > 'setup inline
> > > > > > set stopaccuracy = New Summation
> > > > > > set erroraware = New Summation
> >
> > > > > > 'usertab
> > > > > > dim killme as integer
> > > > > > dim stopaccuracy as Summation
> > > > > > dim erroraware as Summation
> > > > > > dim ogperf as double
> > > > > > dim ogaware as double
> >
> > > > > > My inline that logs awareness and performance, and (is supposed
> to)
> > > > > > fill the summation object with these information for reporting to
> the
> > > > > > subject, looks like this:
> >
> > > > > > If c.GetAttrib("trialtype") = "lure" then
> > > > > >        if TextDisplay1.RT = 0 then
> > > > > >                c.SetAttrib "ogperf", 1
> > > > > >        else
> > > > > >                c.SetAttrib "ogperf", 0
> > > > > >        end if
> > > > > > end if
> >
> > > > > > if c.GetAttrib("awaretrial") = "1" and killme = 1 then
> > > > > >        if TextDisplay1.RESP = "2" then
> > > > > >                c.SetAttrib "ogaware", 0
> > > > > >        else
> > > > > >                c.SetAttrib "ogaware", 1
> > > > > >        end if
> > > > > > end if
> >
> > > > > > if c.GetAttrib("ogperf") = "0" then
> > > > > >        killme = 1
> > > > > > else
> > > > > >        killme = 0
> > > > > > end if
> >
> > > > > > stopaccuracy.AddObservation c.GetAttrib("ogperf")
> > > > > > errorawareness.AddObservation c.GetAttrib("ogaware")
> >
> > > > > > Debug.Print stopaccuracy.Mean
> > > > > > Debug.Print erroraware.Mean
> >
> > > > > > c.SetAttrib "stopaccuracy", Format((stopaccuracy.Mean),"Percent")
> > > > > > c.SetAttrib "errorawareness",
> >
> > ...
> >
> > read more »
>
> --
> 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.
>
> This message and any attachment are intended solely for the addressee and
> may contain confidential information. If you have received this message in
> error, please send it back to me, and immediately delete it.   Please do not
> use, copy or disclose the information contained in this message or in any
> attachment.  Any views or opinions expressed by the author of this email do
> not necessarily reflect the views of the University of Nottingham.
>
> This message has been checked for viruses but the contents of an attachment
> may still contain software viruses which could damage your computer system:
> you are advised to perform your own checks. Email communications with the
> University of Nottingham may be monitored as permitted by UK legislation.
>
> --
> 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.
>
>


-- 
Micah Allen
PhD Student in Cognitive Neuroscience
Interacting Minds Group
Center for Functionally Integrative Neuroscience
Aarhus University, Denmark
Tel.: +45 89 49 99 33
http://www.interacting-minds.net
http://au.academia.edu/MicahAllen

-- 
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.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.linguistlist.org/pipermail/eprime/attachments/20110310/a13da002/attachment.htm>


More information about the Eprime mailing list