Read out certain levels only

Michiel Spape Michiel.Spape at nottingham.ac.uk
Fri May 7 13:58:49 UTC 2010


Hi Vera & List,

If I understand it correctly, you might be able to do something like this much the same way I explained earlier:

I wrote earlier:

> Dim nLevel As Integer 'originally Long, but how many people really have lists that have more than 32768 levels?
> For nLevel = 1 To List1.Size
>         If nLevel = 1 then List1.SetWeight nLevel, 1 else List1.SetWeight nLevel, 0
> Next 'nLevel
> List1.Reset

Now, let's say you want only Level X, based on an attribute which gives you X:

> Dim nLevel As Integer > For nLevel = 1 To List1.Size
>         If nLevel = c.GetAttrib("YourXAttribute") then List1.SetWeight nLevel, 1 else List1.SetWeight nLevel, 0
> Next 'nLevel
> List1.Reset

You could, of course, also speed through your trial (never showing anything by just skipping over the entire trial, if the current trial is not exactly what you want) - but perhaps that will be difficult to do in a controllable/balanced manner. 

"Let's say I have 20 lines in my list. 10 lines for which the attribute
"Trigger" has the value 1 and 10 other lines for which the value of
the attribute "Trigger" is 2. I would like to tell E-Prime that on a certain trigger (coming in over
the Parallel Port) it should only use trials (lines) for which the
Attribute "Trigger" corresponds to a certain value."

... to do that, you can simply add checks to see whether certain levels need to be set to 0 weight:
(see help on Factor.GetAttrib level, AttributeName)

Dim nLevel As Integer

'What trigger?
If myTrigger = 1 then
	For nLevel = 1 To List1.Size
		If List1.GetAttrib(nLevel, "YourXAttribute") = 1 then List1.SetWeight nLevel, 1 else List1.SetWeight nLevel, 0
	Next 'nLevel
else
	For nLevel = 1 To List1.Size
		If List1.GetAttrib(nLevel, "YourXAttribute") = 2 then List1.SetWeight nLevel, 1 else List1.SetWeight nLevel, 0
	Next 'nLevel
End if
List1.Reset

Hope that helps! And sorry in advance for any mistakes and/or sloppy programming advice (trying to finish stuff before weekend - I'm sure I'm not alone at that)
Cheers,
Mich


Michiel Spapé
Research Fellow
Perception & Action group
University of Nottingham
School of Psychology


-----Original Message-----
From: e-prime at googlegroups.com [mailto:e-prime at googlegroups.com] On Behalf Of Vera
Sent: 07 May 2010 12:07
To: E-Prime
Subject: Re: Read out certain levels only

Michiel,

I am going to see what your solution can do (it seems to be pointing
in "some direction" at least, which is way better than the "no-
direction" I am having right now. ;-)

But for the moment, I just copy you what I wrote in the PSTNET-Forum
this morning (and in which I maybe have been clearer):

I am trying to read out an attribute (ok, GetAttrib solves this) but
then I would like to tell E-Prime that in certain conditions, it
should only use the levels (lines) in the list that correspond to
certain values of this attribute.

Let's say I have 20 lines in my list. 10 lines for which the attribute
"Trigger" has the value 1 and 10 other lines for which the value of
the attribute "Trigger" is 2.

I would like to tell E-Prime that on a certain trigger (coming in over
the Parallel Port) it should only use trials (lines) for which the
Attribute "Trigger" corresponds to a certain value.

So, something like: If Trigger 1, then only use any of the 10 lines
for which Attribute.Trigger = 1 (I know this syntax is wrong, it's
just to make you understand). If Trigger is 2, then only use any of
the 10 lines for which Attribute.Trigger = 2.

See what I mean?

Greetings, Vera


On May 7, 12:25 pm, Michiel Spape <Michiel.Sp... at nottingham.ac.uk>
wrote:
> Hi Vera & Group,
> I like that "Sudoku-effect"! In fact, I think I might have misstated that nested-lists are untrustworthy - in general, people are much more prone to making errors than computers, and indeed, this to me is the main problem of nested lists. I do, however, use them all the time, myself, but usually not for my main 'triallist'.
>
> Anyway, I'm sorry for the lack of help I'm going to offer, I'm just not entirely clear on what you want to achieve. Do you want to run certain conditions based on a trigger readout from TMS (err, I never worked with TMS)? Does that mean certain stimuli? Certain different orderings?
>
> Lacking a clear idea on what exactly it is you want, I can help with certain specifics:
>
> "If trigger 1 then PLEASE take only line 1"
> ...
> You mean, of a list, right?
>
> This can be achieved in a quick and dirty way by adding a bit of inline that sets all weights of a list to 0 except line 1. From E-basic help, and adjusted
>
> Dim nLevel As Integer 'originally Long, but how many people really have lists that have more than 32768 levels?
> For nLevel = 1 To List1.Size
>         If nLevel = 1 then List1.SetWeight nLevel, 1 else List1.SetWeight nLevel, 0
> Next 'nLevel
> List1.Reset
>
> You can even put this List1 in unreferenced objects (i.e. your garbage can) and run it on request (List1.Run).
> Hope any of this helps (I might be way off in understanding your problem),
> Mich
>
> Michiel Spapé
> Research Fellow
> Perception & Action group
> University of Nottingham
> School of Psychology
>
> -----Original Message-----
> From: e-prime at googlegroups.com [mailto:e-prime at googlegroups.com] On Behalf Of Vera
> Sent: 07 May 2010 08:24
> To: E-Prime
> Subject: Re: Read out certain levels only
>
> Ok guys, just to let you know that I am really trying here, a small
> update:
>
> Yesterday I tried to solve this problem with nested lists (knowing
> that nested lists very quickly get very complicated and taking into
> account that Michiel pointed out in his E-Prime doc that the random
> doesn't seem to be completely "trustable") but the problem is that I
> get to the same thing: I would basically have two lines, 1 pointing to
> the condition for trigger 1 and another one pointing to trigger 2. But
> then, how to access this line??
> I need to figure out some way to tell E-Prime:
>
> If trigger 1 then PLEASE take only line 1
>
> (Or in the old solution, which I very much preferred, because it was
> much cleaner - nested lists do have a high "sudoku-effect"):
>
> If trigger 1 PLEASE take any of the lines for which attribute.trigger1
> = 1
>
> Down to the beginning again, I don't know how to solve this. :-( Any
> ideas are very welcome. :-)
>
> Greetings, Vera
>
> On May 6, 2:31 pm, Vera <vera.d... at googlemail.com> wrote:
> > Ok, got a bit further (but it's still not working fine):
>
> > I added this inline:
>
> > If (NewTriggerValue > 0) AND (NewTriggerValue < 7) Then
> >         Set DesignList.Deletion = PickOne(c.GetAttrib("TriggerPos") = "1")
> > ElseIf NewTriggerValue = 0 Then
> >         Set DesignList.Deletion = PickOne(c.GetAttrib("TriggerPos") = "0")
> > End If
>
> > It's based on something David once wrote concerning counterbalancing
> > (it would have been so much easier if E-Prime could just
> > counterbalance for any attribute and not just Group, Subject and
> > Session). I am actually hoping to tell E-Prime with this, that it
> > needs to take any of the 18 levels which has either 1 or 0 in the
> > TriggerPos attribute. It doesn't seem to work though. :-(
>
> > E-Prime now only runs 1 trials (instead of 36). Any hints on that?
>
> > Grrr, I know I am not very far from a solution...
>
> > Greetings, Vera
>
> > On May 6, 11:17 am, Vera <vera.d... at googlemail.com> wrote:
>
> > > Dear forum members,
>
> > > I already got some very useful help here and as I am now running into
> > > a new problem with E-Prime, I will see if you can help me out (again).
> > > I did all my homework: yes I looked at the reference guide, getting
> > > started guide, all other documents concerning E-Prime, yes I combed
> > > through this forum, yes I combed through the PST-forum. :-)
>
> > > So here's the problem:
>
> > > I created a list of conditions (and all that has been working fine
> > > until now) and as we are moving on to another experimental setup, it
> > > is now very important that half of the conditions appear on one type
> > > of stimulus and the other half of conditions appear on another type of
> > > stimulus.
>
> > > To be more clear:
>
> > > On Trigger1 I want only a certain type of the 18 conditions I have to
> > > be executed.
> > > On Trigger2 I want the other 18 conditions (another type) to be
> > > executed.
>
> > > I know I could be able to do this over nested lists (probably), but it
> > > would take a lot of time too, as then "big surgery" has to be done on
> > > my program. ;-)
>
> > > So I figured that there should be some way to add a few lines of code,
> > > which tell E-Prime that it should only use a certain level in a
> > > certain condition.
>
> > > I wrote:
>
> > > If (NewTriggerValue > 0) AND (NewTriggerValue < 7) Then
> > >         c.getAttrib("TriggerPos") = 1
> > > ElseIf NewTriggerValue = 0 Then
> > >         c.getAttrib("TriggerPos") = 0
> > > End If
>
> > > TriggerPos = the type of trigger (1 or 0) which I added as an
> > > attribute in my designlist.
> > > When I try to execute, Eprime tells me "Can't Assign to Constant"
>
> > > Ok. But what do I need to add then in order to make it work? Basically
> > > I want Eprime in certain conditions only to use the levels that have
> > > "1" in the attribute "TriggerPos".
>
> > > I know that I am not very far from a solution. Any help would be very
> > > much appreciated. :-)
>
> > > Vera
>
> > > --
> > > 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 athttp://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 athttp://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 athttp://groups.google.com/group/e-prime?hl=en.
>
> 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 athttp://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.

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