Millisecond Forums

List Randomisation

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

By Psych_Josh - 3/6/2017

Hello,

I have a small/quick query regarding list randomisation. I have 3 x 2 blocks (three conditions, each with their own two different stimuli presentation times of 500 or 900ms), 20 trials in each block. I would like to randomly present each condition to each participant, but ensuring that the participant receives both of stimuli presentations (also randomly presented) before continuing onto the next condition. I've attached my script, but I've also pasted the essentials: 

*********
Block list
*********

<list masterblocklist>
/items = [list.baseline.nextvalue; list.self.nextvalue; list.countdown.nextvalue]
/selectionmode = noreplacenorepeat(1,1,2,2,3,3)
</list>

<list baseline>
/items = (block.baseline500, block.baseline900)
</list>

<list self>
/items = (block.self500, block.self900)
</list>

<list countdown>
/items = (block.countdown500, block.countdown900)
</list>

*********
Blocks
*********

<block baseline500>
/preinstructions = (Baseline)
/trials = [1-20 = noreplace(baselineclick500)]
</block>

<block baseline900>
/preinstructions = (Baseline)
/trials = [1-20 = noreplace(baselineclick900)]
</block>

<block self500>
/preinstructions = (Self)
/trials = [1-20 = noreplace(selfclick500)]
</block>

<block self900>
/preinstructions = (Self)
/trials = [1-20 = noreplace(selfclick900)]
</block>

<block countdown500>
/preinstructions = (Countdown)
/trials = [1-20 = noreplace(countdownbegin500)]
</block>

<block countdown900>
/preinstructions = (Countdown)
/trials = [1-20 = noreplace(countdownbegin900)]
</block>

<expt>
/blocks = [1 = Intro; 2 = Consent; 3 = Instructions; 4-9 = list.masterblocklist; 10 = Wordcode; 11 = End]
</expt>


However, instead I'm getting repeats of the same block (e.g., baseline500 twice), and no presentation of either of the 'Countdown' blocks. If someone could point out where a novice is going wrong, that would be very appreciated!

Many thanks,
Josh
By Dave - 3/6/2017

Psych_Josh - Monday, March 6, 2017
Hello,

I have a small/quick query regarding list randomisation. I have 3 x 2 blocks (three conditions, each with their own two different stimuli presentation times of 500 or 900ms), 20 trials in each block. I would like to randomly present each condition to each participant, but ensuring that the participant receives both of stimuli presentations (also randomly presented) before continuing onto the next condition. I've attached my script, but I've also pasted the essentials: 

*********
Block list
*********

<list masterblocklist>
/items = [list.baseline.nextvalue; list.self.nextvalue; list.countdown.nextvalue]
/selectionmode = noreplacenorepeat(1,1,2,2,3,3)
</list>

<list baseline>
/items = (block.baseline500, block.baseline900)
</list>

<list self>
/items = (block.self500, block.self900)
</list>

<list countdown>
/items = (block.countdown500, block.countdown900)
</list>

*********
Blocks
*********

<block baseline500>
/preinstructions = (Baseline)
/trials = [1-20 = noreplace(baselineclick500)]
</block>

<block baseline900>
/preinstructions = (Baseline)
/trials = [1-20 = noreplace(baselineclick900)]
</block>

<block self500>
/preinstructions = (Self)
/trials = [1-20 = noreplace(selfclick500)]
</block>

<block self900>
/preinstructions = (Self)
/trials = [1-20 = noreplace(selfclick900)]
</block>

<block countdown500>
/preinstructions = (Countdown)
/trials = [1-20 = noreplace(countdownbegin500)]
</block>

<block countdown900>
/preinstructions = (Countdown)
/trials = [1-20 = noreplace(countdownbegin900)]
</block>

<expt>
/blocks = [1 = Intro; 2 = Consent; 3 = Instructions; 4-9 = list.masterblocklist; 10 = Wordcode; 11 = End]
</expt>


However, instead I'm getting repeats of the same block (e.g., baseline500 twice), and no presentation of either of the 'Countdown' blocks. If someone could point out where a novice is going wrong, that would be very appreciated!

Many thanks,
Josh

<list masterblocklist>
/items = (list.baseline.nextvalue; list.self.nextvalue; list.countdown.nextvalue)
/ poolsize = 6

/selectionmode = noreplacenorepeat(1,1,2,2,3,3)
</list>

<list baseline>
/items = (block.baseline500, block.baseline900)
</list>

<list self>
/items = (block.self500, block.self900)
</list>

<list countdown>
/items = (block.countdown500, block.countdown900)
</list>

<block baseline500>
/ trials = [1=mytrial]
</block>

<block baseline900>
/ trials = [1=mytrial]
</block>

<block self500>
/ trials = [1=mytrial]
</block>

<block self900>
/ trials = [1=mytrial]
</block>

<block countdown500>
/ trials = [1=mytrial]
</block>

<block countdown900>
/ trials = [1=mytrial]
</block>

<trial mytrial>
/ stimulusframes = [1=mytext]
/ validresponse = (57)
</trial>

<text mytext>
/ items = ("<%script.currentblock%>")
</text>

<expt>
/blocks = [1-6 = list.masterblocklist;]
</expt>

would be the correct specification.
By Psych_Josh - 3/6/2017

Brilliant, thanks Dave!
By Psych_Josh - 3/8/2017

Hi Dave,

Terribly sorry - I have one more query that has arisen. As the script was finalised, it came to pass that I also need to randomise the presentation of a countdown. Originally, I did this simply through stimulus times, starting from 5, going down to zero (as you can see from my pasted script below); however, the study that I am replicating randomised the countdown so that the countdown could start from 5, 4, 3, or 2. So, essentially I need a list of four different countdown sequences. I tried to use a master list, as I had used in the previous query, but could not work out how to effectively present the countdown (i.e., the images of the numbers) at the correct times (i.e., starting 1000ms after trial.countdown.500 begins), as well as ensuring that the stimuli following the countdown were presented at the correct times.


<item Middle>
/1 = "Middle.jpeg"
</item>

<picture Middle>
/items = Middle
/position = (50, 64)
/erase = false
</picture>

<item BulbL>
/1 = "BulbL.jpeg"
</item>

<picture BulbL>
/items = BulbL
/position = (28, 40)
/erase = false
</picture>

<item BulbR>
/1 = "BulbR.jpeg"
</item>

<picture BulbR>
/items = BulbR
/position = (71, 40)
/erase = false
</picture>


<item 1>
/1 = "1.jpeg"
</item>

<picture 1>
/items = 1
/position = (28, 40)
</picture>

<item 2>
/1 = "2.jpeg"
</item>

<picture 2>
/items = 2
/position = (28, 40)
</picture>

<item 3>
/1 = "3.jpeg"
</item>

<picture 3>
/items = 3
/position = (28, 40)
</picture>

<item 4>
/1 = "4.jpeg"
</item>

<picture 4>
/items = 4
/position = (28, 40)
</picture>

<item 5>
/1 = "5.jpeg"
</item>

<picture 5>
/items = 5
/position = (28, 40)
</picture>


<trial countdownbegin500>
/stimulustimes = [1 = whiterectangle; 1000 = begintrial]
/beginresponsetime = 1000
/correctresponse = (57)
/responseinterrupt = trial
/branch = [trial.countdown500]
/recorddata = false
</trial>

<trial countdown500>
/stimulustimes = [1 = middle; 1000 = 5; 2000 = 4; 3000 = 3; 4000 = 2; 5000 = 1; 6000 = BulbL; 6100 = whiterectangle2; 6500 = BulbR; 6600 = whiterectangle3]
/correctresponse = ("p")
/beginresponsetime = 0
/responseinterrupt = trial
/trialduration = 7600
/posttrialpause = 1000
/ontrialend = [values.onset = 500]
/ontrialend = [values.responsetime = trial.countdown500.latency - 6000]
/recorddata = false
/branch = [trial.countdowncontinue500]
</trial>

<trial countdowncontinue500>
/stimulustimes = [1 = middle, whiterectangle3]
/trialduration = 500
/ontrialend = [values.responsetime_onset_difference = (values.onset - values.responsetime)*-1]
/ontrialend = [values.condition = "countdown"]
/ontrialend = [values.countdownresponse500sum = values.countdownresponse500sum + values.responsetime]
/ontrialend = [values.countdown500SUM = values.countdown500SUM + values.responsetime_onset_difference]
/recorddata = true
</trial>

Sorry for the hassle, and equally so if it's a simple fix! Do let me know if I haven't explained it clearly enough.

Many thanks,
Josh
By Dave - 3/9/2017

Psych_Josh - Thursday, March 9, 2017
Hi Dave,

Terribly sorry - I have one more query that has arisen. As the script was finalised, it came to pass that I also need to randomise the presentation of a countdown. Originally, I did this simply through stimulus times, starting from 5, going down to zero (as you can see from my pasted script below); however, the study that I am replicating randomised the countdown so that the countdown could start from 5, 4, 3, or 2. So, essentially I need a list of four different countdown sequences. I tried to use a master list, as I had used in the previous query, but could not work out how to effectively present the countdown (i.e., the images of the numbers) at the correct times (i.e., starting 1000ms after trial.countdown.500 begins), as well as ensuring that the stimuli following the countdown were presented at the correct times.


<item Middle>
/1 = "Middle.jpeg"
</item>

<picture Middle>
/items = Middle
/position = (50, 64)
/erase = false
</picture>

<item BulbL>
/1 = "BulbL.jpeg"
</item>

<picture BulbL>
/items = BulbL
/position = (28, 40)
/erase = false
</picture>

<item BulbR>
/1 = "BulbR.jpeg"
</item>

<picture BulbR>
/items = BulbR
/position = (71, 40)
/erase = false
</picture>


<item 1>
/1 = "1.jpeg"
</item>

<picture 1>
/items = 1
/position = (28, 40)
</picture>

<item 2>
/1 = "2.jpeg"
</item>

<picture 2>
/items = 2
/position = (28, 40)
</picture>

<item 3>
/1 = "3.jpeg"
</item>

<picture 3>
/items = 3
/position = (28, 40)
</picture>

<item 4>
/1 = "4.jpeg"
</item>

<picture 4>
/items = 4
/position = (28, 40)
</picture>

<item 5>
/1 = "5.jpeg"
</item>

<picture 5>
/items = 5
/position = (28, 40)
</picture>


<trial countdownbegin500>
/stimulustimes = [1 = whiterectangle; 1000 = begintrial]
/beginresponsetime = 1000
/correctresponse = (57)
/responseinterrupt = trial
/branch = [trial.countdown500]
/recorddata = false
</trial>

<trial countdown500>
/stimulustimes = [1 = middle; 1000 = 5; 2000 = 4; 3000 = 3; 4000 = 2; 5000 = 1; 6000 = BulbL; 6100 = whiterectangle2; 6500 = BulbR; 6600 = whiterectangle3]
/correctresponse = ("p")
/beginresponsetime = 0
/responseinterrupt = trial
/trialduration = 7600
/posttrialpause = 1000
/ontrialend = [values.onset = 500]
/ontrialend = [values.responsetime = trial.countdown500.latency - 6000]
/recorddata = false
/branch = [trial.countdowncontinue500]
</trial>

<trial countdowncontinue500>
/stimulustimes = [1 = middle, whiterectangle3]
/trialduration = 500
/ontrialend = [values.responsetime_onset_difference = (values.onset - values.responsetime)*-1]
/ontrialend = [values.condition = "countdown"]
/ontrialend = [values.countdownresponse500sum = values.countdownresponse500sum + values.responsetime]
/ontrialend = [values.countdown500SUM = values.countdown500SUM + values.responsetime_onset_difference]
/recorddata = true
</trial>

Sorry for the hassle, and equally so if it's a simple fix! Do let me know if I haven't explained it clearly enough.

Many thanks,
Josh

Then create four countdown trial elements -- one counting down from 5, one counting down from 4, one from 3, one starting from 2.

<trial countdownfrom5>
...
</trial>

<trial countdownfrom4>
...
</trial>

<trial countdownfrom3>
...
</trial>

<trial countdownfrom2>
...
</trial>

Put them in a <list> in the desired quantities (or sample with replacement)

<list countdownlist>
/ items = (trial.countdownfrom5, trial.countdownfrom4, trial.countdownfrom3, trial.countdownfrom2)
/ replace = true
</list>

and /branch to a countdown trial selected from that list

<trial countdownbegin500>
/stimulustimes = [1 = whiterectangle; 1000 = begintrial]
/beginresponsetime = 1000
/correctresponse = (57)
/responseinterrupt = trial
/branch = [list.countdownlist.nextvalue]
/recorddata = false
</trial>
By Psych_Josh - 3/9/2017

Thanks Dave!
By Psych_Josh - 3/14/2017

Psych_Josh - Friday, March 10, 2017
Thanks Dave!

Hi Dave - apologies once again, as my study mechanics have been reformed slightly that requires another list venture I have been unable to find a solution to. Essentially, for, again, the countdown, I need to count upwards, so that there is a continuously count increasing across each trial of this condition. Similar to my previous query, a stimulus is set to appear between 2-5 seconds after the onset of the trial. For example, Trial 1 may see a count of 1, 2, 3, 4, and then stimulus-presentation, and therefore in Trial 2, the count will resume from 5, so for example, 5, 6, 7, stimulus presentation, and so forth. There are 20 trials in this condition, so there is a theoretical maximum count of 100 across the whole condition. I have tried implementing a list mechanism, after creating 100 images of each number, such as: 

<item 1>
/1 = "1.jpeg"
</item>

<picture 1>
/items = 1
/position = (29, 40)
</picture>

<item 2>
/1 = "2.jpeg"
</item>

<picture 2>
/items = 2
/position = (29, 40)
</picture>

etc.

****
Countdown Lists
****

<list countup_500>
/items = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100)
/selectionmode = sequence
/selectionrate = always
</list>

<list countdowbegin500>
/items = (trial.countdown5_500, trial.countdown4_500, trial.countdown3_500, trial.countdown2_500)
/replace = false
/selectionmode = random
</list>

****
500
****

<trial countdownbegin500>
/stimulustimes = [1 = whiterectangle; 1000 = begintrial]
/beginresponsetime = 1000
/correctresponse = (57)
/responseinterrupt = trial
/branch = [list.countdowbegin500.nextvalue]
/recorddata = false
</trial>

<trial countdown5_500>
/stimulustimes = [1 = middle; 6000 = BulbL; 6100 = whiterectangle2; 6500 = BulbR; 6600 = whiterectangle3]
/ontrialbegin = [trial.countdown5_500.insertstimulustime(list.countup_500.nextvalue, 1000)]
/ontrialbegin = [trial.countdown5_500.insertstimulustime(list.countup_500.nextvalue, 2000)]
/ontrialbegin = [trial.countdown5_500.insertstimulustime(list.countup_500.nextvalue, 3000)]
/ontrialbegin = [trial.countdown5_500.insertstimulustime(list.countup_500.nextvalue, 4000)]
/ontrialbegin = [trial.countdown5_500.insertstimulustime(list.countup_500.nextvalue, 5000)]
/correctresponse = ("p")
/beginresponsetime = 0
/responseinterrupt = trial
/trialduration = 7600
/posttrialpause = 1000
/ontrialend = [values.onset = 500]
/ontrialend = [values.responsetime = trial.countdown5_500.latency - 6000]
/recorddata = false
/branch = [trial.countdowncontinue500]
</trial>

<trial countdown4_500>
/stimulustimes = [1 = middle; 5000 = BulbL; 5100 = whiterectangle2; 5500 = BulbR; 5600 = whiterectangle3]
/ontrialbegin = [trial.countdown4_500.insertstimulustime(list.countup_500.nextvalue, 1000)]
/ontrialbegin = [trial.countdown4_500.insertstimulustime(list.countup_500.nextvalue, 2000)]
/ontrialbegin = [trial.countdown4_500.insertstimulustime(list.countup_500.nextvalue, 3000)]
/ontrialbegin = [trial.countdown4_500.insertstimulustime(list.countup_500.nextvalue, 4000)]
/correctresponse = ("p")
/beginresponsetime = 0
/responseinterrupt = trial
/trialduration = 6600
/posttrialpause = 1000
/ontrialend = [values.onset = 500]
/ontrialend = [values.responsetime = trial.countdown4_500.latency - 5000]
/recorddata = false
/branch = [trial.countdowncontinue500]
</trial>

etc.

However, I am acquire an error in function; an argument with an invalid valid value was passed to a function, and sadly I lack the knowledge to overcome this. Apologies if this is a simple fix, as always. Let me know if I have not explained my issue clearly enough.

Many thanks in advance,
Josh

By Dave - 3/15/2017

Psych_Josh - Wednesday, March 15, 2017
Psych_Josh - Friday, March 10, 2017
Thanks Dave!

Hi Dave - apologies once again, as my study mechanics have been reformed slightly that requires another list venture I have been unable to find a solution to. Essentially, for, again, the countdown, I need to count upwards, so that there is a continuously count increasing across each trial of this condition. Similar to my previous query, a stimulus is set to appear between 2-5 seconds after the onset of the trial. For example, Trial 1 may see a count of 1, 2, 3, 4, and then stimulus-presentation, and therefore in Trial 2, the count will resume from 5, so for example, 5, 6, 7, stimulus presentation, and so forth. There are 20 trials in this condition, so there is a theoretical maximum count of 100 across the whole condition. I have tried implementing a list mechanism, after creating 100 images of each number, such as: 

<item 1>
/1 = "1.jpeg"
</item>

<picture 1>
/items = 1
/position = (29, 40)
</picture>

<item 2>
/1 = "2.jpeg"
</item>

<picture 2>
/items = 2
/position = (29, 40)
</picture>

etc.

****
Countdown Lists
****

<list countup_500>
/items = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100)
/selectionmode = sequence
/selectionrate = always
</list>

<list countdowbegin500>
/items = (trial.countdown5_500, trial.countdown4_500, trial.countdown3_500, trial.countdown2_500)
/replace = false
/selectionmode = random
</list>

****
500
****

<trial countdownbegin500>
/stimulustimes = [1 = whiterectangle; 1000 = begintrial]
/beginresponsetime = 1000
/correctresponse = (57)
/responseinterrupt = trial
/branch = [list.countdowbegin500.nextvalue]
/recorddata = false
</trial>

<trial countdown5_500>
/stimulustimes = [1 = middle; 6000 = BulbL; 6100 = whiterectangle2; 6500 = BulbR; 6600 = whiterectangle3]
/ontrialbegin = [trial.countdown5_500.insertstimulustime(list.countup_500.nextvalue, 1000)]
/ontrialbegin = [trial.countdown5_500.insertstimulustime(list.countup_500.nextvalue, 2000)]
/ontrialbegin = [trial.countdown5_500.insertstimulustime(list.countup_500.nextvalue, 3000)]
/ontrialbegin = [trial.countdown5_500.insertstimulustime(list.countup_500.nextvalue, 4000)]
/ontrialbegin = [trial.countdown5_500.insertstimulustime(list.countup_500.nextvalue, 5000)]
/correctresponse = ("p")
/beginresponsetime = 0
/responseinterrupt = trial
/trialduration = 7600
/posttrialpause = 1000
/ontrialend = [values.onset = 500]
/ontrialend = [values.responsetime = trial.countdown5_500.latency - 6000]
/recorddata = false
/branch = [trial.countdowncontinue500]
</trial>

<trial countdown4_500>
/stimulustimes = [1 = middle; 5000 = BulbL; 5100 = whiterectangle2; 5500 = BulbR; 5600 = whiterectangle3]
/ontrialbegin = [trial.countdown4_500.insertstimulustime(list.countup_500.nextvalue, 1000)]
/ontrialbegin = [trial.countdown4_500.insertstimulustime(list.countup_500.nextvalue, 2000)]
/ontrialbegin = [trial.countdown4_500.insertstimulustime(list.countup_500.nextvalue, 3000)]
/ontrialbegin = [trial.countdown4_500.insertstimulustime(list.countup_500.nextvalue, 4000)]
/correctresponse = ("p")
/beginresponsetime = 0
/responseinterrupt = trial
/trialduration = 6600
/posttrialpause = 1000
/ontrialend = [values.onset = 500]
/ontrialend = [values.responsetime = trial.countdown4_500.latency - 5000]
/recorddata = false
/branch = [trial.countdowncontinue500]
</trial>

etc.

However, I am acquire an error in function; an argument with an invalid valid value was passed to a function, and sadly I lack the knowledge to overcome this. Apologies if this is a simple fix, as always. Let me know if I have not explained my issue clearly enough.

Many thanks in advance,
Josh


> /ontrialbegin = [trial.countdown5_500.insertstimulustime(list.countup_500.nextvalue, 1000)]

You are trying to insert a stimulus. list.countup_500.nextvalue does not return a stimulus. It returns an integer, not a <picture> or <text> element.

If you wanted the list to return a stimulus object, you'd have to specify

<list countup_500>
/items = (picture.1, picture.2, picture.3, ...)
...
</list>
By Psych_Josh - 3/15/2017

Dave - Wednesday, March 15, 2017
Psych_Josh - Wednesday, March 15, 2017
Psych_Josh - Friday, March 10, 2017
Thanks Dave!

Hi Dave - apologies once again, as my study mechanics have been reformed slightly that requires another list venture I have been unable to find a solution to. Essentially, for, again, the countdown, I need to count upwards, so that there is a continuously count increasing across each trial of this condition. Similar to my previous query, a stimulus is set to appear between 2-5 seconds after the onset of the trial. For example, Trial 1 may see a count of 1, 2, 3, 4, and then stimulus-presentation, and therefore in Trial 2, the count will resume from 5, so for example, 5, 6, 7, stimulus presentation, and so forth. There are 20 trials in this condition, so there is a theoretical maximum count of 100 across the whole condition. I have tried implementing a list mechanism, after creating 100 images of each number, such as: 

<item 1>
/1 = "1.jpeg"
</item>

<picture 1>
/items = 1
/position = (29, 40)
</picture>

<item 2>
/1 = "2.jpeg"
</item>

<picture 2>
/items = 2
/position = (29, 40)
</picture>

etc.

****
Countdown Lists
****

<list countup_500>
/items = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100)
/selectionmode = sequence
/selectionrate = always
</list>

<list countdowbegin500>
/items = (trial.countdown5_500, trial.countdown4_500, trial.countdown3_500, trial.countdown2_500)
/replace = false
/selectionmode = random
</list>

****
500
****

<trial countdownbegin500>
/stimulustimes = [1 = whiterectangle; 1000 = begintrial]
/beginresponsetime = 1000
/correctresponse = (57)
/responseinterrupt = trial
/branch = [list.countdowbegin500.nextvalue]
/recorddata = false
</trial>

<trial countdown5_500>
/stimulustimes = [1 = middle; 6000 = BulbL; 6100 = whiterectangle2; 6500 = BulbR; 6600 = whiterectangle3]
/ontrialbegin = [trial.countdown5_500.insertstimulustime(list.countup_500.nextvalue, 1000)]
/ontrialbegin = [trial.countdown5_500.insertstimulustime(list.countup_500.nextvalue, 2000)]
/ontrialbegin = [trial.countdown5_500.insertstimulustime(list.countup_500.nextvalue, 3000)]
/ontrialbegin = [trial.countdown5_500.insertstimulustime(list.countup_500.nextvalue, 4000)]
/ontrialbegin = [trial.countdown5_500.insertstimulustime(list.countup_500.nextvalue, 5000)]
/correctresponse = ("p")
/beginresponsetime = 0
/responseinterrupt = trial
/trialduration = 7600
/posttrialpause = 1000
/ontrialend = [values.onset = 500]
/ontrialend = [values.responsetime = trial.countdown5_500.latency - 6000]
/recorddata = false
/branch = [trial.countdowncontinue500]
</trial>

<trial countdown4_500>
/stimulustimes = [1 = middle; 5000 = BulbL; 5100 = whiterectangle2; 5500 = BulbR; 5600 = whiterectangle3]
/ontrialbegin = [trial.countdown4_500.insertstimulustime(list.countup_500.nextvalue, 1000)]
/ontrialbegin = [trial.countdown4_500.insertstimulustime(list.countup_500.nextvalue, 2000)]
/ontrialbegin = [trial.countdown4_500.insertstimulustime(list.countup_500.nextvalue, 3000)]
/ontrialbegin = [trial.countdown4_500.insertstimulustime(list.countup_500.nextvalue, 4000)]
/correctresponse = ("p")
/beginresponsetime = 0
/responseinterrupt = trial
/trialduration = 6600
/posttrialpause = 1000
/ontrialend = [values.onset = 500]
/ontrialend = [values.responsetime = trial.countdown4_500.latency - 5000]
/recorddata = false
/branch = [trial.countdowncontinue500]
</trial>

etc.

However, I am acquire an error in function; an argument with an invalid valid value was passed to a function, and sadly I lack the knowledge to overcome this. Apologies if this is a simple fix, as always. Let me know if I have not explained my issue clearly enough.

Many thanks in advance,
Josh


> /ontrialbegin = [trial.countdown5_500.insertstimulustime(list.countup_500.nextvalue, 1000)]

You are trying to insert a stimulus. list.countup_500.nextvalue does not return a stimulus. It returns an integer, not a <picture> or <text> element.

If you wanted the list to return a stimulus object, you'd have to specify

<list countup_500>
/items = (picture.1, picture.2, picture.3, ...)
...
</list>

Once again, many thanks Dave!
By Psych_Josh - 3/20/2017

Hi Dave,

Sorry to bring up an old topic, but I'm still failing to acquire a proper randomisation of the lists in terms of by time, and then by condition, so that the participant receives both blocks of stimuli presentation times of 500, and then 900 (also randomly presented) before continuing onto the next condition. Currently, they are experiencing a completely randomised presentation, i.e., the stimulus times aren't being presented one after the other before moving onto the next condition.

*********
Block list
*********

<list masterblocklist>
/items = (list.baseline.nextvalue; list.self.nextvalue; list.countdown.nextvalue)
/poolsize = 6
/selectionmode = noreplacenorepeat(1,1,2,2,3,3)
</list>

Conditions:

<list baseline>
/items = (block.baseline500, block.baseline900)
</list>

<list self>
/items = (block.self500, block.self900)
</list>

<list countdown>
/items = (block.countdown500, block.countdown900)
</list>

*********
Blocks
*********

<block baseline500>
/preinstructions = (Baseline)
/trials = [1-10 = noreplace(baselineclickprac500); 11-20 = noreplace(baselineclick500)]
</block>

<block baseline900>
/preinstructions = (Baseline)
/trials = [1-10 = noreplace(baselineclickprac900); 11-20 = noreplace(baselineclick900)]
</block>

<block self500>
/preinstructions = (Self)
/trials = [1-10 = noreplace(selfclickprac500); 11-20 = noreplace(selfclick500)]
</block>

<block self900>
/preinstructions = (Self)
/trials = [1-10 = noreplace(selfclickprac900); 11-20 = noreplace(selfclick900)]
</block>

<block countdown500>
/preinstructions = (Countdown)
/trials = [1-10 = noreplace(countdownbeginprac500); 11-20 = noreplace(countdownbegin500)]
</block>

<block countdown900>
/preinstructions = (Countdown)
/trials = [1-10 = noreplace(countdownbeginprac900); 11-20 = noreplace(countdownbegin900)]
</block>

Pardon if I did not explain myself properly before, or I implemented your advice incorrectly.

Many thanks,
Josh
By Dave - 3/20/2017

Psych_Josh - Monday, March 20, 2017
Hi Dave,

Sorry to bring up an old topic, but I'm still failing to acquire a proper randomisation of the lists in terms of by time, and then by condition, so that the participant receives both blocks of stimuli presentation times of 500, and then 900 (also randomly presented) before continuing onto the next condition. Currently, they are experiencing a completely randomised presentation, i.e., the stimulus times aren't being presented one after the other before moving onto the next condition.

*********
Block list
*********

<list masterblocklist>
/items = (list.baseline.nextvalue; list.self.nextvalue; list.countdown.nextvalue)
/poolsize = 6
/selectionmode = noreplacenorepeat(1,1,2,2,3,3)
</list>

Conditions:

<list baseline>
/items = (block.baseline500, block.baseline900)
</list>

<list self>
/items = (block.self500, block.self900)
</list>

<list countdown>
/items = (block.countdown500, block.countdown900)
</list>

*********
Blocks
*********

<block baseline500>
/preinstructions = (Baseline)
/trials = [1-10 = noreplace(baselineclickprac500); 11-20 = noreplace(baselineclick500)]
</block>

<block baseline900>
/preinstructions = (Baseline)
/trials = [1-10 = noreplace(baselineclickprac900); 11-20 = noreplace(baselineclick900)]
</block>

<block self500>
/preinstructions = (Self)
/trials = [1-10 = noreplace(selfclickprac500); 11-20 = noreplace(selfclick500)]
</block>

<block self900>
/preinstructions = (Self)
/trials = [1-10 = noreplace(selfclickprac900); 11-20 = noreplace(selfclick900)]
</block>

<block countdown500>
/preinstructions = (Countdown)
/trials = [1-10 = noreplace(countdownbeginprac500); 11-20 = noreplace(countdownbegin500)]
</block>

<block countdown900>
/preinstructions = (Countdown)
/trials = [1-10 = noreplace(countdownbeginprac900); 11-20 = noreplace(countdownbegin900)]
</block>

Pardon if I did not explain myself properly before, or I implemented your advice incorrectly.

Many thanks,
Josh

I suppose I don't understand what this means then:

"a proper randomisation of the lists in terms of by time, and then by condition, so that the participant receives both blocks of stimuli presentation times of 500, and then 900 (also randomly presented) before continuing onto the next condition."

Could you give a concrete example, please?

And what does

"Currently, they are experiencing a completely randomised presentation, i.e., the stimulus times aren't being presented one after the other before moving onto the next condition."

mean, particularly " the stimulus times aren't being presented one after the other"? Here, too, please give concrete examples. Thanks.
By Psych_Josh - 3/20/2017

Dave - Monday, March 20, 2017
Psych_Josh - Monday, March 20, 2017
Hi Dave,

Sorry to bring up an old topic, but I'm still failing to acquire a proper randomisation of the lists in terms of by time, and then by condition, so that the participant receives both blocks of stimuli presentation times of 500, and then 900 (also randomly presented) before continuing onto the next condition. Currently, they are experiencing a completely randomised presentation, i.e., the stimulus times aren't being presented one after the other before moving onto the next condition.

*********
Block list
*********

<list masterblocklist>
/items = (list.baseline.nextvalue; list.self.nextvalue; list.countdown.nextvalue)
/poolsize = 6
/selectionmode = noreplacenorepeat(1,1,2,2,3,3)
</list>

Conditions:

<list baseline>
/items = (block.baseline500, block.baseline900)
</list>

<list self>
/items = (block.self500, block.self900)
</list>

<list countdown>
/items = (block.countdown500, block.countdown900)
</list>

*********
Blocks
*********

<block baseline500>
/preinstructions = (Baseline)
/trials = [1-10 = noreplace(baselineclickprac500); 11-20 = noreplace(baselineclick500)]
</block>

<block baseline900>
/preinstructions = (Baseline)
/trials = [1-10 = noreplace(baselineclickprac900); 11-20 = noreplace(baselineclick900)]
</block>

<block self500>
/preinstructions = (Self)
/trials = [1-10 = noreplace(selfclickprac500); 11-20 = noreplace(selfclick500)]
</block>

<block self900>
/preinstructions = (Self)
/trials = [1-10 = noreplace(selfclickprac900); 11-20 = noreplace(selfclick900)]
</block>

<block countdown500>
/preinstructions = (Countdown)
/trials = [1-10 = noreplace(countdownbeginprac500); 11-20 = noreplace(countdownbegin500)]
</block>

<block countdown900>
/preinstructions = (Countdown)
/trials = [1-10 = noreplace(countdownbeginprac900); 11-20 = noreplace(countdownbegin900)]
</block>

Pardon if I did not explain myself properly before, or I implemented your advice incorrectly.

Many thanks,
Josh

I suppose I don't understand what this means then:

"a proper randomisation of the lists in terms of by time, and then by condition, so that the participant receives both blocks of stimuli presentation times of 500, and then 900 (also randomly presented) before continuing onto the next condition."

Could you give a concrete example, please?

And what does

"Currently, they are experiencing a completely randomised presentation, i.e., the stimulus times aren't being presented one after the other before moving onto the next condition."

mean, particularly " the stimulus times aren't being presented one after the other"? Here, too, please give concrete examples. Thanks.

Hi Dave, 

Sorry for not explaining it clearly. What I meant to say is the participant should see both time intervals of the condition, before advancing to the next condition, i.e.  one participant might see: Baseline 500, Baseline 900, Countdown 900, Countdown 500, Self 900, Self 500, whilst the next participant might see Countdown 500, Countdown 900, Self 500, Self 900, Baseline 900, Baseline 500. What I meant by a 'completely randomised presentation' is that the participant currently experiences the 6 (in total) time by conditions randomly without the pairing of the time intervals, e.g., Baseline 500, Self 900, Countdown 900, Self 500, Baseline 900, Countdown 500.

Many thanks,
Josh
By Dave - 3/21/2017

Psych_Josh - Tuesday, March 21, 2017
Dave - Monday, March 20, 2017
Psych_Josh - Monday, March 20, 2017
Hi Dave,

Sorry to bring up an old topic, but I'm still failing to acquire a proper randomisation of the lists in terms of by time, and then by condition, so that the participant receives both blocks of stimuli presentation times of 500, and then 900 (also randomly presented) before continuing onto the next condition. Currently, they are experiencing a completely randomised presentation, i.e., the stimulus times aren't being presented one after the other before moving onto the next condition.

*********
Block list
*********

<list masterblocklist>
/items = (list.baseline.nextvalue; list.self.nextvalue; list.countdown.nextvalue)
/poolsize = 6
/selectionmode = noreplacenorepeat(1,1,2,2,3,3)
</list>

Conditions:

<list baseline>
/items = (block.baseline500, block.baseline900)
</list>

<list self>
/items = (block.self500, block.self900)
</list>

<list countdown>
/items = (block.countdown500, block.countdown900)
</list>

*********
Blocks
*********

<block baseline500>
/preinstructions = (Baseline)
/trials = [1-10 = noreplace(baselineclickprac500); 11-20 = noreplace(baselineclick500)]
</block>

<block baseline900>
/preinstructions = (Baseline)
/trials = [1-10 = noreplace(baselineclickprac900); 11-20 = noreplace(baselineclick900)]
</block>

<block self500>
/preinstructions = (Self)
/trials = [1-10 = noreplace(selfclickprac500); 11-20 = noreplace(selfclick500)]
</block>

<block self900>
/preinstructions = (Self)
/trials = [1-10 = noreplace(selfclickprac900); 11-20 = noreplace(selfclick900)]
</block>

<block countdown500>
/preinstructions = (Countdown)
/trials = [1-10 = noreplace(countdownbeginprac500); 11-20 = noreplace(countdownbegin500)]
</block>

<block countdown900>
/preinstructions = (Countdown)
/trials = [1-10 = noreplace(countdownbeginprac900); 11-20 = noreplace(countdownbegin900)]
</block>

Pardon if I did not explain myself properly before, or I implemented your advice incorrectly.

Many thanks,
Josh

I suppose I don't understand what this means then:

"a proper randomisation of the lists in terms of by time, and then by condition, so that the participant receives both blocks of stimuli presentation times of 500, and then 900 (also randomly presented) before continuing onto the next condition."

Could you give a concrete example, please?

And what does

"Currently, they are experiencing a completely randomised presentation, i.e., the stimulus times aren't being presented one after the other before moving onto the next condition."

mean, particularly " the stimulus times aren't being presented one after the other"? Here, too, please give concrete examples. Thanks.

Hi Dave, 

Sorry for not explaining it clearly. What I meant to say is the participant should see both time intervals of the condition, before advancing to the next condition, i.e.  one participant might see: Baseline 500, Baseline 900, Countdown 900, Countdown 500, Self 900, Self 500, whilst the next participant might see Countdown 500, Countdown 900, Self 500, Self 900, Baseline 900, Baseline 500. What I meant by a 'completely randomised presentation' is that the participant currently experiences the 6 (in total) time by conditions randomly without the pairing of the time intervals, e.g., Baseline 500, Self 900, Countdown 900, Self 500, Baseline 900, Countdown 500.

Many thanks,
Josh

> What I meant by a 'completely randomised presentation' is that the participant currently experiences the 6 (in total) time by conditions randomly without the
> pairing of the time intervals, e.g., Baseline 500, Self 900, Countdown 900, Self 500, Baseline 900, Countdown 500.

I thought that's what you wanted, and here's why: noreplacenorepeat() only makes sense if you want to *avoid* repetitions, i.e. explicitly *avoid* a block-sequence like Baseline 500 -> Baseline 900 -> .... That's what the code I proposed does (and was supposed to do).

Now it's clear to me that you want the exact opposite, i.e. using noreplacenorepeat does not make any sense whatsoever. Many ways to do this. I'd do something like this:

<list masterblocklist>
/items = (list.baseline.nextvalue; list.self.nextvalue; list.countdown.nextvalue)
/ poolsize = 6
/selectionmode = list.conditionsequence.nextvalue
</list>

// sequence is determined /onexptbegin
<list conditionsequence>
/ selectionmode = sequence
</list>

// three conditions 1 to 3
<list conditions>
/ items = (1,2,3)
/ selectionmode = random
/ replace = false
/ selectionrate = always
</list>

<expt>
/ onexptbegin = [
    list.conditionsequence.appenditem(list.conditions.nextvalue);
    list.conditionsequence.appenditem(list.conditions.currentvalue);
    list.conditionsequence.appenditem(list.conditions.nextvalue);
    list.conditionsequence.appenditem(list.conditions.currentvalue);
    list.conditionsequence.appenditem(list.conditions.nextvalue);
    list.conditionsequence.appenditem(list.conditions.currentvalue);

]
/blocks = [1-6 = list.masterblocklist;]
</expt>

<list baseline>
/items = (block.baseline500, block.baseline900)
</list>

<list self>
/items = (block.self500, block.self900)
</list>

<list countdown>
/items = (block.countdown500, block.countdown900)
</list>

<block baseline500>
/ trials = [1=mytrial]
</block>

<block baseline900>
/ trials = [1=mytrial]
</block>

<block self500>
/ trials = [1=mytrial]
</block>

<block self900>
/ trials = [1=mytrial]
</block>

<block countdown500>
/ trials = [1=mytrial]
</block>

<block countdown900>
/ trials = [1=mytrial]
</block>

<trial mytrial>
/ stimulusframes = [1=mytext]
/ validresponse = (57)
</trial>

<text mytext>
/ items = ("<%script.currentblock%>")
</text>
By Psych_Josh - 3/23/2017

That worked fantastically Dave, many thanks as always!

Josh