Dear all,
Currently I have an experiment that shows 8 stimuli on the screen per trial and that counterbalances for 16 different groups, however, the way it is programmed has a lot of redundancy: for every different stimulus list a different trial is created, (and also for every different block order a different block type is created, but this is less relevant). I was wondering if there might be an easy way to create a variable 'stimulus_list_name' and set this variable to a different value for each subject, this way I can keep the structure of the trials exactly the same but change the stimulus list per subject. Any suggestions would be welcome,
Roelof
A coarse way of how it is structured here (full experiment is attached, without additional stimuli pictures):
#weighted hpos list for target:
<list hposition_list_set8_1>
/items =(50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,28.79,20.01,28.791,71.21,80.0,71.211,50.01,28.79,20.01,28.791,71.21,80.0,71.211,50.01,28.79,20.01,28.791,71.21,80.0,71.211,50.01,28.79,20.01,28.791,71.21,80.0,71.211,50.01,28.79,20.01,28.791,71.21,80.0,71.211,50.01,28.79,20.01,28.791,71.21,80.0,71.211,50.01)
/selectionrate = always
</list>
<list hposition_list_set8_2>
/items =(71.21,71.21,71.21,71.21,71.21,71.21,71.21,71.21,71.21,71.21,71.21,71.21,71.21,71.21,71.21,71.21,71.21,71.21,28.79,20.01,28.791,50.0,80.0,71.211,50.01,28.79,20.01,28.791,50.0,80.0,71.211,50.01,28.79,20.01,28.791,50.0,80.0,71.211,50.01,28.79,20.01,28.791,50.0,80.0,71.211,50.01,28.79,20.01,28.791,50.0,80.0,71.211,50.01,28.79,20.01,28.791,50.0,80.0,71.211,50.01)
/selectionrate = always
</list>
<list hposition_list_set8_3>
/items =(80.0,80.0,80.0,80.0,80.0,80.0,80.0,80.0,80.0,80.0,80.0,80.0,80.0,80.0,80.0,80.0,80.0,80.0,28.79,20.01,28.791,50.0,71.21,71.211,50.01,28.79,20.01,28.791,50.0,71.21,71.211,50.01,28.79,20.01,28.791,50.0,71.21,71.211,50.01,28.79,20.01,28.791,50.0,71.21,71.211,50.01,28.79,20.01,28.791,50.0,71.21,71.211,50.01,28.79,20.01,28.791,50.0,71.21,71.211,50.01)
/selectionrate = always
</list>
etc, up to 8 lists, 1 per stimulus location
#-----------------#TRIAL TYPES:: -------------------------------------------------
LOC1_LOC1_LOC1_LOC1_LOC1_LOC1_LOC1_LOC1_LOC1_LOC1
<trial set8_target_diamond_dis_form_loc1>
/ontrialbegin = [values.listnumber = 1; values.hpos1 = list.hposition_list_set8_1.nextvalue;
values.vpos1 = list.vposition_list_set8_1.nextvalue;
values.distractor_position_random = floor(rand(1,8));
values.filler_position1 = list.hpos_filler.nextvalue; values.filler_position1_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position2 = list.hpos_filler.nextvalue; values.filler_position2_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position3 = list.hpos_filler.nextvalue; values.filler_position3_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position4 = list.hpos_filler.nextvalue; values.filler_position4_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position5 = list.hpos_filler.nextvalue;values.filler_position5_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position6 = list.hpos_filler.nextvalue;values.filler_position6_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position7 = list.hpos_filler.nextvalue;values.filler_position7_v = list.vposition_list_set8_filler.nextvalue]
/ontrialbegin = [values.line_ori_target = floor(rand(1,3)); values.line_ori_filler1 = floor(rand(1,5)); values.line_ori_filler2 = floor(rand(1,5)); values.line_ori_filler3 = floor(rand(1,5));values.line_ori_filler4 = floor(rand(1,5)); values.line_ori_filler5 = floor(rand(1,5)); values.line_ori_filler6 = floor(rand(1,5)); values.line_ori_filler7 = floor(rand(1,5))]
/ontrialbegin = [if(values.line_ori_target==1)values.correct_response=(44) else values.correct_response =(50)]
/stimulusframes = [1=target_shape, horizontal_line1, vertical_line1,filler_1, filler_2, filler_3, filler_4, filler_5, filler_6, filler_7, filler_8, distractor_1, horizontal_line_slanted_up_left1, horizontal_line_slanted_up_right1, vertical_line_slanted_left1, vertical_line_slanted_right1,vertical_line_slanted_right2,vertical_line_slanted_left2,horizontal_line_slanted_up_left2,horizontal_line_slanted_up_right2,vertical_line_slanted_right3,vertical_line_slanted_left3,horizontal_line_slanted_up_left3,horizontal_line_slanted_up_right3,vertical_line_slanted_right4,vertical_line_slanted_left4,horizontal_line_slanted_up_left4,horizontal_line_slanted_up_right4,vertical_line_slanted_right5,vertical_line_slanted_left5,horizontal_line_slanted_up_left5,horizontal_line_slanted_up_right5,vertical_line_slanted_right6,vertical_line_slanted_left6,horizontal_line_slanted_up_left6,horizontal_line_slanted_up_right6, vertical_line_slanted_right7,vertical_line_slanted_left7,horizontal_line_slanted_up_left7,horizontal_line_slanted_up_right7,vertical_line_slanted_right8,vertical_line_slanted_left8,horizontal_line_slanted_up_left8,horizontal_line_slanted_up_right8,cover_picture]
/validresponse = ("z","m")
/iscorrectresponse = [trial.set8_target_diamond_dis_form_loc1.response == values.correct_response]
/timeout = values.time_out
/posttrialpause = values.post_trial_pause
/pretrialpause = floor(rand(values.jitter_low,values.jitter_high))
/ontrialend= [list.vposition_list_set8_filler.reset();]
/ontrialend= [list.hpos_filler.reset();]
</trial>
<trial set8_target_diamond_no_dis_form_loc1>
/ontrialbegin = [values.listnumber = 1; values.hpos1 = list.hposition_list_set8_1.nextvalue;
values.vpos1 = list.vposition_list_set8_1.nextvalue;
values.filler_position1 = list.hpos_filler.nextvalue; values.filler_position1_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position2 = list.hpos_filler.nextvalue; values.filler_position2_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position3 = list.hpos_filler.nextvalue; values.filler_position3_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position4 = list.hpos_filler.nextvalue; values.filler_position4_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position5 = list.hpos_filler.nextvalue;values.filler_position5_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position6 = list.hpos_filler.nextvalue;values.filler_position6_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position7 = list.hpos_filler.nextvalue;values.filler_position7_v = list.vposition_list_set8_filler.nextvalue]
/ontrialbegin = [values.line_ori_target = floor(rand(1,3)); values.line_ori_filler1 = floor(rand(1,5)); values.line_ori_filler2 = floor(rand(1,5)); values.line_ori_filler3 = floor(rand(1,5));values.line_ori_filler4 = floor(rand(1,5)); values.line_ori_filler5 = floor(rand(1,5)); values.line_ori_filler6 = floor(rand(1,5)); values.line_ori_filler7 = floor(rand(1,5))]
/ontrialbegin = [if(values.line_ori_target==1)values.correct_response=(44) else values.correct_response =(50)]
/stimulusframes = [1=target_shape, horizontal_line1, vertical_line1,filler_1 , filler_2, filler_3, filler_4, filler_5, filler_6, filler_7, filler_8, distractor_1, horizontal_line_slanted_up_left1, horizontal_line_slanted_up_right1, vertical_line_slanted_left1, vertical_line_slanted_right1,vertical_line_slanted_right2,vertical_line_slanted_left2,horizontal_line_slanted_up_left2,horizontal_line_slanted_up_right2,vertical_line_slanted_right3,vertical_line_slanted_left3,horizontal_line_slanted_up_left3,horizontal_line_slanted_up_right3,vertical_line_slanted_right4,vertical_line_slanted_left4,horizontal_line_slanted_up_left4,horizontal_line_slanted_up_right4,vertical_line_slanted_right5,vertical_line_slanted_left5,horizontal_line_slanted_up_left5,horizontal_line_slanted_up_right5,vertical_line_slanted_right6,vertical_line_slanted_left6,horizontal_line_slanted_up_left6,horizontal_line_slanted_up_right6, vertical_line_slanted_right7,vertical_line_slanted_left7,horizontal_line_slanted_up_left7,horizontal_line_slanted_up_right7,vertical_line_slanted_right8,vertical_line_slanted_left8,horizontal_line_slanted_up_left8,horizontal_line_slanted_up_right8,cover_picture, sometext]
/validresponse = ("z","m")
/iscorrectresponse = [trial.set8_target_diamond_no_dis_form_loc1.response == values.correct_response]
/timeout = values.time_out
/posttrialpause = values.post_trial_pause
/pretrialpause = floor(rand(values.jitter_low,values.jitter_high))
/ontrialend= [list.vposition_list_set8_filler.reset();]
/ontrialend= [list.hpos_filler.reset();]
</trial>
LOC2_LOC2_LOC2_LOC2_LOC2_LOC2_LOC2_LOC2_LOC2_LOC2_LOC2_LOC2_
<trial set8_target_diamond_dis_form_loc2>
/ontrialbegin = [values.listnumber = 1; values.hpos1 = list.hposition_list_set8_2.nextvalue;
values.vpos1 = list.vposition_list_set8_2.nextvalue;
values.distractor_position_random = floor(rand(1,8));
values.filler_position1 = list.hpos_filler.nextvalue; values.filler_position1_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position2 = list.hpos_filler.nextvalue; values.filler_position2_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position3 = list.hpos_filler.nextvalue; values.filler_position3_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position4 = list.hpos_filler.nextvalue; values.filler_position4_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position5 = list.hpos_filler.nextvalue;values.filler_position5_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position6 = list.hpos_filler.nextvalue;values.filler_position6_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position7 = list.hpos_filler.nextvalue;values.filler_position7_v = list.vposition_list_set8_filler.nextvalue]
/ontrialbegin = [values.line_ori_target = floor(rand(1,3)); values.line_ori_filler1 = floor(rand(1,5)); values.line_ori_filler2 = floor(rand(1,5)); values.line_ori_filler3 = floor(rand(1,5));values.line_ori_filler4 = floor(rand(1,5)); values.line_ori_filler5 = floor(rand(1,5)); values.line_ori_filler6 = floor(rand(1,5)); values.line_ori_filler7 = floor(rand(1,5))]
/ontrialbegin = [if(values.line_ori_target==1)values.correct_response=(44) else values.correct_response =(50)]
/stimulusframes = [1=target_shape, horizontal_line1, vertical_line1,filler_1, filler_2, filler_3, filler_4, filler_5, filler_6, filler_7, filler_8, distractor_1, horizontal_line_slanted_up_left1, horizontal_line_slanted_up_right1, vertical_line_slanted_left1, vertical_line_slanted_right1,vertical_line_slanted_right2,vertical_line_slanted_left2,horizontal_line_slanted_up_left2,horizontal_line_slanted_up_right2,vertical_line_slanted_right3,vertical_line_slanted_left3,horizontal_line_slanted_up_left3,horizontal_line_slanted_up_right3,vertical_line_slanted_right4,vertical_line_slanted_left4,horizontal_line_slanted_up_left4,horizontal_line_slanted_up_right4,vertical_line_slanted_right5,vertical_line_slanted_left5,horizontal_line_slanted_up_left5,horizontal_line_slanted_up_right5,vertical_line_slanted_right6,vertical_line_slanted_left6,horizontal_line_slanted_up_left6,horizontal_line_slanted_up_right6, vertical_line_slanted_right7,vertical_line_slanted_left7,horizontal_line_slanted_up_left7,horizontal_line_slanted_up_right7,vertical_line_slanted_right8,vertical_line_slanted_left8,horizontal_line_slanted_up_left8,horizontal_line_slanted_up_right8,cover_picture]
/validresponse = ("z","m")
/iscorrectresponse = [trial.set8_target_diamond_dis_form_loc2.response == values.correct_response]
/timeout = values.time_out
/posttrialpause = values.post_trial_pause
/pretrialpause = floor(rand(values.jitter_low,values.jitter_high))
/ontrialend= [list.vposition_list_set8_filler.reset();]
/ontrialend= [list.hpos_filler.reset();]
</trial>
<trial set8_target_diamond_no_dis_form_loc2>
/ontrialbegin = [values.listnumber = 1; values.hpos1 = list.hposition_list_set8_2.nextvalue;
values.vpos1 = list.vposition_list_set8_2.nextvalue;
values.filler_position1 = list.hpos_filler.nextvalue; values.filler_position1_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position2 = list.hpos_filler.nextvalue; values.filler_position2_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position3 = list.hpos_filler.nextvalue; values.filler_position3_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position4 = list.hpos_filler.nextvalue; values.filler_position4_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position5 = list.hpos_filler.nextvalue;values.filler_position5_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position6 = list.hpos_filler.nextvalue;values.filler_position6_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position7 = list.hpos_filler.nextvalue;values.filler_position7_v = list.vposition_list_set8_filler.nextvalue]
/ontrialbegin = [values.line_ori_target = floor(rand(1,3)); values.line_ori_filler1 = floor(rand(1,5)); values.line_ori_filler2 = floor(rand(1,5)); values.line_ori_filler3 = floor(rand(1,5));values.line_ori_filler4 = floor(rand(1,5)); values.line_ori_filler5 = floor(rand(1,5)); values.line_ori_filler6 = floor(rand(1,5)); values.line_ori_filler7 = floor(rand(1,5))]
/ontrialbegin = [if(values.line_ori_target==1)values.correct_response=(44) else values.correct_response =(50)]
/stimulusframes = [1=target_shape, horizontal_line1, vertical_line1,filler_1 , filler_2, filler_3, filler_4, filler_5, filler_6, filler_7, filler_8, distractor_1, horizontal_line_slanted_up_left1, horizontal_line_slanted_up_right1, vertical_line_slanted_left1, vertical_line_slanted_right1,vertical_line_slanted_right2,vertical_line_slanted_left2,horizontal_line_slanted_up_left2,horizontal_line_slanted_up_right2,vertical_line_slanted_right3,vertical_line_slanted_left3,horizontal_line_slanted_up_left3,horizontal_line_slanted_up_right3,vertical_line_slanted_right4,vertical_line_slanted_left4,horizontal_line_slanted_up_left4,horizontal_line_slanted_up_right4,vertical_line_slanted_right5,vertical_line_slanted_left5,horizontal_line_slanted_up_left5,horizontal_line_slanted_up_right5,vertical_line_slanted_right6,vertical_line_slanted_left6,horizontal_line_slanted_up_left6,horizontal_line_slanted_up_right6, vertical_line_slanted_right7,vertical_line_slanted_left7,horizontal_line_slanted_up_left7,horizontal_line_slanted_up_right7,vertical_line_slanted_right8,vertical_line_slanted_left8,horizontal_line_slanted_up_left8,horizontal_line_slanted_up_right8,cover_picture, sometext]
/validresponse = ("z","m")
/iscorrectresponse = [trial.set8_target_diamond_no_dis_form_loc2.response == values.correct_response]
/timeout = values.time_out
/posttrialpause = values.post_trial_pause
/pretrialpause = floor(rand(values.jitter_low,values.jitter_high))
/ontrialend= [list.vposition_list_set8_filler.reset();]
/ontrialend= [list.hpos_filler.reset();]
</trial>
LOC3_LOC3_LOC3_LOC3_LOC3_LOC3_LOC3_LOC3_LOC3_LOC3_LOC3_LOC3_LOC3_
trial set8_target_diamond_dis_form_loc3>
etc
etc
#blocks::::::::::::::
#LOC_1__#LOC_1__#LOC_1__#LOC_1__#LOC_1__
<block dis1>
/bgstim = (reminder_text_2, reminder_text, fix_cross_picture)
/preinstructions = (reminder_instructions)
/trials= [1-120=noreplace(set8_target_diamond_dis_form_loc1)]
/blockfeedback = (latency, correct)
/screencolor = black
</block>
<block no_dis1>
/bgstim = (reminder_text_2, reminder_text, fix_cross_picture)
/preinstructions = (reminder_instructions)
/trials= [1-120=noreplace(set8_target_diamond_no_dis_form_loc1)]
/blockfeedback = (latency, correct)
/screencolor = black
</block>
etc
######## execution of the experiment::::::::::::::::::::::::
#subjects starting WITH distractor
LOCATION 1LOCATION 1LOCATION 1LOCATION 1
<expt>
/ subjects = (1 of 16)
/ preinstructions = (intro,intro_2, intro_3)
/ postinstructions = (end_of_experiment)
/ blocks = [1= begin_questions, practice, dis1, no_dis1, dis1, no_dis1, end_questions, code]
</expt>
<expt>
/ subjects = (2 of 16)
/ preinstructions = (intro,intro_2, intro_3)
/ postinstructions = (end_of_experiment)
/ blocks = [1= begin_questions, practice, no_dis1, dis1, no_dis1, dis1, end_questions, code]
</expt>
LOCATION 2LOCATION 2LOCATION 2LOCATION 2
333 -- 44444444
<expt>
/ subjects = (3 of 16)
/ preinstructions = (intro,intro_2, intro_3)
/ postinstructions = (end_of_experiment)
/ blocks = [1= begin_questions, practice, no_dis2, dis2, no_dis2, dis2, end_questions code]
</expt>
<expt>
/ subjects = (4 of 16)
/ preinstructions = (intro,intro_2, intro_3)
/ postinstructions = (end_of_experiment)
/ blocks = [1= begin_questions, practice, no_dis2, dis2, no_dis2, dis2, end_questions code]
</expt>
LOCATION 3
ETC
ETC