changes: 1. values /count1 = 10 /count2 = 10 /count3 = 10 /count4 = 10 /count5 = 10 /count6 = 10 /count7 = 10 /count8 = 10 into values /count1 = 20 /count2 = 20 /count3 = 20 /count4 = 20 /count5 = 20 /count6 = 20 /count7 = 20 /count8 = 20 2. /ontrialend = [if (values.reset == true) { values.sequence = ""; values.index = 0; values.count_comparecat = 0; values.count_compareformat = 0; values.runcount_1 = 0; values.runcount_2 = 0; values.runcount_3 = 0; values.runcount_4 = 0; values.runcount_A = 0; values.runcount_B = 0; values.count1 = 10; values.count2 = 10; values.count3 = 10; values.count4 = 10; values.count5 = 10; values.count6 = 10; values.count7 = 10; values.count8 = 10; list.stimcats.reset() }] into /ontrialend = [if (values.reset == true) { values.sequence = ""; values.index = 0; values.count_comparecat = 0; values.count_compareformat = 0; values.runcount_1 = 0; values.runcount_2 = 0; values.runcount_3 = 0; values.runcount_4 = 0; values.runcount_A = 0; values.runcount_B = 0; values.count1 = 20; values.count2 = 20; values.count3 = 20; values.count4 = 20; values.count5 = 20; values.count6 = 20; values.count7 = 20; values.count8 = 20; list.stimcats.reset() }] 3. list stimcats / items = ( 1,1,1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,3,3, 4,4,4,4,4,4,4,4,4,4, 5,5,5,5,5,5,5,5,5,5, 6,6,6,6,6,6,6,6,6,6, 7,7,7,7,7,7,7,7,7,7, 8,8,8,8,8,8,8,8,8,8) / replace = false into list stimcats / items = ( 1,1,1,1,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,2,2,2,2, 3,3,3,3,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,4,4,4,4, 5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5, 6,6,6,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6,6,6, 7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,7,7, 8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8) / replace = false text the_seq /items = ("<%length(values.sequence)%>:<%values.sequence%>") /size = (90%, 90%) AAT SEQUENCE GENERATOR: helper script (does not run on its own) SCRIPT INFO Script Author: Katja Borchert, Ph.D. (katjab@millisecond.com) for Millisecond Software, LLC last updated: 09-04-2015 by K.Borchert for Millisecond Software LLC Copyright © 09-04-2015 Millisecond Software BACKGROUND INFO *Purpose* This script is a helper script to the AAT scripts. The trial sequence generation code generates a sequence of trials that fulfills the following constraints: 1) 10 stimuli of category 1 in Format A (=1), 10 stimuli of category 1 in Format B (=2), 10 stimuli of category 2 in Format A (=3), 10 stimuli of category 1 in Format B (=4), 10 stimuli of category 3 in Format A (=5), 10 stimuli of category 1 in Format B (=6), 10 stimuli of category 4 in Format A (=7), 10 stimuli of category 1 in Format B (=8), 2) no more than three consecutive stimuli of the same category 3) no more than three consecutive stimuli of the same format the sequences produced look something like this: 86854627681534427238341865316174854225166758252358517483251343227374137614617876 NOTE: !!!! The time to generate the appropriate sequence will differ between participants. Two alternatives are: 1) pregenerated sequences. 2) run the experiment with simple random sampling (without replacement) This trialsequence algorithm is relatively simple and may reach its limits if more conditions/trials are added. In this case, a new algorithm may have to be written or any of the two alternatives has to be used. ************************************************************************************************************** !!!REMAINING CODE: Customize after careful consideration only!!! ************************************************************************************************************** ************************************************************************************************************** ************************************************************************************************************** VALUES ************************************************************************************************************** ************************************************************************************************************** Stimulus sequence generation /count1...count8: contains the number of trials per stimuli type /runcount_1 ...runcount_4: counts how many consecutive stimuli of the same category /runcount_A / runcount_B = 0: counts how many consecutive stimuli of the same format /newnumber : the next potential stimulus digit (1-8) for the sequence /count_comparecat: helper variable: stores the count of the consecutive stimulus category relevant for the selected newnumber /count_compareformat : helper variable: stores the count of the consecutive stimulus format relevant for the selected newnumber /sequence: the stimulus generation sequence /index: current position in a string variable, helper variable to get individual items out of a string of items /reset: 0 = sequence does not have to be reset; 1 = sequence has to be reset /count1 = 20 /count2 = 20 /count3 = 20 /count4 = 20 /count5 = 20 /count6 = 20 /count7 = 20 /count8 = 20 /runcount_1 = 0 /runcount_2 = 0 /runcount_3 = 0 /runcount_4 = 0 /runcount_A = 0 /runcount_B = 0 /newnumber = 0 /count_comparecat = 0 /count_compareformat = 0 /sequence = "" /index = 0 /reset = 0 ************************************************************************************************************** ************************************************************************************************************** STIMULI ************************************************************************************************************** ************************************************************************************************************** /items = ("Please wait; we'll be ready shortly") / fontstyle = ("Arial", 3.00%, false, false, false, false, 5, 0) ************************************************************************************************************** ************************************************************************************************************** LISTS ************************************************************************************************************** ************************************************************************************************************** / items = ( 1,1,1,1,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,2,2,2,2, 3,3,3,3,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,4,4,4,4, 5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5, 6,6,6,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6,6,6, 7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,7,7, 8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8) / replace = false ************************************************************************************************************** ************************************************************************************************************** TRIALS ************************************************************************************************************** ************************************************************************************************************** Trial Selectnumber: selects the newnumber and checks whether all constraints are met - if all constraints are met: adds new number to sequence - constraints are not met: checks whether an alternative number is available that could meet constraint => if yes: returns current number to list and tries again => if no: starts the sequence over / ontrialbegin = [values.newnumber = list.stimcats.nextvalue] / ontrialbegin = [values.index += 1] / ontrialbegin = [ if (values.newnumber == 1) {values.runcount_1 += 1; values.runcount_A += 1; values.count_comparecat = values.runcount_1; values.count_compareformat = values.runcount_A; values.count1 -=1} else if (values.newnumber ==2) {values.runcount_1 += 1; values.runcount_B += 1; values.count_comparecat = values.runcount_1; values.count_compareformat = values.runcount_B; values.count2 -=1} else if (values.newnumber ==3) {values.runcount_2 += 1; values.runcount_A += 1; values.count_comparecat = values.runcount_2; values.count_compareformat = values.runcount_A; values.count3 -= 1} else if (values.newnumber ==4) {values.runcount_2 += 1; values.runcount_B += 1; values.count_comparecat = values.runcount_2; values.count_compareformat = values.runcount_B; values.count4 -=1} else if (values.newnumber ==5) {values.runcount_3 += 1; values.runcount_A += 1; values.count_comparecat = values.runcount_3; values.count_compareformat = values.runcount_A; -= 1} else if (values.newnumber ==6) {values.runcount_3 += 1; values.runcount_B += 1; values.count_comparecat = values.runcount_3; values.count_compareformat = values.runcount_B; values.count6 -= 1} else if (values.newnumber == 7) {values.runcount_4 += 1; values.runcount_A += 1; values.count_comparecat = values.runcount_4; values.count_compareformat = values.runcount_A; values.count7 -= 1} else {values.runcount_4 += 1; values.runcount_B += 1; values.count_comparecat = values.runcount_4; values.count_compareformat = values.runcount_B; values.count8 -= 1}] /ontrialend = [ if (values.count_comparecat < 4 && values.count_compareformat < 4) { values.sequence = concat(values.sequence, values.newnumber); values.reset = false; if (values.newnumber == 1) {values.runcount_2 = 0; values.runcount_3 = 0; values.runcount_4 = 0; values.runcount_B = 0} else if (values.newnumber == 2) {values.runcount_2 = 0; values.runcount_3 = 0; values.runcount_4 = 0; values.runcount_A = 0} else if (values.newnumber == 3) {values.runcount_1 = 0; values.runcount_3 = 0; values.runcount_4 = 0; values.runcount_B = 0} else if (values.newnumber == 4) {values.runcount_1 = 0; values.runcount_3 = 0; values.runcount_4 = 0; values.runcount_A = 0} else if (values.newnumber == 5) {values.runcount_2 = 0; values.runcount_1 = 0; values.runcount_4 = 0; values.runcount_B = 0} else if (values.newnumber == 6) {values.runcount_2 = 0; values.runcount_1 = 0; values.runcount_4 = 0; values.runcount_A = 0} else if (values.newnumber == 7) {values.runcount_2 = 0; values.runcount_3 = 0; values.runcount_1 = 0; values.runcount_B = 0} else if (values.newnumber == 8) {values.runcount_2 = 0; values.runcount_3 = 0; values.runcount_1 = 0; values.runcount_A = 0}; }; if (values.count_comparecat > 3 && values.count_compareformat < 4) { if (values.newnumber == 1) { if (values.count3 !=0 || values.count4 != 0 || values.count5 != 0 || values.count6 !=0 || values.count7 != 0 || values.count8 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(1, 1); values.runcount_1 -= 1; values.runcount_A -= 1; values.count1 += 1; } else { values.reset = true } } else if (values.newnumber == 2) { if (values.count3 !=0 || values.count4 != 0 || values.count5 != 0 || values.count6 !=0 || values.count7 != 0 || values.count8 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(2, 1); values.runcount_1 -= 1; values.runcount_B -= 1; values.count2 += 1; } else { values.reset = true } } else if (values.newnumber == 3) { if (values.count1 !=0 || values.count2 != 0 || values.count5 != 0 || values.count6 !=0 || values.count7 != 0 || values.count8 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(3, 1); values.runcount_2 -= 1; values.runcount_A -= 1; values.count3 += 1; } else { values.reset = true; } } else if (values.newnumber == 4) { if (values.count1 !=0 || values.count2 != 0 || values.count5 != 0 || values.count6 !=0 || values.count7 != 0 || values.count8 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(4, 1); values.runcount_2 -= 1; values.runcount_B -= 1; values.count4 += 1; } else { values.reset = true } } else if (values.newnumber == 5) { if (values.count1 !=0 || values.count2 != 0 || values.count3 != 0 || values.count4 !=0 || values.count7 != 0 || values.count8 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(5, 1); values.runcount_3 -= 1; values.runcount_A -= 1; values.count5 += 1; } else { values.reset = true; } } else if (values.newnumber == 6) { if (values.count1 !=0 || values.count2 != 0 || values.count3 != 0 || values.count4 !=0 || values.count7 != 0 || values.count8 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(6, 1); values.runcount_3 -= 1; values.runcount_B -= 1; values.count6 += 1; } else { values.reset = true } } else if (values.newnumber == 7) { if (values.count1 !=0 || values.count2 != 0 || values.count3 != 0 || values.count4 !=0 || values.count5 != 0 || values.count6 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(7, 1); values.runcount_4 -= 1; values.runcount_A -= 1; values.count7 += 1; } else { values.reset = true; } } else if (values.newnumber == 8) { if (values.count1 !=0 || values.count2 != 0 || values.count3 != 0 || values.count4 !=0 || values.count5 != 0 || values.count6 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(8, 1); values.runcount_4 -= 1; values.runcount_B -= 1; values.count8 += 1; } else { values.reset = true } } }; if (values.count_comparecat < 4 && values.count_compareformat > 3) { if (values.newnumber == 1) { if (values.count2 !=0 || values.count4 != 0 || values.count6 !=0 || values.count8 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(1, 1); values.runcount_1 -= 1; values.runcount_A -= 1; values.count1 += 1; } else { values.reset = true } } else if (values.newnumber == 2) { if (values.count1 !=0 || values.count3 != 0 || values.count5 != 0 || values.count7 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(2, 1); values.runcount_1 -= 1; values.runcount_B -= 1; values.count2 += 1; } else { values.reset = true } } else if (values.newnumber == 3) { if (values.count2 !=0 || values.count4 != 0 || values.count6 !=0 || values.count8 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(3, 1); values.runcount_2 -= 1; values.runcount_A -= 1; values.count3 += 1; } else { values.reset = true; } } else if (values.newnumber == 4) { if (values.count1 !=0 || values.count3 != 0 || values.count5 != 0 || values.count7 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(4, 1); values.runcount_2 -= 1; values.runcount_B -= 1; values.count4 += 1; } else { values.reset = true } } else if (values.newnumber == 5) { if (values.count2 !=0 || values.count4 != 0 || values.count6 !=0 || values.count8 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(5, 1); values.runcount_3 -= 1; values.runcount_A -= 1; values.count5 += 1; } else { values.reset = true; } } else if (values.newnumber == 6) { if (values.count1 !=0 || values.count3 != 0 || values.count5 != 0 || values.count7 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(6, 1); values.runcount_3 -= 1; values.runcount_B -= 1; values.count6 += 1; } else { values.reset = true } } else if (values.newnumber == 7) { if (values.count2 !=0 || values.count4 != 0 || values.count6 !=0 || values.count8 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(7, 1); values.runcount_4 -= 1; values.runcount_A -= 1; values.count7 += 1; } else { values.reset = true; } } else if (values.newnumber == 8) { if (values.count1 !=0 || values.count3 != 0 || values.count5 != 0 || values.count7 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(8, 1); values.runcount_4 -= 1; values.runcount_B -= 1; values.count8 += 1; } else { values.reset = true } } }; if (values.count_comparecat > 3 && values.count_compareformat > 3) { if (values.newnumber == 1) { if (values.count4 != 0 || values.count6 !=0 || values.count8 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(1, 1); values.runcount_1 -= 1; values.runcount_A -= 1; values.count1 += 1; } else { values.reset = true } } else if (values.newnumber == 2) { if (values.count3 != 0 || values.count5 != 0 || values.count7 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(2, 1); values.runcount_1 -= 1; values.runcount_B -= 1; values.count2 += 1; } else { values.reset = true } } else if (values.newnumber == 3) { if (values.count2 !=0 || values.count6 !=0 || values.count8 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(3, 1); values.runcount_2 -= 1; values.runcount_A -= 1; values.count3 += 1; } else { values.reset = true; } } else if (values.newnumber == 4) { if (values.count1 !=0 || values.count5 != 0 || values.count7 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(4, 1); values.runcount_2 -= 1; values.runcount_B -= 1; values.count4 += 1; } else { values.reset = true } } else if (values.newnumber == 5) { if (values.count2 !=0 || values.count4 != 0 || values.count8 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(5, 1); values.runcount_3 -= 1; values.runcount_A -= 1; values.count5 += 1; } else { values.reset = true; } } else if (values.newnumber == 6) { if (values.count1 !=0 || values.count3 != 0 || values.count7 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(6, 1); values.runcount_3 -= 1; values.runcount_B -= 1; values.count6 += 1; } else { values.reset = true } } else if (values.newnumber == 7) { if (values.count2 !=0 || values.count4 != 0 || values.count6 !=0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(7, 1); values.runcount_4 -= 1; values.runcount_A -= 1; values.count7 += 1; } else { values.reset = true; } } else if (values.newnumber == 8) { if (values.count1 !=0 || values.count3 != 0 || values.count5 != 0) { values.reset = false; values.index -= 1; list.stimcats.insertitem(8, 1); values.runcount_4 -= 1; values.runcount_B -= 1; values.count8 += 1; } else { values.reset = true } } }] /ontrialend = [if (values.reset == true) { values.sequence = ""; values.index = 0; values.count_comparecat = 0; values.count_compareformat = 0; values.runcount_1 = 0; values.runcount_2 = 0; values.runcount_3 = 0; values.runcount_4 = 0; values.runcount_A = 0; values.runcount_B = 0; values.count1 = 20; values.count2 = 20; values.count3 = 20; values.count4 = 20; values.count5 = 20; values.count6 = 20; values.count7 = 20; values.count8 = 20; list.stimcats.reset() }] /branch = [if (values.index != values.totaltrialcount) trial.selectnumber] /timeout = 0 /recorddata = false ************************************************************************************************************** ************************************************************************************************************** BLOCK ************************************************************************************************************** ************************************************************************************************************** / bgstim = (wait) / trials = [1 = selectnumber] / recorddata = false /stimulusframes = [1=the_seq] /inputdevice = keyboard /validresponse = (57) /items = ("<%length(values.sequence)%>:<%values.sequence%>") /size = (90%, 90%) ************************************************************************************************************** End of File **************************************************************************************************************