Post by charkwok on Jan 29, 2024 2:18:40 GMT
I am coding a 2-back task with reference to the one provided by the psytoolkit experiment library. I want to ensure that among the 55 trials of the nback_real1 block, exactly 15 of them are correct, matching, 2-back trials. May I know how to do so?
Below is my code
options
bitmapdir stimuli
set &stimulus_display_time 500 # stimulus presentation
set &iti 2500 # intertrial interval
set &choosechance 3 # 1 in "choosechance" are matching. The higher the number, the fewer matches
fonts
arial 18
bitmaps
letterA ## 15 letters
letterB
letterC
letterD
letterE
letterH
letterI
letterK
letterL
letterM
letterO
letterP
letterR
letterS
letterT
overlay
error_feedback
correct_feedback
grey_feedback
instruction1
instruction2
realblock1
realblock2
part check_response1
if $requiredresponse == 0 and STATUS == TIMEOUT
set $score 1 ## so far so good
fi
if $requiredresponse == 0 and STATUS != TIMEOUT
set $score 0 ## wrongly pressed during letter presentation.
set $false_alarm 1
fi
if $requiredresponse == 1 and STATUS != TIMEOUT
set $score 1 ## correctly pressed during letter presentation.
set $match 1
fi
task twoback
keys m
set &trialcount increase
set $currentletter random 1 15 ## choose random letter out of the 15 options
##
set $memory random 1 &choosechance ## random number for choosing condition
##
if $memory == 1 and &trialcount > 2
set $currentletter &nback2
set $requiredresponse 1 ## the m key needs to be pressed later, m=stands for Memory
set $typeoftrial 1
fi
##
if $memory != 1 or &trialcount <= 2 ## chose a letter but not that of 3 trials ago
set $currentletter random 1 15
while $currentletter == &nback2 ## choose anything but NOT that of 3 back
set $currentletter random 1 15
while-end
set $requiredresponse 0 ## no key should be pressed
set $typeoftrial 0
fi
##
draw off
show bitmap $currentletter ## stimulus 1
draw on
readkey 1 &stimulus_display_time
set $extrawait expression &stimulus_display_time - RT
##
set $score 0 ## this is the default, assume error
part check_response1
##
set $my_rt RT
##
delay $extrawait
clear 1
##
if STATUS == TIMEOUT ## means people did not respond yet
readkey 1 &iti
set $my_rt expression RT + &stimulus_display_time
fi
part check_response1
set $extrawait expression &iti - RT
##
if $requiredresponse == 1 and $score == 0
set $miss 1
fi
delay $extrawait
##
set &nback2 &nback1
set &nback1 $currentletter
##
save BLOCKNUMBER &trialcount $typeoftrial $score $match $miss $false_alarm $my_rt $memory $currentletter &nback1 &nback2
block nback_real1
set &trialcount 0 # make sure you use this again if you have another block
message realblock1
tasklist
twoback 55
end
Below is my code
options
bitmapdir stimuli
set &stimulus_display_time 500 # stimulus presentation
set &iti 2500 # intertrial interval
set &choosechance 3 # 1 in "choosechance" are matching. The higher the number, the fewer matches
fonts
arial 18
bitmaps
letterA ## 15 letters
letterB
letterC
letterD
letterE
letterH
letterI
letterK
letterL
letterM
letterO
letterP
letterR
letterS
letterT
overlay
error_feedback
correct_feedback
grey_feedback
instruction1
instruction2
realblock1
realblock2
part check_response1
if $requiredresponse == 0 and STATUS == TIMEOUT
set $score 1 ## so far so good
fi
if $requiredresponse == 0 and STATUS != TIMEOUT
set $score 0 ## wrongly pressed during letter presentation.
set $false_alarm 1
fi
if $requiredresponse == 1 and STATUS != TIMEOUT
set $score 1 ## correctly pressed during letter presentation.
set $match 1
fi
task twoback
keys m
set &trialcount increase
set $currentletter random 1 15 ## choose random letter out of the 15 options
##
set $memory random 1 &choosechance ## random number for choosing condition
##
if $memory == 1 and &trialcount > 2
set $currentletter &nback2
set $requiredresponse 1 ## the m key needs to be pressed later, m=stands for Memory
set $typeoftrial 1
fi
##
if $memory != 1 or &trialcount <= 2 ## chose a letter but not that of 3 trials ago
set $currentletter random 1 15
while $currentletter == &nback2 ## choose anything but NOT that of 3 back
set $currentletter random 1 15
while-end
set $requiredresponse 0 ## no key should be pressed
set $typeoftrial 0
fi
##
draw off
show bitmap $currentletter ## stimulus 1
draw on
readkey 1 &stimulus_display_time
set $extrawait expression &stimulus_display_time - RT
##
set $score 0 ## this is the default, assume error
part check_response1
##
set $my_rt RT
##
delay $extrawait
clear 1
##
if STATUS == TIMEOUT ## means people did not respond yet
readkey 1 &iti
set $my_rt expression RT + &stimulus_display_time
fi
part check_response1
set $extrawait expression &iti - RT
##
if $requiredresponse == 1 and $score == 0
set $miss 1
fi
delay $extrawait
##
set &nback2 &nback1
set &nback1 $currentletter
##
save BLOCKNUMBER &trialcount $typeoftrial $score $match $miss $false_alarm $my_rt $memory $currentletter &nback1 &nback2
block nback_real1
set &trialcount 0 # make sure you use this again if you have another block
message realblock1
tasklist
twoback 55
end