+x+xHello,
I have two questions about adapting the joystick AAT script.
- I need to change the number of trials, and configurations of the trials. I have not been able to figure out how to do this – I am guessing it should be in the SequenceGenerator script, but not sure if anything should also be changed in the main AAT script. The way it is in the script from Milisecond, there are 80 trials (4 categories of images x 2 formats (landscape/portrait) x 10 repetitions). I need to adapt it to be 480 trials (broken into two parts, where the first part is: 2 categories of images x 12 images x 2 formats (landscape/portrait) x 20 repetitions, second part: 2 categories of images x 8 images x 2 formats (landscape/portrait) x 20 repetitions). Of note is that I will also have breaks for participants every 96 trials.
- I need to change the percentage of time that the images are in landscape/portrait (one experimental group will be instructed to pull images towards themselves 90% of the time, and pushing 10%, the other experimental group will be instructed 50/50 pull and push). However, I do not see where I can alter the proportions for “targetformat” which is how landscape/portrait is coded in the script. Perhaps this is because it is “Format A” and “Format B” in the SequenceGenerator script?
Thank you very much as always for any help!
You need to adjust the amount of trials in the <block> elements as well.
<block AAT>
/ preinstructions = (taskinstructions)
/ onblockbegin = [values.index = 0]
/ trials = [
1-80 = AAT_start]
</block>
Instead of trying to adapt the random sequence generator, I would recommend constructing suitable sequences by hand and having the script use those (see e.g.
https://www.millisecond.com/forums/Topic11145.aspx ).
As noted elsewhere in the script, format A is landscape orientation, format B is portrait orientation. For the numerical codes pertaining to category and format, see the comments at the top of the sequence generation script:
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
Hi Dave,
Thank you for your help with this. I have been attempting to address this from your comments as well as prior threads' comments, but my script doesn't seem to be loading properly as I have to do control B to get past the first (blank) page. If you are able to provide me with any feedback as to where I went wrong, that would be greatly appreciated. I've reduced the number of trials in my experiment's methods since previously posting and here is what I am trying to achieve now. I have a feeling it relates to
"
values.index" but I have had trouble following how to modify it correctly.
Thank you so very much in advance.
2 Parts of my experiment to be run sequentially: Part 1: 2 categories of ("untrained") images x 8 images x 2 formats (landscape/portrait - same for all participants, not randomizing who sees which format) x 6 repetitions = 192 trials
Part 2: 2 categories of ("trained") images x 12 images x 2 formats x 6 repetitions = 288 trials
There will be instructions telling participants to take a break every 96 trials.
Here's what I have modified in the AAT script template:<trial AAT_1untrained>
/ ontrialbegin = [
values.selectstimulus = list.category1.nextvalue;
values.targetcategory = 1;
values.targetformat = "l";
picture.targetstimulus.height = values.startheight_A;
values.starttime = script.elapsedtime;
values.endtime = 0;
values.completeRT = 0;
values.changedirection = 0;
values.finalresponse="";
]
/ stimulusframes = [1 = targetstimulus]
/ validresponse = (back, forward)
/ iscorrectresponse = [(values.expcondition == 1 && trial.AAT_1untrained.response == "forward") || (values.expcondition == 2 && trial.AAT_1untrained.response == "back")]
/ ontrialend = [
values.joystick_y = joystick.y;
values.joystick_change = abs(values.joystick_y);
values.trialcode = "AAT_1untrained";
values.RT = trial.AAT_1untrained.latency;
values.correct = trial.AAT_1untrained.correct;
values.stimulus = picture.targetstimulus.currentitem;
if (trial.AAT_1untrained.response == "forward")
values.initialresponse = "PUSH"
else
values.initialresponse = "PULL";
list.accuracy_overall.insertitem(trial.AAT_1untrained.correct,1);
if (trial.AAT_1untrained.correct) {
list.AAT_1untrainedcorrectlatencies.insertitem(trial.AAT_1untrained.latency, 1);
list.latencies_overall.insertitem(trial.AAT_1untrained.latency, 1);
}
]
/ branch = [
if (trial.AAT_1untrained.response == "forward")
trial.decrease
else
trial.increase;
]
/ recorddata = false
</trial>
<trial AAT_2untrained>
/ ontrialbegin = [
values.selectstimulus = list.category2.nextvalue;
values.targetcategory = 1;
values.targetformat = "p";
picture.targetstimulus.height = values.startheight_B;
values.starttime = script.elapsedtime;
values.endtime = 0;
values.completeRT = 0;
values.changedirection = 0;
values.finalresponse="";
]
/ stimulusframes = [1 = targetstimulus]
/ validresponse = (back, forward)
/ iscorrectresponse = [(values.expcondition == 1 && trial.AAT_2untrained.response == "back") || (values.expcondition == 2 && trial.AAT_2untrained.response == "forward")]
/ ontrialend = [
values.joystick_y = joystick.y;
values.joystick_change = abs(values.joystick_y);
values.trialcode = "AAT_2untrained";
values.RT = trial.AAT_2untrained.latency;
values.correct = trial.AAT_2untrained.correct;
values.stimulus = picture.targetstimulus.currentitem;
if (trial.AAT_2untrained.response == "forward")
values.initialresponse = "PUSH"
else
values.initialresponse = "PULL";
list.accuracy_overall.insertitem(trial.AAT_2untrained.correct,1);
if (trial.AAT_2untrained.correct) {
list.AAT_2untrainedcorrectlatencies.insertitem(trial.AAT_2untrained.latency, 1);
list.latencies_overall.insertitem(trial.AAT_2untrained.latency, 1);
}
]
/ branch = [
if (trial.AAT_2untrained.response == "forward")
trial.decrease
else
trial.increase
]
/ recorddata = false
</trial>
<trial AAT_1trained>
/ ontrialbegin = [
values.selectstimulus = list.category2.nextvalue;
values.targetcategory = 1;
values.targetformat = "p";
picture.targetstimulus.height = values.startheight_B;
values.starttime = script.elapsedtime;
values.endtime = 0;
values.completeRT = 0;
values.changedirection = 0;
values.finalresponse="";
]
/ stimulusframes = [1 = targetstimulus]
/ validresponse = (back, forward)
/ iscorrectresponse = [(values.expcondition == 1 && trial.AAT_1trained.response == "back") || (values.expcondition == 2 && trial.AAT_1trained.response == "forward")]
/ ontrialend = [
values.joystick_y = joystick.y;
values.joystick_change = abs(values.joystick_y);
values.trialcode = "AAT_1trained";
values.RT = trial.AAT_1trained.latency;
values.correct = trial.AAT_1trained.correct;
values.stimulus = picture.targetstimulus.currentitem;
if (trial.AAT_1trained.response == "forward")
values.initialresponse = "PUSH"
else
values.initialresponse = "PULL";
list.accuracy_overall.insertitem(trial.AAT_1trained.correct,1);
if (trial.AAT_1trained.correct) {
list.AAT_1trainedcorrectlatencies.insertitem(trial.AAT_1trained.latency, 1);
list.latencies_overall.insertitem(trial.AAT_1trained.latency, 1);
}
]
/ branch = [
if (trial.AAT_1trained.response == "forward")
trial.decrease
else
trial.increase
]
/ recorddata = false
</trial>
<trial AAT_2trained>
/ ontrialbegin = [
values.selectstimulus = list.category2.nextvalue;
values.targetcategory = 1;
values.targetformat = "p";
picture.targetstimulus.height = values.startheight_B;
values.starttime = script.elapsedtime;
values.endtime = 0;
values.completeRT = 0;
values.changedirection = 0;
values.finalresponse="";
]
/ stimulusframes = [1 = targetstimulus]
/ validresponse = (back, forward)
/ iscorrectresponse = [(values.expcondition == 1 && trial.AAT_2trained.response == "back") || (values.expcondition == 2 && trial.AAT_2trained.response == "forward")]
/ ontrialend = [
values.joystick_y = joystick.y;
values.joystick_change = abs(values.joystick_y);
values.trialcode = "AAT_2trained";
values.RT = trial.AAT_2trained.latency;
values.correct = trial.AAT_2trained.correct;
values.stimulus = picture.targetstimulus.currentitem;
if (trial.AAT_2trained.response == "forward")
values.initialresponse = "PUSH"
else
values.initialresponse = "PULL";
list.accuracy_overall.insertitem(trial.AAT_2trained.correct,1);
if (trial.AAT_2trained.correct) {
list.AAT_2trainedcorrectlatencies.insertitem(trial.AAT_2trained.latency, 1);
list.latencies_overall.insertitem(trial.AAT_2trained.latency, 1);
}
]
/ branch = [
if (trial.AAT_2trained.response == "forward")
trial.decrease
else
trial.increase
]
/ recorddata = false
</trial>
<trial AAT_3trained>
/ ontrialbegin = [
values.selectstimulus = list.category2.nextvalue;
values.targetcategory = 1;
values.targetformat = "p";
picture.targetstimulus.height = values.startheight_B;
values.starttime = script.elapsedtime;
values.endtime = 0;
values.completeRT = 0;
values.changedirection = 0;
values.finalresponse="";
]
/ stimulusframes = [1 = targetstimulus]
/ validresponse = (back, forward)
/ iscorrectresponse = [(values.expcondition == 1 && trial.AAT_3trained.response == "back") || (values.expcondition == 2 && trial.AAT_3trained.response == "forward")]
/ ontrialend = [
values.joystick_y = joystick.y;
values.joystick_change = abs(values.joystick_y);
values.trialcode = "AAT_3trained";
values.RT = trial.AAT_3trained.latency;
values.correct = trial.AAT_3trained.correct;
values.stimulus = picture.targetstimulus.currentitem;
if (trial.AAT_3trained.response == "forward")
values.initialresponse = "PUSH"
else
values.initialresponse = "PULL";
list.accuracy_overall.insertitem(trial.AAT_3trained.correct,1);
if (trial.AAT_3trained.correct) {
list.AAT_3trainedcorrectlatencies.insertitem(trial.AAT_3trained.latency, 1);
list.latencies_overall.insertitem(trial.AAT_3trained.latency, 1);
}
]
/ branch = [
if (trial.AAT_3trained.response == "forward")
trial.decrease
else
trial.increase
]
/ recorddata = false
</trial>
**************************************************************************************************************
**************************************************************************************************************
BLOCKS
**************************************************************************************************************
**************************************************************************************************************
NOTE:
block.practice_AAT presents 10 practice trials randomly (without replacement) selecting
from format A (landscape) (N=5) and format B (portrait) stimuli (N=5)
<block practice_AAT>
/ trials = [1-2 = instructions; 3-12 = noreplace(practicetrial_A, practicetrial_B)]
</block>
Note:
The trial sequence is generated by helper script 'AAT_SequenceGenerator.iqx'
!!!! The time to generate the appropriate sequence will differ between participants.
Two alternatives are:
1) use pregenerated sequences.
2) run the experiment with simple random sampling (easiest solution)
-> / trials = [1 = instructions; 2-81 = noreplace(AAT_1, AAT_2)]
<block assessment1_AAT>
/ onblockbegin = [values.index = 0]
/ trials = [1 = instructions; 2-97 = AAT_1untrained; 98 = instructions2; 99-194 = AAT_2untrained]
</block>
<block assessment2_AAT>
/ onblockbegin = [values.index = 0]
/ trials = [1 = instructions; 2-97 = AAT_1trained; 98 = instructions2; 99-194 = AAT_2trained; 195 = instructions2; 196-292 = AAT_3trained]
</block>
**************************************************************************************************************
**************************************************************************************************************
BREAKS
**************************************************************************************************************
**************************************************************************************************************
<text instructions2>
/ items = instructions2
/ select = sequence
/ position = (50%, 50%)
/ fontstyle = ("Arial", 3%, false, false, false, false, 5, 0)
/ txcolor = black
/ resetinterval = 3
/ size = (80%, 80%)
</text>
<item instructions2>
/ 1 = "PLEASE TAKE A FEW MOMENTS TO TAKE A BREAK DURING THE SESSION.
^^
Press press any key on the keyboard when you are ready to continue."
</item>
<trial instructions2>
/ stimulusframes = [1 = instructions2]
/ validresponse = ("anyresponse")
</trial>
**************************************************************************************************************
**************************************************************************************************************
EXPERIMENT
**************************************************************************************************************
**************************************************************************************************************
NOTE:
<expt>
/ subjects = (1 of 1)
/ groupassignment = groupnumber
/ onexptbegin = [
values.expcondition = 1;
values.format1 = "PORTRAIT";
values.format2 = "LANDSCAPE";
values.startheight_A = parameters.Startheight_ratioA*values.Maxheight_px;
values.startheight_B = parameters.Startheight_ratioB* values.Maxheight_px;
]
/ blocks = [
1 = SequenceGenerator;
2 = practice_AAT;
3 = assessment1_AAT;
4 = assessment2_AAT
]
/ postinstructions = (End)
/ onexptend = [values.completed = 1]
</expt>
**********************************************************************************
Relevant parts I have changed in sequence generator:
<list stimcats>
/ items = (
1,1,1,1,1,1,
1,1,1,1,1,1,
2,2,2,2,2,2,
2,2,2,2,2,2,
3,3,3,3,3,3,3,
3,3,3,3,3,
4,4,4,4,4,4,4,4,
4,4,4,4,
5,5,5,5,5,5,5,5,
6,6,6,6,6,6,6,6,
7,7,7,7,7,7,7,7,
8,8,8,8,8,8,8,8)
/ replace = false
</list>
I have left all "values" at 0 even though I am wondering if they need to be increased from 80 to be right for 480 trials. Also wondering if the following is mandatory as I don't have a reason to have participants see this screen:
<text wait>
/items = ("Please wait; we'll be ready shortly")
/ fontstyle = ("Arial", 3.00%, false, false, false, false, 5, 0)
</text>