Still on the RSVP task...


Author
Message
KO
KO
Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)
Group: Forum Members
Posts: 18, Visits: 107
For sure, thanks for the clarification! And thanks again for all your help. :-)

Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 13K, Visits: 104K
For the record, what I would have done / and what I proposed was this:

#1: Set up the wordlist x T1 position x T2 lag combinations

*** Test block ***
4 Wordlists (1,2,3,4) x 4 T1 positions (3,4,5,6) x 4 T2 lags (1,2,3,8) = 64 combinations

<list wordlist>
/ items = (1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
           2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
           3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
           4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4)
/ selectionmode = random
/ replace = false
</list>

<list t1positionlist>
/ items = (3,4,5,6,3,4,5,6,3,4,5,6,3,4,5,6,
          3,4,5,6,3,4,5,6,3,4,5,6,3,4,5,6,
          3,4,5,6,3,4,5,6,3,4,5,6,3,4,5,6,
          3,4,5,6,3,4,5,6,3,4,5,6,3,4,5,6)
/ selectionmode = list.wordlist.currentindex
</list>

<list t2laglist>
/ items = (1,1,1,1,2,2,2,2,3,3,3,3,8,8,8,8,
           1,1,1,1,2,2,2,2,3,3,3,3,8,8,8,8,
           1,1,1,1,2,2,2,2,3,3,3,3,8,8,8,8,
           1,1,1,1,2,2,2,2,3,3,3,3,8,8,8,8)
/ selectionmode = list.wordlist.currentindex
</list>

I.e., every T1 position and T2 lag combination occurs once in every word list.

#2: Set up the RSVP stream in <trial starttrial>, i.e., select the wordlist to use and the position & lag parameters associated with the selected wordlist item:


<trial starttrial>
/ ontrialbegin = [values.trialnumber += 1; values.currentposition = 0; values.mystimulus = ""; values.streamstring = ""; values.t1item = ""; values.t2item = "";
        text.distractor.resetselection();]
/ ontrialbegin = [values.wordlist=list.wordlist.nextvalue; values.t1position=list.t1positionlist.nextvalue; values.t2lag=list.t2laglist.nextvalue; ]
/ ontrialbegin = [values.t2position = values.t1position + values.t2lag]
/ stimulusframes = [1=fixation]
/ trialduration = 2000
/ posttrialpause = 250
/ validresponse = (noresponse)
/ recorddata = false
/ branch = [trial.distractortrial]
</trial>

#3: In the target trial, select items according to the previously chosen word list:

<trial target2trial>
/ ontrialbegin = [values.currentposition += 1]
/ ontrialbegin = [if (values.wordlist==1) values.mystimulus = list.wordlist1items.nextvalue; ]
/ ontrialbegin = [if (values.wordlist==2) values.mystimulus = list.wordlist2items.nextvalue; ]
/ ontrialbegin = [if (values.wordlist==3) values.mystimulus = list.wordlist3items.nextvalue; ]
/ ontrialbegin = [if (values.wordlist==4) values.mystimulus = list.wordlist4items.nextvalue; ]
/ ontrialend = [values.streamstring = concat(values.streamstring, text.target2.currentitem)]
/ stimulusframes = [1=target2]
/ trialduration = 600
/ posttrialpause = 100
/ validresponse = (noresponse)
/ recorddata = false
/ branch = [trial.distractortrial]
</trial>

(Judging from your script, it seems you only want target 2 to come from 4 separate wordlists, but not target 1.)

Hope this clarifies.

Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 13K, Visits: 104K
The impact (and consequently "correctness") of those changes are hard to assess without the remaining context, hence I cannot really comment. The changes don't make intuitive sense to me, but if the script now works as you want it to that's great and suggests (most of) the changes make sense or at least don't cause any new problems.

KO
KO
Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)
Group: Forum Members
Posts: 18, Visits: 107
Hi Dave,

I think I've figured it out. I'm still kind of half expecting some issue/s to arise, or something of that kind, but at the moment at least, it seems to work...

I'll show you what I've changed/added - in bold below.

<trial starttrial>
/ ontrialbegin = [values.trialnumber += 1; values.currentposition = 0; values.mystimulus = 0; values.streamstring = ""; values.t1item = ""; values.t2item = "";
        text.distractor.resetselection();]
/ontrialbegin = [values.mystimulus = target2]
/ ontrialbegin = [if(script.currentblock=="practiceblock") {values.t1position = list.pt1positionlist.nextvalue; values.t2lag = list.pt2laglist.nextvalue}]
/ ontrialbegin = [if(script.currentblock=="testblock") {values.wordlist = list.wordlist.nextvalue; values.t1position = list.t1positionlist.nextvalue;
values.t2lag = list.t2laglist.nextvalue}]
/ ontrialbegin = [values.t2position = values.t1position + values.t2lag]
/ stimulusframes = [1=fixation]
/ trialduration = 2000
/ posttrialpause = 250
/ validresponse = (noresponse)
/ recorddata = false
/ branch = [trial.distractortrial]
</trial>


<trial distractortrial>
/ ontrialbegin = [values.currentposition += 1]
/ ontrialend = [values.streamstring = concat(values.streamstring, text.distractor.currentitem)]
/ stimulusframes = [1=distractor]
/ trialduration = 100
/ posttrialpause = 100
/ validresponse = (noresponse)
/ recorddata = false
/ branch = [if (values.currentposition >= values.streamlength) openended.responsetrial]
/ branch = [if (values.t1position == values.currentposition +1) trial.target1trial
                else if (values.t2position == values.currentposition +1) trial.target2trial
                else trial.distractortrial]
</trial>



<trial target1trial>
/ ontrialbegin = [values.currentposition += 1]
/ ontrialend = [if(values.t1position==values.currentposition) values.t1item=text.target1.currentitem]
/ ontrialend = [values.streamstring = concat(values.streamstring, text.target1.currentitem)]
/ stimulusframes = [1=target1]
/ trialduration = 600
/ posttrialpause = 100
/ validresponse = (noresponse)
/ recorddata = false
/ branch = [if(values.t2position==values.currentposition+1)
    trial.target2trial else trial.distractortrial]
</trial>

<trial target2trial>
/ ontrialbegin = [values.currentposition += 1]
/ ontrialend = [if(values.t2position==values.currentposition) values.t2item=text.target2.currentitem]
/ ontrialbegin = [if (values.wordlist==1) values.mystimulus = list.wordlist1items.nextvalue; ]
/ ontrialbegin = [if (values.wordlist==2) values.mystimulus = list.wordlist2items.nextvalue; ]
/ ontrialbegin = [if (values.wordlist==3) values.mystimulus = list.wordlist3items.nextvalue; ]
/ ontrialbegin = [if (values.wordlist==4) values.mystimulus = list.wordlist4items.nextvalue; ]
/ ontrialend = [values.streamstring = concat(values.streamstring, text.target2.currentitem)]
/ stimulusframes = [1=target2]
/ trialduration = 600
/ posttrialpause = 100
/ validresponse = (noresponse)
/ recorddata = false
/ branch = [trial.distractortrial]
</trial>


So in fact the changes that I made to the starttrial are I think responsible for the fact that I don't continually watch the same target 2 word appear in each and every trial.
The changes that I made to target1trial and target2 trial are just about bringing back the values for the two items into the results section. (They were there up until fairly recently, the way that they were in your original RSVP script, but I guess at some point I must have deleted them from the newer versions of my task not realising what they did.) So, yeah, I think it's all good now...   Nevertheless, I would be grateful if you could tell me (or at least give me an idea of) if there was anything else you thought I needed to include as well - changes or additions. At the moment, though, I'm pretty pleased that it does seem to work. 

Thanks for all your help again too. It definitely helped when you said that the starttrial section was the one I needed to be focusing on. :-)

Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 13K, Visits: 104K
Kamil,

#1: This topic does not deal with an attentional blink task, so I suggest you create a new thread for any further questions you might have.

#2: To use image stimuli instead of text stimuli, the very first change you ought to make is to replace the respective <text> elements in the script with properly configured <picture> elements.

#3: In general, my advice would be to first work through the all tutorials contained in the Inquisit documentation. That will give you some basic ground with regards to Inquisit's syntax and its most important, basic constructs. Once you've done that, work through the script you are planning to use until you sufficiently understand how that script works. If you have trouble making sense of some specific portions of the code, don't hesitate to post your question in a new thread. Once you understand the script, start implementing your modifications.

Kamil F
Kamil F
Associate Member (89 reputation)Associate Member (89 reputation)Associate Member (89 reputation)Associate Member (89 reputation)Associate Member (89 reputation)Associate Member (89 reputation)Associate Member (89 reputation)Associate Member (89 reputation)Associate Member (89 reputation)
Group: Forum Members
Posts: 1, Visits: 6
Hi all

I would like to modify Simple_SimpleAttentionalBlink script as well as the author of this topic, but use picture stimuli (i.e. facial expressions) instead of text. I am wondering if the logic of creating lists (for distractors, targets, etc.) and then including theme as values also applies for picture stimuli? If yes, how can I create such list of picture items? If no, how can I address this problem? 

I am certain that this will be only the begging of the issues that I am about to meet, since experimental design I would like to create differs significantly from what KO is trying to do. 

I would appreciate any form of help.

Kamil



Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 13K, Visits: 104K
#1: You want to select the wordlist in <trial starttrial>. In fact it's the very first thing you want to do after resetting parameters from previous rounds. Again: The other parameters required for the following RSVP stream (the target positions / lag levels) *depend* on the chosen wordlist.

Remember: Your wordlists are just sets of specific item numbers (e.g. items #1 to #4 make up the 1st list,, #5 to #8 make up the 2nd list, etc.).

#2: It does not make sense to select the wordlist in <trial target2trial> and it does not make sense to have it depend on the trialnumber.

#3: I don't know why you would want to select wordlists sequentially.

KO
KO
Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)
Group: Forum Members
Posts: 18, Visits: 107
Hi Dave,

That definitely helps. After your additional feedback I've changed the starttrial to the below (new bit in bold). Although not actually solving the problem of the task getting caught on the first target2 word, I do feel as though I am making some progress with it - and your last post has given me a good sense, broadly speaking, as to where things are going wrong.  

<trial starttrial>
/ ontrialbegin = [values.trialnumber += 1; values.currentposition = 0; values.mystimulus = ""; values.streamstring = ""; values.t1item = ""; values.t2item = "";
        text.distractor.resetselection();]
/ ontrialbegin = [if(script.currentblock=="practiceblock") {values.t1position = list.pt1positionlist.nextvalue; values.t2lag = list.pt2laglist.nextvalue}]
/ ontrialbegin = [if(script.currentblock=="testblock") {values.mystimulus = list.wordlist.nextvalue; values.t1position = list.t1positionlist.nextvalue;
values.t2lag = list.t2laglist.nextvalue}]

/ ontrialbegin = [values.t2position = values.t1position + values.t2lag]
/ stimulusframes = [1=fixation]
/ trialduration = 2000
/ posttrialpause = 250
/ validresponse = (noresponse)
/ recorddata = false
/ branch = [trial.distractortrial]
</trial>

I've also tried to define the very first item in the wordlist like so:

<trial target2trial>
/ ontrialbegin = [values.currentposition += 1]
/ ontrialbegin = [if (values.trialnumber == 1) values.wordlist == 1]
/ ontrialbegin = [if (values.wordlist==1) values.mystimulus = list.wordlist1items.nextvalue; ]
/ ontrialbegin = [if (values.wordlist==2) values.mystimulus = list.wordlist2items.nextvalue; ]
/ ontrialbegin = [if (values.wordlist==3) values.mystimulus = list.wordlist3items.nextvalue; ]
/ ontrialbegin = [if (values.wordlist==4) values.mystimulus = list.wordlist4items.nextvalue; ]
/ ontrialend = [values.streamstring = concat(values.streamstring, text.target2.currentitem)]
/ stimulusframes = [1=target2]
/ trialduration = 600
/ posttrialpause = 100
/ validresponse = (noresponse)
/ recorddata = false
/ branch = [trial.distractortrial]
</trial>

And then I've also added 'sequence' to the way that items are selected from the wordlist. The problem remains though...

<list wordlist>
/ items = (1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,
           1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,
           1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,
           1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4)
/ selectionmode = sequence
</list>

I also have another idea that's a little more out there - in terms of defining the wordlists - which is about using the trialnumbers of the first 4 items - as in:

  /ontrialbegin = [if (values.mystimulus == values.trialnumber < 5) values.mystimulus = values.trialnumber) else

(And then after the "else" somehow having the script take appropriate multiple of 4, starting at 4*2 then 4 *3 etc. from the specific trial number....)

I don't know. These are just my initial ideas. I guess I need to think more about this, but if any of these additional bits of scripts I've suggested are going to be part of the solution I'd be grateful if you could let me know. And also - and particularly if none of what I'm talking about having now added in is going to be helpful to solving my problem, could you please give me some more ideas/hints/tips etc. about what other things I ought to be thinking about pursuing further, or looking up in the help section etc.

Thanks :-)


Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 13K, Visits: 104K
> I have only one vague question to ask at this point - what did you mean by picking "the parameters for the subsequent "round" /
> the following RSVP stream: (1) Which wordlist are you going to sample from for that stream? (2) Which lags to apply to that
> stream." When I say that, what I'm really asking is can I have an example of that to be clearer on what it is that you are
> suggesting that I do in terms of this stuff.

Look at <trial starttrial> in the original RSVP script I gave you ( https://www.millisecond.com/forums/FindPost16005.aspx ):

<trial starttrial>
/ ontrialbegin = [values.trialnumber +=1; values.currentposition = 0; values.streamstring = ""; values.t1item = ""; values.t2item = "";
        text.distractor.resetselection(); text.target.resetselection()]
/ ontrialbegin = [if(script.currentblock=="practiceblock") {values.t1position = list.pt1positionlist.nextvalue; values.t2lag = list.pt2laglist.nextvalue}]
/ ontrialbegin = [if(script.currentblock=="testblock") {values.t1position = list.t1positionlist.nextvalue; values.t2lag = list.t2laglist.nextvalue}]
/ ontrialbegin = [values.t2position = values.t1position + values.t2lag]

/ stimulusframes = [1=fixation, debug]
/ trialduration = 2000
/ posttrialpause = 250
/ validresponse = (noresponse)
/ recorddata = false
/ branch = [trial.distractortrial]
</trial>

What that trial does is gather all the parameters for the RSVP stream that follows. I.e., 1st reset a bunch of variables (from the previous stream, if any). We increase the trial count (values.trialcount), we're in position 0 in the stream (values.currentposition), i.e., we start fresh, our stream string is empty etc.

Then we select the position where target1 should occur in the ensuing RSVP stream (values.t1position) and target2's "lag" relative to that (values.t2lag); target2's ordinal position in the stream is simply target1's position plus the selected lag (values.t2position = values.t1position + values.t2lag).

At this point all the necessary parameters for the RSVP stream are known and we start the stream with a distractor trial (/branch = [trial.distractortrial]).

You need to do the same in your script. In addition to the parameters mentioned above you need to select one of your 4 target wordlists and sample from that wordlist as shown previously. In fact, that's the very 1st thing you want to do, because you want the other parameters (positions / lag levels) *depend* on the chosen wordlist.

Edited 9 Years Ago by Dave
KO
KO
Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)Esteemed Member (2.5K reputation)
Group: Forum Members
Posts: 18, Visits: 107
Hi Dave,

Think I've uploaded the script successfully.

I have only one vague question to ask at this point - what did you mean by picking "the parameters for the subsequent "round" / the following RSVP stream: (1) Which wordlist are you going to sample from for that stream? (2) Which lags to apply to that stream." When I say that, what I'm really asking is can I have an example of that to be clearer on what it is that you are suggesting that I do in terms of this stuff.

Hoping you have more suggestions in general about changes to make after viewing the script too. Thanks.

Attachments
GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Reading This Topic

Explore
Messages
Mentions
Search