My question is a little more complicated than the subject line suggests. I am using a modified version of the alcohol dot probe task to assess attentional bias in drug use. I have multiple blocks in my experiment and within each block are target trials and filler trials. For each block I want to randomly display 120 trials and I want 80 of the trials to be target trials and 40 of the trials to be filler trials. Currently, my programming is causing me to have 60 target trials and 60 filler trials. I have tried specifying the poolsize in my lists but this has not made any difference. What do I need to include to have 80 target trials and 40 filler trials displayed in a random order?
I have included the relevant sections of code below. Thanks.
********************************************
Drug lists
********************************************
Note: the following list contains the 4 repetitions of the 20 itemnumber of the DrugTarget stimuli
the list randomly selects one itemnumber (without replacement) for Drug trials
(the same itemnumbers are used for comp stimuli)
<list DrugTarget_itemnumbers>
/ items = (
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)
/ replace = false
/ poolsize = 80
/ resetinterval = 1
</list>
Note: the following list samples the left (1) or right (2) position of the DrugTarget stimuli
that is tied to the sampled itemnumber (by its list position index)
=> each item number is presented twice on the left and twice on the right)
<list DrugTarget_positions>
/ items = (
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
/ selectionmode = list.DrugTarget_itemnumbers.currentindex
</list>
Note: the following list samples the DrugTarget and probe congruence that is tied to the sampled itemnumber (by its list position index)
=> each itemnumber is presented once left and is followed by the probe (congruent = 1)
=> each itemnumber is presented once left is is not followed by the probe (incongruent = 2)
=> each itemnumber is presented once right and is followed by the probe (congruent = 1)
=> each itemnumber is presented once right is is not followed by the probe (incongruent = 2)
<list DrugTargetprobe_congruence>
/ 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, 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)
/ selectionmode = list.DrugTarget_itemnumbers.currentindex
</list>
<list Drugprobetype>
/ items = (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
/ selectionmode = list.Drugtargetprobe_congruence.currentindex
</list>
********************************************
FillerTarget lists
********************************************
Note: the following list contains the 2 repetitions of the 20 itemnumber of the FillerTarget stimuli
the list randomly selects one itemnumber (without replacement) for Filler trials
<list FillerTarget_itemnumbers>
/ items = (
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)
/ replace = false
/ poolsize = 40
/ resetinterval = 1
</list>
Note: the following list samples the left (1) or right (2) position of the FillerTarget stimuli
that is tied to the sampled itemnumber (by its list position index)
=> each item number is presented twice on the left and twice on the right
<list FillerTarget_positions>
/ 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)
/ selectionmode = list.FillerTarget_itemnumbers.currentindex
</list>
Note: the following list samples the FillerTarget probe congruence that is tied to the sampled itemnumber (by its list position index)
<list FillerTargetprobe_congruence>
/ items = (
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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
/ selectionmode = list.FillerTarget_itemnumbers.currentindex
</list>
<list fillerprobetype>
/ items = (
1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1)
/ selectionmode = list.fillertargetprobe_congruence.currentindex
</list>
****************************************
CONDITION 3
****************************************
<trial DrugLong>
/ ontrialbegin = [
values.valid = 0;
values.validcorrect = 0;
values.trialcount += 1;
values.category="DrugLong";
values.itemnumber = list.DrugTarget_itemnumbers.nextvalue;
values.target_position = list.DrugTarget_positions.nextvalue;
values.congruence = list.DrugTargetprobe_congruence.nextvalue;
values.probetype = list.drugprobetype.nextvalue;
if (values.target_position == 1) {
values.target_y = parameters.target_top_y;
values.comp_y = parameters.target_bottom_y;
} else {
values.target_y = parameters.target_bottom_y;
values.comp_y = parameters.target_top_y;
};
if (values.congruence == 1) {
values.probe_y = values.target_y;
values.count_congruent_Drug += 1;
} else {
values.probe_y = values.comp_y;
values.count_incongruent_Drug += 1;
};
trial.DrugLong.insertstimulustime(shape.eraser, parameters.fixationduration);
trial.DrugLong.insertstimulustime(picture.DrugTarget, parameters.fixationduration);
trial.DrugLong.insertstimulustime(picture.DrugComp, parameters.fixationduration);
trial.DrugLong.insertstimulustime(shape.eraser, (parameters.fixationduration + parameters.targetduration2));
trial.DrugLong.insertstimulustime(text.probe, (parameters.fixationduration + parameters.targetduration2 + parameters.tp_isi));
]
/ stimulusframes = [1 = fixation]
/ beginresponsetime = parameters.fixationduration + parameters.targetduration2 + parameters.tp_isi
/ responseinterrupt = immediate
/ validresponse = (parameters.responsekey_left, parameters.responsekey_right)
/ iscorrectresponse = [(values.probetype == 1 && trial.DrugLong.response == parameters.responsekey_left) || (values.probetype == 2 && trial.DrugLong.response == parameters.responsekey_right)]
/ ontrialend = [
trial.DrugLong.resetstimulusframes();
values.target_image = picture.DrugTarget.currentitem;
values.comp_image = picture.DrugComp.currentitem;
if (trial.DrugLong.latency >= parameters.minimum_latency)
values.valid = 1;
if (values.valid == 1) {
if (trial.DrugLong.correct) {
values.validcorrect = 1;
values.sumcorrect += 1;
values.sumrt += trial.DrugLong.latency
if (values.congruence == 1) {
values.sumcorrect_congruent_Drug += 1;
values.sumrt_congruent_Drug += trial.DrugLong.latency;
list.latencies_Drg_C.insertitem(trial.DrugLong.latency, 1);
list.latencies.insertitem(trial.DrugLong.latency, 1);
} else {
values.sumcorrect_incongruent_Drug += 1;
values.sumrt_incongruent_Drug += trial.DrugLong.latency;
list.latencies_Drg_IC.insertitem(trial.DrugLong.latency, 1);
list.latencies.insertitem(trial.DrugLong.latency, 1);
}
}
} ;
list.accuracy.insertitem(values.validcorrect, 1);
if (values.congruence == 1) {
list.accuracy_Drg_C.insertitem(values.validcorrect, 1);
} else {
list.accuracy_Drg_IC.insertitem(values.validcorrect, 1);
};
]
/ timeout = (parameters.fixationduration + parameters.targetduration2 + parameters.tp_isi + parameters.probeduration)
/ posttrialpause = parameters.iti
</trial>
<trial FillerDrugLong>
/ ontrialbegin = [
values.valid = 0;
values.validcorrect = 0;
values.trialcount += 1;
values.category="FillerDrugLong";
values.itemnumber = list.FillerTarget_itemnumbers.nextvalue;
values.target_position = list.FillerTarget_positions.nextvalue;
values.congruence = list.FillerTargetprobe_congruence.nextvalue;
values.probetype = list.fillerprobetype.nextvalue;
if (values.target_position == 1) {
values.target_y = parameters.target_top_y;
values.comp_y = parameters.target_bottom_y;
} else {
values.target_y = parameters.target_bottom_y;
values.comp_y = parameters.target_top_y;
};
if (values.congruence == 1) {
values.probe_y = values.target_y;
values.count_congruent_Filler += 1;
} else {
values.probe_y = values.comp_y;
values.count_incongruent_Filler += 1;
};
trial.fillerDrugLong.insertstimulustime(shape.eraser, parameters.fixationduration);
trial.fillerDrugLong.insertstimulustime(picture.FillerDrugTarget, parameters.fixationduration);
trial.fillerDrugLong.insertstimulustime(picture.FillerDrugComp, parameters.fixationduration);
trial.fillerDrugLong.insertstimulustime(shape.eraser, (parameters.fixationduration + parameters.targetduration2));
trial.fillerDrugLong.insertstimulustime(text.probe, (parameters.fixationduration + parameters.targetduration2 + parameters.tp_isi));
]
/ stimulusframes = [1 = fixation]
/ beginresponsetime = parameters.fixationduration + parameters.targetduration2 + parameters.tp_isi
/ responseinterrupt = immediate
/ validresponse = (parameters.responsekey_left, parameters.responsekey_right)
/ iscorrectresponse = [(values.probetype == 1 && trial.fillerDrugLong.response == parameters.responsekey_left) || (values.probetype == 2 && trial.fillerDrugLong.response == parameters.responsekey_right)]
/ ontrialend = [
trial.fillerDrugLong.resetstimulusframes();
values.target_image = picture.FillerDrugTarget.currentitem;
values.comp_image = picture.FillerDrugComp.currentitem;
if (trial.fillerDrugLong.latency >= parameters.minimum_latency)
values.valid = 1;
if (values.valid == 1) {
if (trial.fillerDrugLong.correct) {
values.validcorrect = 1;
values.sumcorrect += 1;
values.sumrt += trial.fillerDrugLong.latency
if (values.congruence == 1) {
values.sumcorrect_congruent_Filler += 1;
values.sumrt_congruent_Filler += trial.fillerDrugLong.latency;
list.latencies_Filler_C.insertitem(trial.fillerDrugLong.latency, 1);
list.latencies.insertitem(trial.fillerDrugLong.latency, 1);
} else {
values.sumcorrect_incongruent_Filler += 1;
values.sumrt_incongruent_Filler += trial.fillerDrugLong.latency;
list.latencies_Filler_IC.insertitem(trial.fillerDrugLong.latency, 1);
list.latencies.insertitem(trial.fillerDrugLong.latency, 1);
}
}
} ;
list.accuracy.insertitem(values.validcorrect, 1);
if (values.congruence == 1) {
list.accuracy_Filler_C.insertitem(values.validcorrect, 1);
} else {
list.accuracy_Filler_IC.insertitem(values.validcorrect, 1);
};
]
/ timeout = (parameters.fixationduration + parameters.targetduration2 + parameters.tp_isi + parameters.probeduration)
/ posttrialpause = parameters.iti
</trial>
****************************************
BLOCKS
****************************************
Note: presents 120 trials (trial order is determined randomly)
<block DrugDotProbeTask_Short>
/ preinstructions = (taskintro)
/ postinstructions = (break)
/ onblockbegin = [values.task = 2]
/ trials = [1-120 = noreplace(DrugShort, FillerDrugShort)]
</block>
Note: presents 120 trials (trial order is determined randomly)
<block DrugDotProbeTask_Long>
/ preinstructions = (taskintro)
/ postinstructions = (break)
/ onblockbegin = [values.task = 3]
/ trials = [1-120 = noreplace(DrugLong, FillerDrugLong)]
</block>
****************************************
EXPERIMENT
****************************************
<expt>
/ preinstructions = (welcome, instructions, instructions2)
/ postinstructions = (thankyou)
/ blocks = [1=noreplace(Practice); 2-3=noreplace(DrugDotProbeTask_Short, DrugDotProbeTask_Long)]
/ onexptend = [values.completed = 1]
</expt>
****************************************
End of File
****************************************