Example script: Difference between revisions
From SpinozaWiki
Created page with "function Shocker_7T % 24 reps with block duration 10 is 490 seconds total - 245 vols % 12 reps with block 10 is 250s Reps = 24;%12 loop counter BlockDuration = 10;%void 10 A..." |
No edit summary |
||
Line 1: | Line 1: | ||
function Shocker_7T | function Shocker_7T | ||
% 24 reps with block duration 10 is 490 seconds total - 245 vols | % 24 reps with block duration 10 is 490 seconds total - 245 vols | ||
% 12 reps with block 10 is 250s | % 12 reps with block 10 is 250s | ||
Reps = 24;%12 loop counter | Reps = 24;%12 loop counter | ||
BlockDuration = 10;%void 10 | BlockDuration = 10;%void 10 | ||
AssertOpenGL; | AssertOpenGL; | ||
% Here we call some default settings for setting up Psychtoolbox | % Here we call some default settings for setting up Psychtoolbox | ||
PsychDefaultSetup(2); | PsychDefaultSetup(2); | ||
% Get the screen numbers. This gives us a number for each of the screens | % Get the screen numbers. This gives us a number for each of the screens | ||
% attached to our computer. | % attached to our computer. | ||
screens = Screen('Screens'); | screens = Screen('Screens'); | ||
Screen('Preference', 'SkipSyncTests', 3); | Screen('Preference', 'SkipSyncTests', 3); | ||
% To draw we select the maximum of these numbers. So in a situation where we | % To draw we select the maximum of these numbers. So in a situation where we | ||
% have two screens attached to our monitor we will draw to the external | % have two screens attached to our monitor we will draw to the external | ||
% screen. | % screen. | ||
screenNumber = min(screens); | screenNumber = min(screens); | ||
screenNumber = 1; | screenNumber = 1; | ||
% Define black and white (white will be 1 and black 0). This is because | % Define black and white (white will be 1 and black 0). This is because | ||
% in general luminace values are defined between 0 and 1 with 255 steps in | % in general luminace values are defined between 0 and 1 with 255 steps in | ||
% between. All values in Psychtoolbox are defined between 0 and 1 | % between. All values in Psychtoolbox are defined between 0 and 1 | ||
white = WhiteIndex(screenNumber); | white = WhiteIndex(screenNumber); | ||
black = BlackIndex(screenNumber); | black = BlackIndex(screenNumber); | ||
[width,height] = WindowSize(screenNumber); | [width,height] = WindowSize(screenNumber); | ||
colorText = [0,255,0,155]; | colorText = [0,255,0,155]; | ||
% Open an on screen window and color it black | % Open an on screen window and color it black | ||
[window, windowRect] = PsychImaging('OpenWindow', screenNumber, black); | [window, windowRect] = PsychImaging('OpenWindow', screenNumber, black); | ||
% Get the size of the on screen window in pixels | % Get the size of the on screen window in pixels | ||
Line 50: | Line 50: | ||
end | end | ||
address = hex2dec('AFE8'); %check address device manager, ports (COM &LP), LPT1 resources 1st entry | address = hex2dec('AFE8'); %check address device manager, ports (COM &LP), LPT1 resources 1st entry orange | ||
try | try | ||
w=Screen('OpenWindow', screenNumber); | |||
Screen('FillRect', w,[0,0,0,0]); | |||
Screen('TextFont',w, 'Courier New'); | |||
Screen('TextSize',w, 80); Screen('TextStyle',w, 1); | |||
DrawFormattedText(w, '+', 'center', 'center',[0,255,0,155], [], 0); | |||
Screen('Flip',w); | |||
% add here the duration if overall length not right | |||
KbTriggerWait(KbName('t'),-3)%-3 makes sure the Forb box is caught | |||
getStart = GetSecs; | |||
pause(BlockDuration); %extra rest block at start | |||
for loopNums = 1:Reps | |||
BlockStart = GetSecs; | |||
Screen('FillRect', w, [0,0,0,0]); | |||
DrawFormattedText (w, '+', 'center', 'center', [0,255,0,155], [], 0); | |||
Screen('Flip',w); | |||
while GetSecs-BlockStart<BlockDuration | |||
%send trig to shock | |||
disp(GetSecs-BlockStart) | |||
byte = 0; | |||
outp(address,byte); | |||
byte = 255; | |||
outp(address,byte); | |||
pause(0.1) | |||
end | |||
BlockStart = GetSecs; | |||
Screen('FillRect', w, [0,0,0,0]); | |||
DrawFormattedText(w, '+', 'center', 'center', [0,255,0,155], [], 0); | |||
Screen('Flip',w); | |||
pause(BlockDuration); | |||
end | |||
catch | catch | ||
% This "catch" section executes in case of an error in the "try" section | |||
% above. Importantly, it closes the onscreen window if it's open. | |||
Screen('CloseAll'); | |||
psychrethrow(psychlasterror); | |||
end | end | ||
getEnd = GetSecs; | getEnd = GetSecs; | ||
% Clear the screen. | % Clear the screen. | ||
Screen('CloseAll'); | Screen('CloseAll'); | ||
sca; | sca; | ||
disp(['Duration was :' num2str(getEnd-getStart)]); | disp(['Duration was :' num2str(getEnd-getStart)]); | ||
end | end |
Latest revision as of 17:14, 10 December 2021
function Shocker_7T
% 24 reps with block duration 10 is 490 seconds total - 245 vols % 12 reps with block 10 is 250s
Reps = 24;%12 loop counter BlockDuration = 10;%void 10 AssertOpenGL;
% Here we call some default settings for setting up Psychtoolbox PsychDefaultSetup(2);
% Get the screen numbers. This gives us a number for each of the screens % attached to our computer. screens = Screen('Screens'); Screen('Preference', 'SkipSyncTests', 3);
% To draw we select the maximum of these numbers. So in a situation where we % have two screens attached to our monitor we will draw to the external % screen. screenNumber = min(screens); screenNumber = 1;
% Define black and white (white will be 1 and black 0). This is because % in general luminace values are defined between 0 and 1 with 255 steps in % between. All values in Psychtoolbox are defined between 0 and 1 white = WhiteIndex(screenNumber); black = BlackIndex(screenNumber); [width,height] = WindowSize(screenNumber); colorText = [0,255,0,155];
% Open an on screen window and color it black [window, windowRect] = PsychImaging('OpenWindow', screenNumber, black);
% Get the size of the on screen window in pixels % For help see: Screen WindowSize? [screenXpixels, screenYpixels] = Screen('WindowSize', window);
% Get the centre coordinate of the window in pixels % For help see: help RectCenter [xCenter, yCenter] = RectCenter(windowRect);
addpath('./MATLAB_port-IO'); % initialize access to the inpoutx64 low-level I/O driver config_io; % optional step: verify that the inpoutx64 driver was successfully initialized global cogent; if( cogent.io.status ~= 0 )
error('inp/outp installation failed');
end
address = hex2dec('AFE8'); %check address device manager, ports (COM &LP), LPT1 resources 1st entry orange
try
w=Screen('OpenWindow', screenNumber); Screen('FillRect', w,[0,0,0,0]); Screen('TextFont',w, 'Courier New'); Screen('TextSize',w, 80); Screen('TextStyle',w, 1); DrawFormattedText(w, '+', 'center', 'center',[0,255,0,155], [], 0); Screen('Flip',w); % add here the duration if overall length not right KbTriggerWait(KbName('t'),-3)%-3 makes sure the Forb box is caught getStart = GetSecs; pause(BlockDuration); %extra rest block at start for loopNums = 1:Reps BlockStart = GetSecs; Screen('FillRect', w, [0,0,0,0]); DrawFormattedText (w, '+', 'center', 'center', [0,255,0,155], [], 0); Screen('Flip',w); while GetSecs-BlockStart<BlockDuration %send trig to shock disp(GetSecs-BlockStart) byte = 0; outp(address,byte); byte = 255; outp(address,byte); pause(0.1) end BlockStart = GetSecs; Screen('FillRect', w, [0,0,0,0]); DrawFormattedText(w, '+', 'center', 'center', [0,255,0,155], [], 0); Screen('Flip',w); pause(BlockDuration); end catch % This "catch" section executes in case of an error in the "try" section % above. Importantly, it closes the onscreen window if it's open. Screen('CloseAll'); psychrethrow(psychlasterror); end
getEnd = GetSecs;
% Clear the screen. Screen('CloseAll'); sca;
disp(['Duration was :' num2str(getEnd-getStart)]);
end