Millisecond Forums

Still on the RSVP task...

https://forums.millisecond.com/Topic16364.aspx

By KO - 5/26/2015

Hi Dave,

Thanks for your last post to me previous. As a consequence, as per your suggestion in your last post to me I am coming to you for help with a new question/problem with regard to my RSVP task. :-)

As I said in my previous post, the task as I've set it up works really well. The latest difficulty is that I want it to do something beyond what its been doing, specifically with one of my two word lists within the main task. So what I want it to now/next be able to do is to do with the lags. Because that one word list is really made up of four different word lists, I'm not entirely sure about how to set things up/change the set up such that I can have a certain amount of different lags in each of the four different word lists that are currently making up the one word list.

My thinking is that perhaps this is at least in part about using more <text> sections, maybe as in going from having the one: <text target2>  
to having four:   <text target2_1>
                       <text target2_2>
                       <text target2_3>
                       <text target2_4>
each with its own list of words. The difficulty with this seems to me that then maybe I'm also going to have to use branching somehow so as to move from between the different target 2 word lists? Is that right?
Another issue then is that if it is in fact possible to do it this way then what I'm going to be necessarily doing is going from one word list to the next etc. in succession, whereas my preference is there any way of getting the task to still select at random a word from a different word list - since it's only really the lags that I want greater control over. (But that said, I would still prefer that that the word taken from within a given category of those four categories at any given time is not in a sense designated to a particular type of lag, but instead which lag goes with a given word within the category is randomized - with a certain number of lags allowed for each of the four categories.)

I hope this makes sense. I can try to explain in greater detail if you would like me to, I'm just not certain about how to do that at this moment...

Anyway, I'm hoping that you might help with this and am also hoping that perhaps your ideas are less fiddly than the way I was imagining how I can perhaps potentially put together this version of the task. :-)

And finally, thanks again for your previous help - and nice comments in response to my last post. 

By Dave - 5/26/2015

Here's what I would do:

- Pair your wordlists with the desired lags similar to what is already the case in the original script. For the sake of example, suppose you have 4 wordlists (1-4) and 3 lag levels (2,4,6), and you want each lag level to occur in each wordlist once (i.e., 4x3 combinations:

<values>
/ wordlist = 0
/ lag = 0
/ listitem = 0
</values>

<block myblock>
/ trials = [1-12=mytrial]
</block>

<trial mytrial>
/ ontrialbegin = [values.wordlist=list.wordlist.nextvalue; values.lag=list.lag.nextvalue; ]
/ stimulusframes = [1=mytext]
/ validresponse = (57)
</trial>

<text mytext>
/ items = ("List: <%values.wordlist%> | Lag: <%values.lag%>")
</text>

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

<list lag>
/ items = (2,2,2,2,4,4,4,4,6,6,6,6)
/ selectionmode = list.wordlist.currentindex
</list>

- Then select your *items* in the subsequent trials based on the value of values.wordlist. To do this set up further lists that hold the item numbers for the items on a given list, e.g.

<list wordlist1items>
/ items = (1,2,3)
</list>

<list wordlist2items>
/ items = (4,5,6)
</list>

<list wordlist3items>
/ items = (7,8,9)
</list>

<item worditems>
/ 1 = "wordlist 1 item 1"
/ 2 = "wordlist 1 item 2"
/ 3 = "wordlist 1 item 3"

/ 4 = "wordlist 2 item 1"
/ 5 = "wordlist 2 item 2"
/ 6 = "wordlist 2 item 3"

/ 7 = "wordlist 3 item 1"
/ 8 = "wordlist 3 item 2"
/ 9 = "wordlist 3 item 3"
</item>

- Sample from the applicable list in your RSVP-stream trials. I.e,

<trial rsvp>
/ ontrialbegin = [if (values.wordlist==1) values.mystimulus = list.wordlist1items.nextvalue; ]
/ ontrialbegin = [if (values.wordlist==2) values.mystimulus = list.wordlist2items.nextvalue; ]
...
/ stimulusframes = [1=stimulus]
</trial>

<text stimulus>
/ items = worditems
/ select = values.mystimulus
...
</text>
By KO - 5/27/2015

Hi Dave,

Thank you very much for all that information. I've been working through it today and have gotten pretty close to getting the modified task set up. I think there's just a bit of a clash happening between bits of the new script and old script at the moment, so I'm currently figuring that out, but once I've either figured that out - or figured out that I definitely can't figure that out without further help - I'll post a proper reply.

In the meantime though, thanks again! :-)
By KO - 5/30/2015

Hi Dave,

So, I have definitely run into a problem at this point. I'll describe what the program is doing first and then I'll include what I hope to be the relevant script.

The script is running the task - a good start - however - the issue I'm now having is that only one word is ever shown from the Target2 word lists - this list being the one that is affected by the changes made to lag. The word that keeps showing is the very first word on the list. My thinking has been that perhaps this is something to do with the conditional statements in one of the main trial sections, but looking at them, I can't really see any issues with them, perhaps you can?
The other thing that seems to be a problem (though is less of a problem in the scheme of things) is that a bit of the additional coding that you had written script for seems to be acting on its own in a sense - with saying the number of lags and something else at the end of the script. I think that's the text.mytext part which I'm not entirely sure of the function of in a general sense in fact... I have tried to put in into one of the other trial sections and take out the text bit thinking that might help, but when I do that I seem to run into other problems with how the script runs, so I'm just going to leave it in its current form for you to look at with the other trial sections.

So these are the trial sections where I think the problem might be coming from:

 <trial mytrial>
/ ontrialbegin = [values.wordlist=list.wordlist.nextvalue; values.t1position=values.t2lag=list.lag.nextvalue; ]
/ stimulusframes = [1=mytext]
/ validresponse = (57)
/ branch = [trial.starttrial]
</trial>


<trial starttrial>
/ ontrialbegin = [values.trialnumber += 1; values.currentposition = 0; values.streamstring = ""; values.t1item = ""; values.t2item = "";
        text.distractor.resetselection();]
/ 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]
/ontrialbegin = [values.t1position==values.currentposition+1 || values.t2position==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 = [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]
/ ontrialbegin = [if (values.wordlist==2) values.t2lag = list.wordlist1items.nextvalue; ]
/ ontrialbegin = [if (values.wordlist==3) values.t2lag = list.wordlist2items.nextvalue; ]
/ ontrialbegin = [if (values.wordlist==4) values.t2lag = list.wordlist3items.nextvalue; ]
/ ontrialbegin = [if (values.wordlist==5) values.t2lag = 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>

( In the above script, I've deliberately slowed down the timing for targets 1 and 2 to check that they are showing up. I did try to use the debugging that you'd set up previously, but targets one and two weren't registering there for some reason. Also, I'm describing the word groups as 2, 3, 4 and 5 because I wasn't sure whether designating one of them as 1 would interfere with some of the other coding - such as:
/ ontrialbegin = [values.currentposition += 1] )



Here are some other changes that I've made major changes on the basis of your previous example:

So here I have 4 t1positions, 4 lags, and 4 word lists, with 64 trials in total

<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 = random
/ replace = false
</list>


<list wordlist>
/ items = (2,3,4,5,2,3,4,5,2,3,4,5,2,3,4,5,
           2,3,4,5,2,3,4,5,2,3,4,5,2,3,4,5,
           2,3,4,5,2,3,4,5,2,3,4,5,2,3,4,5,
           2,3,4,5,2,3,4,5,2,3,4,5,2,3,4,5)
/ replace = false
</list>

<list lag>
/ 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>

<text target2>
/ items = worditems
/ select = values.t2lag
/ select = noreplace
/ fontstyle = ("Verdana", 5%, true)
/ color = red
/txbgcolor = (black)
</text>

<list wordlist1items>
/ items = (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)
</list>

<list wordlist2items>
/ items = (17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32)
</list>

<list wordlist3items>
/ items = (33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48)
</list>

<list wordlist4items>
/items = (49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64)
</list>


<text mytext>
/ items = ("List: <%values.wordlist%> | Lag: <%values.t2lag%>")
</text>


If you would like, I could also email you the whole script, I just think at this stage it's fairly likely that the problem is in one or more than one of these areas.

Anyway, I'm really hoping that you can tell me what bits/which bits here are continuing to mess up the program from running as it's intended to.
I would very much appreciate the help. :-)


By KO - 5/30/2015

Hi again,

I thought I'd maybe include the one possibility that had occurred to me as to what text.mytext thing might be for is to act like the debugging in giving you the information so that you can make sure that the lags are consistent across the different word types? Is that right?

Anyway,
Hope to hear from you particularly with regard to how to sort out the main issue.  :-)
By Dave - 5/31/2015

The code I provided in my previous reply -- specifically the text.mytext / trial.mytrial thing -- was solely supposed to illustrate how to pair things and that you end up with the desired pairings across lists if you run it.

You do not need that specific <trial> or <text> element in your script. You need the corresponding *logic*. I.e., in your "start" trial that initiates / sets up each RSVP stream, you ought to pick 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. Then proceed as usual.

As far as I can see from your posted code snippets, you only sample from the different word lists in your two "target" trials. You don't do so in your "distractor" trials. Whether that is intended or not, I do not know.

Further, I don't see where in your code you actually determine the respective target positions within the RSVP stream. (values.t1position, values.t2position). The statement

 <trial mytrial>
/ ontrialbegin = [values.wordlist=list.wordlist.nextvalue; values.t1position=values.t2lag=list.lag.nextvalue; ]
...
</trial>

is invalid syntax. Also, why should values.t1position be equal to values.t2lag? This doesn't make sense to me. Finally, it's unclear whether those statements ever get executed at all, since there is no indication you actually ever *run* <trial mytrial>.

Looking at

<trial target2trial>
/ ontrialbegin = [values.currentposition += 1]
/ ontrialbegin = [if (values.wordlist==2) values.t2lag = list.wordlist1items.nextvalue; ]
/ ontrialbegin = [if (values.wordlist==3) values.t2lag = list.wordlist2items.nextvalue; ]
/ ontrialbegin = [if (values.wordlist==4) values.t2lag = list.wordlist3items.nextvalue; ]
/ ontrialbegin = [if (values.wordlist==5) values.t2lag = list.wordlist4items.nextvalue; ]
...
</trial>

You set values.t2lag to an *item number* from one of the 4 word lists. That also seems wrong to me. Isn't values.t2lag supposed to indicate target2's position within the RSVP stream *relative* to target1's position within the stream?

It may be a good idea to take a step back and re-examine your previous RSVP script. It seems to me that there are a couple of misconceptions left about what the various variables represent / how the script actually works.

If you have trouble making sense of any particular part, I'll happily try to explain.
By KO - 5/31/2015

Hi Dave,

Thanks for your previous post. I wish I could say that the problem is solved, but as yet it is not. I have been working on trying to take a step back to look at my RSVP script today. So I think I understood some aspects of things a little better - but I'm find it difficult to know what to ask about because I guess in a sense I don't know what I don't know.

Before I get to any questions I'll give a bit of an overview of what I was intending the script to do - since I'm not sure I was clear on that in my previous post/s.
I have a separate word list (just the one word list that is) that's in the text section that's for the distractor words :  <text distractor> with all the distractor words in that. And there the words are set up like so:
<text distractor>
/ items = ("word1", "word2", "word3" etc.)
It seems to run fine, so I'm not clear on what you meant in what you said previously.

I have another separate word list (again just the one word list) that is in the text section that's for the target 1 words:  <text target1> which also seems to run fine. It is also set up in the same way.
Then the final word list is comprised of four categories of words which I set up as far as I can tell, the way that you suggested that I should do.

<item worditems>
/ 1 = "word1"
/ 2 = "word2"
(down to 16)

and then the second category of words starts at 17
/ 17 = "word17"
and then I have my two categories of words starting at /33 and /49 of the items respectively. And of course then I also still have a text section with this, which now does not involve trying to make T2lag do more than the function that it already does - my mistake - so I've called it the name that you previously did previously to separate out its function.

<text target2>
/ items = worditems
/ select = values.mystimulus
/select =
/ select = noreplace
/ fontstyle = ("Verdana", 5%, true)
/ color = red
/txbgcolor = (black)
</text>

So now my target2 trial section looks like this:

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

Nevertheless, the first target2 word has continued to keep repeating. I still think that maybe I'm missing something from this particular trial, maybe some sort of conditional statement that would make it actually move from the first word to other target 2 words. I gather from what you were saying in your last post that you think so too - where you said that I ought to pick 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 etc. Although I guess you could also be talking about a broader problem?

I've wondered too if perhaps there should be direct reference to my lists in here - the ones that govern t1position and t2lag but when I put them in - as below - target2 completely stopped appearing. I'm not clear on why. Maybe I'm not linking the right things to each other, as you mentioned in your previous post?

<trial starttrial>
/ ontrialbegin = [values.trialnumber += 1; values.currentposition = 0; values.mystimulus = ""; values.streamstring = ""; values.t1item = ""; values.t2item = "";
        text.distractor.resetselection();]
/ontrialbegin = [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>

Anyway, while I'd like to get to more nitty gritty stuff today, I think I've been looking at this stuff a bit too long now, so unfortunately the specific questions will have to wait till my next post when I'll have had a bit more time to think through what I want to ask. If any specific thoughts/feedback come to mind from your end in the meantime though I'd be very happy to hear them! :-)

By Dave - 5/31/2015

Attach the full script to this thread (click +Insert -> Add File when posting a reply) and I'll give it a look.
By KO - 6/1/2015

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.
By Dave - 6/1/2015

> 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.
By KO - 6/1/2015

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

By Dave - 6/1/2015

#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.
By Kamil F - 6/2/2015

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


By Dave - 6/2/2015

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.
By KO - 6/2/2015

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. :-)
By Dave - 6/2/2015

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.
By Dave - 6/2/2015

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.
By KO - 6/3/2015

For sure, thanks for the clarification! And thanks again for all your help. :-)