Hi,
I am wondering if it is possible to randomise the selection from two linked lists when presenting in trials with set conditions on the randomisation.
For example I am trying to randomise selection from the trial type list and digit sequence list each time it is run. However, there must be an 80/20 ratio of trial types presented and no two same digits can be presented in a row. I have tried the below code, however I am unsure if the reset function is correct or in the right place, secondly the creation of a new digit list is not that effective. How could this be resolved?
Any suggestions on how to improve this would be greatly appreciated.
Thank you.
Note: list of practice trialtypes
<list practice_trialtype>
/items = (trial.practice_go, trial.practice_go, trial.practice_go, trial.practice_go, trial.practice_go, trial.practice_go, trial.practice_go, trial.practice_go,
trial.practice_nogo, trial.practice_nogo)
/replace = true
/poolsize = 24
</list>
Note: list of digits used for practice
<list practice_digitsequence>
/items = (1,2,3,4,5,6,7,8,9)
/poolsize = 24
</list>
<trial practice_go>
/pretrialpause = values.iti
/ontrialbegin = [
values.trialtype = "Go";
values.digit = list.practice_digitsequence.nextvalue;
values.digitLastChosen = list.practice_digitsequence.currentvalue;
values.digit_new = list.practice_digitsequence.removeitem(values.digitLastChosen);
values.digit_new = list.practice_digitsequence.nextvalue;
list.practice_digitsequence.resetselection(values.digit);
values.fontsize = list.practice_fontsizes.nextvalue;
trial.practice_go.insertstimulustime(text.mask, values.digitpresentationtime);
trial.practice_go.insertstimulustime(shape.background, (values.digitpresentationtime + values.maskpresentationtime));
]
/ ontrialend = [
trial.practice_go.resetstimulusframes();
]
/stimulustimes = [0 = background, digit]
/responsetime = 0
/responseinterrupt = frames
/monkeyresponse = (57)
/iscorrectresponse = [trial.practice_go.response == 0]
/trialduration = values.digitpresentationtime + values.maskpresentationtime
/ontrialend = [
if (trial.practice_go.response == 0)
values.RT = trial.practice_go.latency
else {
values.RT = "";
values.latencytype = 0;
};
if (values.RT != "" && values.RT < values.anticipatoryresponsetime) {
values.latencytype = 1;
};
if (values.RT != "" && values.RT >= values.anticipatoryresponsetime && values.RT < values.validresponsetime) {
values.latencytype = 2;
};
if (values.RT != "" && values.RT >= values.validresponsetime) {
values.latencytype = 3;
};
if (values.RT == "") {
values.responsetype = "Omission";
};
if (values.RT != "" && values.RT < values.anticipatoryresponsetime) {
values.responsetype = "Go Anticipatory";
};
if (values.RT >= values.anticipatoryresponsetime && values.RT < values.validresponsetime)
values.responsetype = "Go Ambiguous";
if (values.RT >= values.validresponsetime) {
values.responsetype = "Go Success";
};
]
/recorddata = true
/branch = [if (trial.practice_go.error) trial.feedbackerror]
/branch = [if (trial.practice_go.correct) trial.feedbackcorrect]
</trial>
<trial practice_nogo>
/pretrialpause = values.iti
/ontrialbegin = [
values.trialtype = "NoGo";
values.digitnogo = list.practice_digitsequence.nextvalue;
values.digitLastChosen = list.practice_digitsequence.currentvalue;
values.digitnogo_new = list.practice_digitsequence.removeitem(values.digitLastChosen)
values.digitnogo_new = list.practice_digitsequence.nextvalue;
list.practice_digitsequence.resetselection(values.digitnogo);
values.fontsize = list.practice_fontsizes.nextvalue;
if (mod(values.digitnogo, 2) == 0) {
values.even = true;
values.correctresponsekey = values.responsekey2;
}
else {
values.even = false;
values.correctresponsekey = values.responsekey1;
}
trial.practice_nogo.insertstimulustime(text.mask, values.digitpresentationtime);
trial.practice_nogo.insertstimulustime(shape.background, (values.digitpresentationtime + values.maskpresentationtime));
]
/ontrialend = [
trial.practice_nogo.resetstimulusframes();
]
/stimulustimes = [0 = background, digitnogo]
/responsetime = 0
/responseinterrupt = frames
/monkeyresponse = (57,0)
/iscorrectresponse = [trial.practice_nogo.response == values.correctresponsekey]
/trialduration = values.digitpresentationtime + values.maskpresentationtime
/ontrialend = [
if (trial.practice_nogo.response == values.correctresponsekey)
values.RT = trial.practice_nogo.latency
else {
values.RT = "";
values.latencytype = 0;
};
if (values.RT != "" && values.RT < values.anticipatoryresponsetime) {
values.latencytype = 1;
};
if (values.RT != "" && values.RT >= values.anticipatoryresponsetime && values.RT < values.validresponsetime) {
values.latencytype = 2;
};
if (values.RT != "" && values.RT >= values.validresponsetime) {
values.latencytype = 3;
};
if (values.RT == "") {
values.responsetype = "NoGo Success";
} else {
values.responsetype = "NoGo Failure";
};
]
/recorddata = true
/branch = [if (trial.practice_nogo.error) trial.feedbackerror]
/branch = [if (trial.practice_nogo.correct) trial.feedbackcorrect]
</trial>