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