diff --git a/.DS_Store b/.DS_Store index 2b331a8..3caebda 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.gitignore b/.gitignore index ba254c0..4d09ad0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ /A\ Outputs/ -.DS_STORE/ +.DS_STORE diff --git a/002 After Image GUI Project/.DS_Store b/002 After Image GUI Project/.DS_Store index 1fc19a6..251b033 100644 Binary files a/002 After Image GUI Project/.DS_Store and b/002 After Image GUI Project/.DS_Store differ diff --git a/002 After Image GUI Project/AfIm_Exp_Rivalry.m b/002 After Image GUI Project/AfIm_Exp_Rivalry.m index d261a66..11049ac 100755 --- a/002 After Image GUI Project/AfIm_Exp_Rivalry.m +++ b/002 After Image GUI Project/AfIm_Exp_Rivalry.m @@ -1,548 +1,535 @@ function AfIm_Exp_Rivalry(subName,meanLum,Bckg_Chro,axis_chck,AdaptTime,nRep,Simu_chck) try -assignin('base','Stop_Press',0)% this works for the STOP experiment button - -% Check that Psychtoolbox is properly installed, switch to unified KbName's -% across operating systems, and switch color range to normalized 0 - 1 range: -PsychDefaultSetup(2); - -saveFile = sprintf('%s_afterimage', subName) -aa = cd('/Users/clemente/Desktop/AfterImage Programs/A Outputs'); - -fp = fopen(saveFile, 'at'); - -%% Color information, load hfp data and color calibration - -aa = cd('/Users/clemente/Desktop/AfterImage Programs/A Outputs'); -hfpFile = sprintf('%sHFP', subName); -load(hfpFile, '-mat') -hfpRG = rg_avg; -hfpBG = bg_avg; - - - -% cd(a); % return to program folder. -Calib_Dire = cd('/Users/clemente/Desktop/AfterImage Programs/002 After Image GUI Project'); -load colorCalFile1.mat -fprintf('\nLast calibration was %s\n', describe.date) -pix = pix/1001; - - -cd(aa) ;% output folder -aa = cd('/Users/clemente/Desktop/AfterImage Programs/A Outputs'); -% aa = cd('D:\Dropbox\Luminotecnia\2017\Chicago Lab files\2 Experiments\Color AfterImage_Exp_Room_150\2nd\1 Programs\A Outputs') -% maxLum = 20; %cd/m^2 - -contFile = sprintf('%s_ContMatch', subName); -cd -load(contFile, '-mat') - -% % % % lCont = fliplr(Final_lCont_avg);% sort the matrix in descendent order -% % % % lumMod = fliplr(Final_lumMod_avg); -% % % % -% % % % sCont = [.8 .65 .5 .35]; -% % % % nCont = 4; - -% lCont = Final_lCont_avg(:,4:5); -% lumMod = Final_lumMod_avg(:,4:5); -% sCont = [.5 .65 -% .5 .65 -% .5 .65 -% .5 .65]; -% -% nCont = 2; - -% lCont = Final_lCont_avg(3:6); -% lumMod = Final_lumMod_avg(3:6); -% sCont = [.5 .65 -% .5 .65 -% .5 .65 -% .5 .65]; -% sCont = Final_sCont_ref; - -lCont = Final_lCont_avg; -lumMod = Final_lumMod_avg; -sCont = Final_sCont_ref; - -nCont = size(sCont,2); -nBckg_Chro = size(Bckg_Chro,1); - -% white = [.665 1]; -blackLut = [0 0 0]; -redLut = [.8 0 0]; - -% Bckg_Chro = Final_lCont_avg(:,1:2) - -%% Save Session Information - -theDate = datestr(now(),'mm/dd/yyyy HH:MM:SS') -% a = '/Users/clemente/Dropbox/Luminotecnia/2018/Experiments/Color Background Afterimage/1 Programs/4 ColBackg AI' ;% folder where the program is. -infoFile = sprintf('%s_SessionsInfo', subName) - -aa = cd('/Users/clemente/Desktop/AfterImage Programs/A Outputs'); ;% folder where the program is. - - checkfile = exist(infoFile, 'file') - fo = fopen(infoFile, 'at') -if checkfile == 0 % if file doesn't exist, then print the following header: - fprintf(fo,'Subject\t Date\t Time\t Lum\t nBckg_Chro\t nCont\t nRep\t l_\t s_\t lum_\t ls45\t ls135\t luml45\t luml135\t lums45\t luml135\n') -end - -% fo = fopen(infoFile, 'at') -fprintf(fo, '%s\t%s\t %1.2f\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n',... - subName, theDate, meanLum, nBckg_Chro, nCont, nRep, axis_chck); -% % % % fprintf(fo, '%s\t%i/%i/%i %i:%i:%i\t %1.2f\t%1.3f\t%1.3f\t%i\n',... -% % % % subName, theDate(2), theDate(3), theDate(1), theDate(4), theDate(5), round(theDate(6)),... -% % % % maxLum, white(1),white(2), nRep)%,curr_cond(1),curr_cond(2),... -% % % % % % curr_cond(3),curr_cond(4) ,curr_cond(5),curr_cond(6),... -% % % % % % curr_cond(7),curr_cond(8),curr_cond(9)); - -fclose(fo) - -%% set up psych toolbox -%set up 10 bit color -PsychImaging('PrepareConfiguration'); -%PsychImaging('AddTask', 'General', 'EnableNative10BitFrameBuffer',1); %the 0 is turn off dithering? -expScreen = 1; -%create white LUT - -% cd(a); - -% % % wLMS(1,1) = white(1,1)*maxLum; -% % % wLMS(1,2) = (1-white(1,1))*maxLum; -% % % wLMS(1,3) = white(1,2)*maxLum; -% % % wXYZ(1,:) = LMS_to_XYZ(wLMS(1,:)); -% % % wRGB(1,:) = XYZ_to_RGB(wXYZ(1,:), maxPhosXYZ); -% % % wRGB(1,1) = pix(dsearchn(redProp(:), wRGB(1,1)))*hfpRG; -% % % wRGB(1,2) = pix(dsearchn(grnProp(:), wRGB(1,2))); -% % % wRGB(1,3) = pix(dsearchn(blueProp(:), wRGB(1,3)))*hfpBG; - -[window, windowRect] = PsychImaging('OpenWindow', expScreen, [0 0 0], [], [], []); % Set a black screen before starting -%Screen('OpenWindow',0, [0 0 0]); %makes main screen dark -%PsychImaging('OpenWindow', expScreen, wRGB); -[xcent,ycent] = RectCenter(windowRect); -center = [xcent ycent]; -[xWinSize,~] = Screen('WindowSize',window); - -%% TIMING -%find frames per second -ifi = Screen('GetFlipInterval', window);% Measure the vertical refresh rate of the monitor -topPriorityLevel = MaxPriority(window);% Retreive the maximum priority number -numSecs = 16; %in seconds, total presentation time -framesPerSec = round(1/ifi); -nFrames = numSecs * framesPerSec; -waitframes = 1; %number of frames to wait between refresh -% color changed .03 of full cycle per second - finished 1/2 cycle in 16 seconds, 1/32 -%in Zaidi, clock face appears at 10.15 seconds, will approximate this -%number -zaidiClock = 10.15; %is when Zaidi started in his example. -clFrmStart = floor(1/ifi*zaidiClock); -clTotTime = 2.9*2; %how long is clock in the screen -handInt = 12*2; %how many places to stop around the clock -clFrames = floor(clTotTime/handInt/ifi); %this will move the hand 15 degrees at a time, and decides how many frames to sit at each angle - -%% Stimulus Size Parameters -circleDeg = 3.6; -clockPt = 0.1; - -% code assumes 1 pixel = 1 arc min -pixPerDeg = 35; %at a distance of 57 cm -circlePix = circleDeg*pixPerDeg; -clockPix = clockPt*pixPerDeg; - -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% %%%%%%%%%%%%%%%%%%%%%%%%%%% CIRCLE HALf LOCATIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%% -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%tstcircle = [xcent - circlePix/2 ycent - circlePix/2 xcent + circlePix/2 ycent + circlePix/2]; -rhtXCircleCenter = xWinSize/4; -lftXCircleCenter = xWinSize-xWinSize/4; -tstCircleLeft = [lftXCircleCenter - circlePix/2 ycent - circlePix/2 lftXCircleCenter + circlePix/2 ycent + circlePix/2]; -tstCircleRight = [rhtXCircleCenter - circlePix/2 ycent - circlePix/2 rhtXCircleCenter + circlePix/2 ycent + circlePix/2]; - -%create circular grid for clock face and the numbers -% % % circleDegGrid = 2 ; -% % % rad = circleDegGrid/2*pixPerDeg; %circlePix/2-pixPerDeg/2; -rad = circleDeg/2*pixPerDeg; %circlePix/2-pixPerDeg/2; -radNum = (circleDeg/2) * pixPerDeg; -degreeNumbers = linspace(0,360,25); -clockDegs = degreeNumbers(1:end-1); %[1:15:360]; -clockDegsLft = [90:15:269]; -clockDegsRht = [270:15:359,0:15:89]; -for iC = 1:length(clockDegs) - [xcFace(iC), ycFace(iC)] = pol2cart(clockDegs(iC)*pi/180, rad); - [xcNumber(iC), ycNumber(iC)] = pol2cart(clockDegs(iC)*pi/180, 1*radNum); -end -for iC = 1:length(clockDegsLft) - [xcRhtFace(iC), ycRhtFace(iC)] = pol2cart(clockDegsLft(iC)*pi/180, rad); - [xcRhtNumber(iC), ycRhtNumber(iC)] = pol2cart(clockDegsLft(iC)*pi/180, 1*radNum); -end -for iC = 1:length(clockDegsRht) - [xcLftFace(iC), ycLftFace(iC)] = pol2cart(clockDegsRht(iC)*pi/180, rad); - [xcLftNumber(iC), ycLftNumber(iC)] = pol2cart(clockDegsRht(iC)*pi/180, 1*radNum); -end - -%create matrix of dot locations -clockPosMat = [reshape(xcFace,1, length(clockDegs)); reshape(ycFace,1, length(clockDegs))]; -clockNumMat = [reshape(xcNumber,1, length(clockDegs)); reshape(ycNumber,1, length(clockDegs))]; -clockRhtPosMat = [reshape(xcRhtFace,1, length(clockDegsRht)); reshape(ycRhtFace,1, length(clockDegsRht))]; -clockRhtNumMat = [reshape(xcRhtNumber,1, length(clockDegsRht)); reshape(ycRhtNumber,1, length(clockDegsRht))]; -clockLftPosMat = [reshape(xcLftFace,1, length(clockDegsLft)); reshape(ycLftFace,1, length(clockDegsLft))]; -clockLftNumMat = [reshape(xcLftNumber,1, length(clockDegsLft)); reshape(ycLftNumber,1, length(clockDegsLft))]; - -Screen('TextSize', window, 14); -textOne = [12:24,1:11]; %[6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 1 2 3 4 5]; -yPositionIsBaseline=1; -%create array of second hand positions to index -count = 1; -secHandCord(1:handInt) = (1:15:360)*(pi/180); -for iMove = 1:length(secHandCord) - secHandMove(count:count+clFrames-1) = secHandCord(iMove); - count = count+clFrames; -end -secHandMove(length(secHandMove)+1:length(secHandMove)*2) = secHandMove(1:length(secHandMove)); - - -WaitSecs(1); - - -%%///////////////////////////////////////////////////////////////////////// -%%///////////////////////// EXPERIMENT TRIALS ///////////////////////////// -%%///////////////////////////////////////////////////////////////////////// -clear iCond - -curr_axis = find(axis_chck) -TrialCount = 1; -%run experiment - -TrialCount = 1; - -Card_Dir = 0; - + assignin('base','Stop_Press',0)% this works for the STOP experiment button + + % Check that Psychtoolbox is properly installed, switch to unified KbName's + % across operating systems, and switch color range to normalized 0 - 1 range: + PsychDefaultSetup(2); + + [curDir,~,~] = fileparts(matlab.desktop.editor.getActiveFilename); + saveFile = sprintf('%s/../A Outputs/%s_afterimage', curDir, subName); + + fp = fopen(saveFile, 'at'); + + %% Color information, load hfp data and color calibration + hfpFile = sprintf('%s/../A Outputs/%sHFP', curDir, subName); + load(hfpFile, '-mat'); + hfpRG = rg_avg; + hfpBG = bg_avg; + + load('colorCalFile1.mat'); + fprintf('\nLast calibration was %s\n', describe.date) + pix = pix/1001; + % maxLum = 20; %cd/m^2 + + contFile = sprintf('%s/../A Outputs/%s_ContMatch', curDir, subName); + load(contFile, '-mat'); + + % % % % lCont = fliplr(Final_lCont_avg);% sort the matrix in descendent order + % % % % lumMod = fliplr(Final_lumMod_avg); + % % % % + % % % % sCont = [.8 .65 .5 .35]; + % % % % nCont = 4; + + % lCont = Final_lCont_avg(:,4:5); + % lumMod = Final_lumMod_avg(:,4:5); + % sCont = [.5 .65 + % .5 .65 + % .5 .65 + % .5 .65]; + % + % nCont = 2; + + % lCont = Final_lCont_avg(3:6); + % lumMod = Final_lumMod_avg(3:6); + % sCont = [.5 .65 + % .5 .65 + % .5 .65 + % .5 .65]; + % sCont = Final_sCont_ref; + + lCont = Final_lCont_avg; + lumMod = Final_lumMod_avg; + sCont = Final_sCont_ref; + + nCont = size(sCont,2); + nBckg_Chro = size(Bckg_Chro,1); + + % white = [.665 1]; + blackLut = [0 0 0]; + redLut = [.8 0 0]; + + % Bckg_Chro = Final_lCont_avg(:,1:2) + + %% Save Session Information + + theDate = datestr(now(),'mm/dd/yyyy HH:MM:SS'); + % a = '/Users/clemente/Dropbox/Luminotecnia/2018/Experiments/Color Background Afterimage/1 Programs/4 ColBackg AI' ;% folder where the program is. + infoFile = sprintf('%s/../A Outputs/%s_SessionsInfo', curDir, subName); + + %aa = cd('/Users/clemente/Desktop/AfterImage Programs/A Outputs'); % folder where the program is. + + checkfile = exist(infoFile, 'file'); + fo = fopen(infoFile, 'at'); + if checkfile == 0 % if file doesn't exist, then print the following header: + fprintf(fo,'Subject\t Date\t Time\t Lum\t nBckg_Chro\t nCont\t nRep\t l_\t s_\t lum_\t ls45\t ls135\t luml45\t luml135\t lums45\t luml135\n'); + end + + % fo = fopen(infoFile, 'at') + fprintf(fo, '%s\t%s\t %1.2f\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n',... + subName, theDate, meanLum, nBckg_Chro, nCont, nRep, axis_chck); + % % % % fprintf(fo, '%s\t%i/%i/%i %i:%i:%i\t %1.2f\t%1.3f\t%1.3f\t%i\n',... + % % % % subName, theDate(2), theDate(3), theDate(1), theDate(4), theDate(5), round(theDate(6)),... + % % % % maxLum, white(1),white(2), nRep)%,curr_cond(1),curr_cond(2),... + % % % % % % curr_cond(3),curr_cond(4) ,curr_cond(5),curr_cond(6),... + % % % % % % curr_cond(7),curr_cond(8),curr_cond(9)); + + fclose(fo); + + %% set up psych toolbox + %set up 10 bit color + PsychImaging('PrepareConfiguration'); + %PsychImaging('AddTask', 'General', 'EnableNative10BitFrameBuffer',1); %the 0 is turn off dithering? + expScreen = 1; + %create white LUT + + % cd(a); + + % % % wLMS(1,1) = white(1,1)*maxLum; + % % % wLMS(1,2) = (1-white(1,1))*maxLum; + % % % wLMS(1,3) = white(1,2)*maxLum; + % % % wXYZ(1,:) = LMS_to_XYZ(wLMS(1,:)); + % % % wRGB(1,:) = XYZ_to_RGB(wXYZ(1,:), maxPhosXYZ); + % % % wRGB(1,1) = pix(dsearchn(redProp(:), wRGB(1,1)))*hfpRG; + % % % wRGB(1,2) = pix(dsearchn(grnProp(:), wRGB(1,2))); + % % % wRGB(1,3) = pix(dsearchn(blueProp(:), wRGB(1,3)))*hfpBG; + + [window, windowRect] = PsychImaging('OpenWindow', expScreen, [0 0 0], [], [], []); % Set a black screen before starting + %Screen('OpenWindow',0, [0 0 0]); %makes main screen dark + %PsychImaging('OpenWindow', expScreen, wRGB); + [xcent,ycent] = RectCenter(windowRect); + center = [xcent ycent]; + [xWinSize,~] = Screen('WindowSize',window); + + %% TIMING + %find frames per second + ifi = Screen('GetFlipInterval', window);% Measure the vertical refresh rate of the monitor + topPriorityLevel = MaxPriority(window);% Retreive the maximum priority number + numSecs = 16; %in seconds, total presentation time + framesPerSec = round(1/ifi); + nFrames = numSecs * framesPerSec; + waitframes = 1; %number of frames to wait between refresh + % color changed .03 of full cycle per second - finished 1/2 cycle in 16 seconds, 1/32 + %in Zaidi, clock face appears at 10.15 seconds, will approximate this + %number + zaidiClock = 10.15; %is when Zaidi started in his example. + clFrmStart = floor(1/ifi*zaidiClock); + clTotTime = 2.9*2; %how long is clock in the screen + handInt = 12*2; %how many places to stop around the clock + clFrames = floor(clTotTime/handInt/ifi); %this will move the hand 15 degrees at a time, and decides how many frames to sit at each angle + + %% Stimulus Size Parameters + circleDeg = 3.6; + clockPt = 0.1; + + % code assumes 1 pixel = 1 arc min + pixPerDeg = 35; %at a distance of 57 cm + circlePix = circleDeg*pixPerDeg; + clockPix = clockPt*pixPerDeg; + + % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % %%%%%%%%%%%%%%%%%%%%%%%%%%% CIRCLE HALf LOCATIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%% + % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %tstcircle = [xcent - circlePix/2 ycent - circlePix/2 xcent + circlePix/2 ycent + circlePix/2]; + rhtXCircleCenter = xWinSize/4; + lftXCircleCenter = xWinSize-xWinSize/4; + tstCircleLeft = [lftXCircleCenter - circlePix/2 ycent - circlePix/2 lftXCircleCenter + circlePix/2 ycent + circlePix/2]; + tstCircleRight = [rhtXCircleCenter - circlePix/2 ycent - circlePix/2 rhtXCircleCenter + circlePix/2 ycent + circlePix/2]; + + %create circular grid for clock face and the numbers + % % % circleDegGrid = 2 ; + % % % rad = circleDegGrid/2*pixPerDeg; %circlePix/2-pixPerDeg/2; + rad = circleDeg/2*pixPerDeg; %circlePix/2-pixPerDeg/2; + radNum = (circleDeg/2) * pixPerDeg; + degreeNumbers = linspace(0,360,25); + clockDegs = degreeNumbers(1:end-1); %[1:15:360]; + clockDegsLft = [90:15:269]; + clockDegsRht = [270:15:359,0:15:89]; + for iC = 1:length(clockDegs) + [xcFace(iC), ycFace(iC)] = pol2cart(clockDegs(iC)*pi/180, rad); + [xcNumber(iC), ycNumber(iC)] = pol2cart(clockDegs(iC)*pi/180, 1*radNum); + end + for iC = 1:length(clockDegsLft) + [xcRhtFace(iC), ycRhtFace(iC)] = pol2cart(clockDegsLft(iC)*pi/180, rad); + [xcRhtNumber(iC), ycRhtNumber(iC)] = pol2cart(clockDegsLft(iC)*pi/180, 1*radNum); + end + for iC = 1:length(clockDegsRht) + [xcLftFace(iC), ycLftFace(iC)] = pol2cart(clockDegsRht(iC)*pi/180, rad); + [xcLftNumber(iC), ycLftNumber(iC)] = pol2cart(clockDegsRht(iC)*pi/180, 1*radNum); + end + + %create matrix of dot locations + clockPosMat = [reshape(xcFace,1, length(clockDegs)); reshape(ycFace,1, length(clockDegs))]; + %clockNumMat = [reshape(xcNumber,1, length(clockDegs)); reshape(ycNumber,1, length(clockDegs))]; + %clockRhtPosMat = [reshape(xcRhtFace,1, length(clockDegsRht)); reshape(ycRhtFace,1, length(clockDegsRht))]; + clockRhtNumMat = [reshape(xcRhtNumber,1, length(clockDegsRht)); reshape(ycRhtNumber,1, length(clockDegsRht))]; + %clockLftPosMat = [reshape(xcLftFace,1, length(clockDegsLft)); reshape(ycLftFace,1, length(clockDegsLft))]; + clockLftNumMat = [reshape(xcLftNumber,1, length(clockDegsLft)); reshape(ycLftNumber,1, length(clockDegsLft))]; + + Screen('TextSize', window, 14); + textOne = [12:24,1:11]; %[6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 1 2 3 4 5]; + %yPositionIsBaseline=1; + %create array of second hand positions to index + count = 1; + secHandCord(1:handInt) = (1:15:360)*(pi/180); + for iMove = 1:length(secHandCord) + secHandMove(count:count+clFrames-1) = secHandCord(iMove); + count = count+clFrames; + end + secHandMove(length(secHandMove)+1:length(secHandMove)*2) = secHandMove(1:length(secHandMove)); + + + WaitSecs(1); + + + %%///////////////////////////////////////////////////////////////////////// + %%///////////////////////// EXPERIMENT TRIALS ///////////////////////////// + %%///////////////////////////////////////////////////////////////////////// + clear iCond + + curr_axis = find(axis_chck); + fprintf('Current Axis: %d\n',curr_axis); + %run experiment + + TrialCount = 1; + + Card_Dir = 0; + for iChro = 1:size(Bckg_Chro,1) - - - -wLMS(1,1) = Bckg_Chro(iChro,1)*meanLum; -wLMS(1,2) = (1-Bckg_Chro(iChro,1))*meanLum; -wLMS(1,3) = Bckg_Chro(iChro,2)*meanLum; -wXYZ(1,:) = LMS_to_XYZ(wLMS(1,:)); -wRGB(1,:) = XYZ_to_RGB(wXYZ(1,:), maxPhosXYZ); -wRGB(1,1) = pix(dsearchn(redProp(:), wRGB(1,1)))*hfpRG; -wRGB(1,2) = pix(dsearchn(grnProp(:), wRGB(1,2))); -wRGB(1,3) = pix(dsearchn(blueProp(:), wRGB(1,3)))*hfpBG; - -commandwindow; -Speak(' Press any key when you are ready'); - KbStrokeWait; - - Screen('FillRect', window, wRGB); - -Screen('Flip',window) - -WaitSecs(AdaptTime) - - for iRep = 1:nRep - - cont = randperm(nCont); %randomize contrast conditions - for iCont = 1:nCont - FlushEvents('mouseDown','keyDown'); - - %create colors with depending on contrast - l = [Bckg_Chro(iChro,1)+(Bckg_Chro(iChro,1)*lCont(iChro,cont(iCont))) Bckg_Chro(iChro,2) meanLum - Bckg_Chro(iChro,1)-(Bckg_Chro(iChro,1)*lCont(iChro,cont(iCont))) Bckg_Chro(iChro,2) meanLum]; %+l, -l - - s = [Bckg_Chro(iChro,1) Bckg_Chro(iChro,2)+(Bckg_Chro(iChro,2)*sCont(iChro,cont(iCont))) meanLum - Bckg_Chro(iChro,1) Bckg_Chro(iChro,2)-(Bckg_Chro(iChro,2)*sCont(iChro,cont(iCont))) meanLum];%+s, -s - - lum = [Bckg_Chro(iChro,1) Bckg_Chro(iChro,2) meanLum-lumMod(iChro,cont(iCont)) - Bckg_Chro(iChro,1) Bckg_Chro(iChro,2) meanLum+lumMod(iChro,cont(iCont))]; % -lum , +lum - - l_s_45 = [Bckg_Chro(iChro,1)+(Bckg_Chro(iChro,1)*lCont(iChro,cont(iCont))) Bckg_Chro(iChro,2)+(Bckg_Chro(iChro,2)*sCont(iChro,cont(iCont))) meanLum - Bckg_Chro(iChro,1)-(Bckg_Chro(iChro,1)*lCont(iChro,cont(iCont))) Bckg_Chro(iChro,2)-(Bckg_Chro(iChro,2)*sCont(iChro,cont(iCont))) meanLum]; - - l_s_135 = [Bckg_Chro(iChro,1)-(Bckg_Chro(iChro,1)*lCont(iChro,cont(iCont))) Bckg_Chro(iChro,2)+(Bckg_Chro(iChro,2)*sCont(iChro,cont(iCont))) meanLum - Bckg_Chro(iChro,1)+(Bckg_Chro(iChro,1)*lCont(iChro,cont(iCont))) Bckg_Chro(iChro,2)-(Bckg_Chro(iChro,2)*sCont(iChro,cont(iCont))) meanLum]; - - - lum_l_45 = [Bckg_Chro(iChro,1)+(Bckg_Chro(iChro,1)*lCont(iChro,cont(iCont))) Bckg_Chro(iChro,2) meanLum+lumMod(iChro,cont(iCont)) + + + + wLMS(1,1) = Bckg_Chro(iChro,1)*meanLum; + wLMS(1,2) = (1-Bckg_Chro(iChro,1))*meanLum; + wLMS(1,3) = Bckg_Chro(iChro,2)*meanLum; + wXYZ(1,:) = LMS_to_XYZ(wLMS(1,:)); + wRGB(1,:) = XYZ_to_RGB(wXYZ(1,:), maxPhosXYZ); + wRGB(1,1) = pix(dsearchn(redProp(:), wRGB(1,1)))*hfpRG; + wRGB(1,2) = pix(dsearchn(grnProp(:), wRGB(1,2))); + wRGB(1,3) = pix(dsearchn(blueProp(:), wRGB(1,3)))*hfpBG; + + commandwindow; + Speak(' Press any key when you are ready'); + KbStrokeWait; + + Screen('FillRect', window, wRGB); + + Screen('Flip',window) + + WaitSecs(AdaptTime) + + for iRep = 1:nRep + + cont = randperm(nCont); %randomize contrast conditions + for iCont = 1:nCont + FlushEvents('mouseDown','keyDown'); + + %create colors with depending on contrast + l = [Bckg_Chro(iChro,1)+(Bckg_Chro(iChro,1)*lCont(iChro,cont(iCont))) Bckg_Chro(iChro,2) meanLum + Bckg_Chro(iChro,1)-(Bckg_Chro(iChro,1)*lCont(iChro,cont(iCont))) Bckg_Chro(iChro,2) meanLum]; %+l, -l + + s = [Bckg_Chro(iChro,1) Bckg_Chro(iChro,2)+(Bckg_Chro(iChro,2)*sCont(iChro,cont(iCont))) meanLum + Bckg_Chro(iChro,1) Bckg_Chro(iChro,2)-(Bckg_Chro(iChro,2)*sCont(iChro,cont(iCont))) meanLum];%+s, -s + + lum = [Bckg_Chro(iChro,1) Bckg_Chro(iChro,2) meanLum-lumMod(iChro,cont(iCont)) + Bckg_Chro(iChro,1) Bckg_Chro(iChro,2) meanLum+lumMod(iChro,cont(iCont))]; % -lum , +lum + + l_s_45 = [Bckg_Chro(iChro,1)+(Bckg_Chro(iChro,1)*lCont(iChro,cont(iCont))) Bckg_Chro(iChro,2)+(Bckg_Chro(iChro,2)*sCont(iChro,cont(iCont))) meanLum + Bckg_Chro(iChro,1)-(Bckg_Chro(iChro,1)*lCont(iChro,cont(iCont))) Bckg_Chro(iChro,2)-(Bckg_Chro(iChro,2)*sCont(iChro,cont(iCont))) meanLum]; + + l_s_135 = [Bckg_Chro(iChro,1)-(Bckg_Chro(iChro,1)*lCont(iChro,cont(iCont))) Bckg_Chro(iChro,2)+(Bckg_Chro(iChro,2)*sCont(iChro,cont(iCont))) meanLum + Bckg_Chro(iChro,1)+(Bckg_Chro(iChro,1)*lCont(iChro,cont(iCont))) Bckg_Chro(iChro,2)-(Bckg_Chro(iChro,2)*sCont(iChro,cont(iCont))) meanLum]; + + + lum_l_45 = [Bckg_Chro(iChro,1)+(Bckg_Chro(iChro,1)*lCont(iChro,cont(iCont))) Bckg_Chro(iChro,2) meanLum+lumMod(iChro,cont(iCont)) Bckg_Chro(iChro,1)-(Bckg_Chro(iChro,1)*lCont(iChro,cont(iCont))) Bckg_Chro(iChro,2) meanLum-lumMod(iChro,cont(iCont))]; - - lum_l_135 = [Bckg_Chro(iChro,1)+(Bckg_Chro(iChro,1)*lCont(iChro,cont(iCont))) Bckg_Chro(iChro,2) meanLum-lumMod(iChro,cont(iCont)) + + lum_l_135 = [Bckg_Chro(iChro,1)+(Bckg_Chro(iChro,1)*lCont(iChro,cont(iCont))) Bckg_Chro(iChro,2) meanLum-lumMod(iChro,cont(iCont)) Bckg_Chro(iChro,1)-(Bckg_Chro(iChro,1)*lCont(iChro,cont(iCont))) Bckg_Chro(iChro,2) meanLum+lumMod(iChro,cont(iCont))]; - - lum_s_45 = [Bckg_Chro(iChro,1) Bckg_Chro(iChro,2)+(Bckg_Chro(iChro,2)*sCont(iChro,cont(iCont))) meanLum+lumMod(iChro,cont(iCont)) + + lum_s_45 = [Bckg_Chro(iChro,1) Bckg_Chro(iChro,2)+(Bckg_Chro(iChro,2)*sCont(iChro,cont(iCont))) meanLum+lumMod(iChro,cont(iCont)) Bckg_Chro(iChro,1) Bckg_Chro(iChro,2)-(Bckg_Chro(iChro,2)*sCont(iChro,cont(iCont))) meanLum-lumMod(iChro,cont(iCont))]; - - lum_s_135 = [Bckg_Chro(iChro,1) Bckg_Chro(iChro,2)+(Bckg_Chro(iChro,2)*sCont(iChro,cont(iCont))) meanLum-lumMod(iChro,cont(iCont)) + + lum_s_135 = [Bckg_Chro(iChro,1) Bckg_Chro(iChro,2)+(Bckg_Chro(iChro,2)*sCont(iChro,cont(iCont))) meanLum-lumMod(iChro,cont(iCont)) Bckg_Chro(iChro,1) Bckg_Chro(iChro,2)-(Bckg_Chro(iChro,2)*sCont(iChro,cont(iCont))) meanLum+lumMod(iChro,cont(iCont))]; - - - rnd_idx = randperm(length(curr_axis)); - curr_axis = curr_axis(rnd_idx) -% cond = randperm(9); - for iCond = 1:length(curr_axis) - %create table of color changes - switch curr_axis(iCond) - case 1 - colLut = l; - case 2 - colLut = s; - case 3 %%%% ATENCION que ahora LUM es la condicion 3 - colLut = lum; - case 4 - colLut = l_s_45; - case 5 - colLut = l_s_135; - case 6 - colLut = lum_l_45; - case 7 - colLut = lum_l_135; - case 8 - colLut = lum_s_45; - case 9 - colLut = lum_s_135; - end - - - %LMS values of each color, ls to LMS - for iLMS = 1:2 - cLMS(iLMS,1) = colLut(iLMS,1)*colLut(iLMS, 3); - cLMS(iLMS,2) = (1-colLut(iLMS,1))*colLut(iLMS, 3); - cLMS(iLMS,3) = colLut(iLMS,2)*colLut(iLMS, 3); - end - - %XYZ values for each - for iXYZ = 1:length(cLMS(:,1)) - cXYZ(iXYZ,:) = LMS_to_XYZ(cLMS(iXYZ,:)); - end - - %use lut to find corrected monitor RGB values for each rgb color - for iRGB = 1:length(cXYZ(:,1)) - cRGB(iRGB,:) = XYZ_to_RGB(cXYZ(iRGB,:), maxPhosXYZ); - cRGB(iRGB,1) = pix(dsearchn(redProp(:), cRGB(iRGB,1)))*hfpRG; - cRGB(iRGB,2) = pix(dsearchn(grnProp(:), cRGB(iRGB,2))); - cRGB(iRGB,3) = pix(dsearchn(blueProp(:), cRGB(iRGB,3)))*hfpBG; - end - - rampLeft = zeros(nFrames,3); - rampRight = zeros(nFrames,3); - for iRamp = 1:3 %for 3 phosophors - rampLeft(:,iRamp) = sinspace(wRGB(1,iRamp), cRGB(1,iRamp), nFrames); - rampRight(:,iRamp) = sinspace(wRGB(1,iRamp), cRGB(2,iRamp), nFrames); - end - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% loadCombined =1; -% if loadCombined -% rampLeft = importdata('rampLeft_Combined.mat'); -% rampRight = importdata('rampRight_Combined.mat'); -% end - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - - %create random start point for clock hand - randStrt = randi(handInt-1); %won't pick midnight as start point due to second hand array not being long enough - %clock set to go around 1 full circle - for ihand = 1:handInt*clFrames+clFrames - th(ihand) = (secHandMove(randStrt*clFrames-clFrames+ihand)); - [handx(ihand), handy(ihand)] = pol2cart(th(ihand),1*rad); - end - - handxLft = handx + lftXCircleCenter; - handyLft = handy + ycent; - handxRht = handx + rhtXCircleCenter; - handyRht = handy + ycent; - - WaitSecs(5); %a short adaptation before the next trial - keypress = 0; - count = 0; %for clock hand - TrialCountStr = num2str(TrialCount); - Priority(topPriorityLevel); - FlushEvents('mouseDown','keyDown'); - %ListenChar(2) - secs0 = Screen('Flip', window); - for iFrames = 1:nFrames - Screen('FillArc', window, rampLeft(iFrames,:), tstCircleLeft, 0, 180); - Screen('FillArc', window, rampRight(iFrames,:), tstCircleRight, 180, 180); - Screen('DrawDots', window, clockLftPosMat,clockPix, blackLut, [lftXCircleCenter,center(2)], 2); - Screen('DrawDots', window, clockRhtPosMat,clockPix, blackLut, [rhtXCircleCenter,center(2)], 2); - Screen('DrawDots', window, [0 0],clockPix, 0, [lftXCircleCenter,center(2)], 2); % black dot for fixation - Screen('DrawDots', window, [0 0],clockPix, 0, [rhtXCircleCenter,center(2)], 2); % black dot for fixation - Screen('DrawText', window, TrialCountStr, 20, 20, redLut, wRGB); - - for itxt = 1:12 - textNum = num2str(textOne(itxt)); - Screen('DrawText', window, textNum, 1.18*clockRhtNumMat(1,itxt)+rhtXCircleCenter-7, 1.18*clockRhtNumMat(2,itxt)+center(1,2)-7, blackLut, wRGB); - textNum = num2str(textOne(itxt+12)); - Screen('DrawText', window, textNum, 1.18*clockLftNumMat(1,itxt)+lftXCircleCenter-7, 1.18*clockLftNumMat(2,itxt)+center(1,2)-7, blackLut, wRGB); - end - - if iFrames == clFrmStart - beep; - end - - if iFrames > clFrmStart-1 && iFrames < clFrmStart + handInt*clFrames+5 - count = count+1; - Screen('DrawLine', window, redLut, lftXCircleCenter, ycent, handxLft(count), handyLft(count), 2.5); - Screen('DrawLine', window, redLut, rhtXCircleCenter, ycent, handxRht(count), handyRht(count), 2.5); - end - -% % %----------------- -% % % PrintScreen of the monitor (for the paper) -% % % GetImage call. Alter the rect argument to change the location of the screen shot -% % imageArray = Screen('GetImage', window, [0 0 300 300]); -% % % imwrite is a Matlab function, not a PTB-3 function -% % imwrite(imageArray, 'test.jpg') -% % %------------------ - - vbl = Screen('Flip', window, secs0 + (waitframes - 0.5) * ifi); - - Screen('DrawingFinished', window); % tell psychtoolbox drawing is finished, should help timing - - end - Priority(0); -% % % % while ~keypress -% % % % if CharAvail -% % % % userRes = input(' '); -% % % % keypress = 1; -% % % % end -% % % % end -% % % % FlushEvents('mouseDown','keyDown'); - - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % RESPONSES % - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -if Simu_chck - userRes = 'simu'; - -else -keyIsDown=0; -kbName=[]; -Digit = []; - -Nums = {'0','1','2','3','4','5','6','7','8','9'}; -Screen('TextSize', window, 30); -commandwindow; -while keyIsDown==0 | (strcmp('ENTER',kbName)==0)% & strcmp('2',kbName)==0) - -keyIsDown=0; -[keyIsDown, secs, keyCode] = KbCheck; - - -if keyIsDown==1 % -kbName = KbName(keyCode); -end - -if Digit & any(strcmp(Nums(:),kbName)); - idx=find(strcmp(Nums(:),kbName)); - NumPressed = Nums{idx}; - - kbName = strcat(firstDigit,NumPressed); - userRes = kbName; -% DrawFormattedText(window, kbName, 'center', 'center', color); - DrawFormattedText(window, kbName, 400, 512, redLut); - Screen('Flip', window); - kbName = []; - Digit = 0; - WaitSecs(.4); -elseif any(strcmp(Nums(:),kbName)) - idx=find(strcmp(Nums(:),kbName)); - NumPressed = Nums{idx}; - userRes = kbName; - %-si es numero -- llevarlo a la pantalla - DrawFormattedText(window, kbName, 400, 512, redLut); - % Flip to the screen - Screen('Flip', window); - - Digit = 1 ;% flag to mean that - firstDigit = kbName; - WaitSecs(.4); - kbName = []; - -end - -if strcmp('DELETE',kbName)==1 %-si es el backspace --limpiar numero - kbName = []% ; - userRes = kbName - firstDigit = []; - Digit = 0; - DrawFormattedText(window, kbName, 400, 512, redLut); - % Flip to the screen - Screen('Flip', window); -%else % -si no es numero -- ignorar - WaitSecs(.4); -end - - -end %end while - -end -% userRes = num2str(2); - -AfterResp = 'OK' - - - -Screen('TextSize', window, 14); - FlushEvents('mouseDown','keyDown'); - - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % SAVE % - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -aa = cd('/Users/clemente/Desktop/AfterImage Programs/A Outputs'); -% aa = cd('D:\Dropbox\Luminotecnia\2017\Chicago Lab files\2 Experiments\Color AfterImage_Exp_Room_150\2nd\1 Programs\A Outputs') -cd -WaitSecs(.2) - - time = clock; - fprintf(fp, '%s\t%i/%i/%i %i:%i:%i\t%1.3f\t%1.3f\t%1.3f\t%1.3f\t%i\t%i\t%i\t%i\t%s\tExperiment\n',... - subName, time(2), time(3), time(1), time(4), time(5), round(time(6)), hfpRG, hfpBG, Bckg_Chro(iChro,1), Bckg_Chro(iChro,2), cont(iCont), curr_axis(iCond), Card_Dir, randStrt+5, userRes); - -% a = cd('/Users/clemente/Dropbox/Luminotecnia/2018/Experiments/Color Background Afterimage/1 Programs/4 ColBackg AI'); % -% a = cd('D:\Dropbox\Luminotecnia\2017\Chicago Lab files\2 Experiments\Color AfterImage_Exp_Room_150\2nd\1 Programs\4 AfterImage'); % - - cd - - WaitSecs(.2) - - - %ListenChar(0) - Screen('FillRect', window, wRGB, windowRect); - Screen('Flip', window); - clear secHandCord colLut - - TrialCount = TrialCount+1 - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % WANT TO STOP? % - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% pause(3) - yesno=evalin('base','Stop_Press') - - - if yesno==1 - return - end - - - end %ICond - end %iCont - end %iRep -end %iChro - -fclose(fp); -sca -%create a matrix of seconds compared to pi values for each frame - just -%used in data analysis -% % % % piVSsecs(:,1) = [0:1/(nFrames-1):1]; -% % % % piVSsecs(:,2) = [0:numSecs/(nFrames-1):numSecs]; - catch + + + rnd_idx = randperm(length(curr_axis)); + curr_axis = curr_axis(rnd_idx); + fprintf('Current Axis: %d\n', curr_axis); + % cond = randperm(9); + for iCond = 1:length(curr_axis) + %create table of color changes + switch curr_axis(iCond) + case 1 + colLut = l; + case 2 + colLut = s; + case 3 %%%% ATENCION que ahora LUM es la condicion 3 + colLut = lum; + case 4 + colLut = l_s_45; + case 5 + colLut = l_s_135; + case 6 + colLut = lum_l_45; + case 7 + colLut = lum_l_135; + case 8 + colLut = lum_s_45; + case 9 + colLut = lum_s_135; + end + + + %LMS values of each color, ls to LMS + for iLMS = 1:2 + cLMS(iLMS,1) = colLut(iLMS,1)*colLut(iLMS, 3); + cLMS(iLMS,2) = (1-colLut(iLMS,1))*colLut(iLMS, 3); + cLMS(iLMS,3) = colLut(iLMS,2)*colLut(iLMS, 3); + end + + %XYZ values for each + for iXYZ = 1:length(cLMS(:,1)) + cXYZ(iXYZ,:) = LMS_to_XYZ(cLMS(iXYZ,:)); + end + + %use lut to find corrected monitor RGB values for each rgb color + for iRGB = 1:length(cXYZ(:,1)) + cRGB(iRGB,:) = XYZ_to_RGB(cXYZ(iRGB,:), maxPhosXYZ); + cRGB(iRGB,1) = pix(dsearchn(redProp(:), cRGB(iRGB,1)))*hfpRG; + cRGB(iRGB,2) = pix(dsearchn(grnProp(:), cRGB(iRGB,2))); + cRGB(iRGB,3) = pix(dsearchn(blueProp(:), cRGB(iRGB,3)))*hfpBG; + end + + rampLeft = zeros(nFrames,3); + rampRight = zeros(nFrames,3); + for iRamp = 1:3 %for 3 phosophors + rampLeft(:,iRamp) = sinspace(wRGB(1,iRamp), cRGB(1,iRamp), nFrames); + rampRight(:,iRamp) = sinspace(wRGB(1,iRamp), cRGB(2,iRamp), nFrames); + end + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % loadCombined =1; + % if loadCombined + % rampLeft = importdata('rampLeft_Combined.mat'); + % rampRight = importdata('rampRight_Combined.mat'); + % end + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + %create random start point for clock hand + randStrt = randi(handInt-1); %won't pick midnight as start point due to second hand array not being long enough + %clock set to go around 1 full circle + for ihand = 1:handInt*clFrames+clFrames + th(ihand) = (secHandMove(randStrt*clFrames-clFrames+ihand)); + [handx(ihand), handy(ihand)] = pol2cart(th(ihand),1*rad); + end + + handxLft = handx + lftXCircleCenter; + handyLft = handy + ycent; + handxRht = handx + rhtXCircleCenter; + handyRht = handy + ycent; + + WaitSecs(5); %a short adaptation before the next trial + %keypress = 0; + count = 0; %for clock hand + TrialCountStr = num2str(TrialCount); + Priority(topPriorityLevel); + FlushEvents('mouseDown','keyDown'); + %ListenChar(2) + secs0 = Screen('Flip', window); + for iFrames = 1:nFrames + Screen('FillArc', window, rampLeft(iFrames,:), tstCircleLeft, 0, 180); + Screen('FillArc', window, rampRight(iFrames,:), tstCircleRight, 180, 180); + Screen('DrawDots', window, clockPosMat,clockPix, blackLut, [lftXCircleCenter,center(2)], 2); + Screen('DrawDots', window, clockPosMat,clockPix, blackLut, [rhtXCircleCenter,center(2)], 2); + Screen('DrawDots', window, [0 0],clockPix, 0, [lftXCircleCenter,center(2)], 2); % black dot for fixation + Screen('DrawDots', window, [0 0],clockPix, 0, [rhtXCircleCenter,center(2)], 2); % black dot for fixation + Screen('DrawText', window, TrialCountStr, 20, 20, redLut, wRGB); + + for itxt = 1:12 + textNum = num2str(textOne(itxt)); + Screen('DrawText', window, textNum, 1.18*clockRhtNumMat(1,itxt)+rhtXCircleCenter-7, 1.18*clockRhtNumMat(2,itxt)+center(1,2)-7, blackLut, wRGB); + textNum = num2str(textOne(itxt+12)); + Screen('DrawText', window, textNum, 1.18*clockLftNumMat(1,itxt)+lftXCircleCenter-7, 1.18*clockLftNumMat(2,itxt)+center(1,2)-7, blackLut, wRGB); + end + + if iFrames == clFrmStart + beep; + end + + if iFrames > clFrmStart-1 && iFrames < clFrmStart + handInt*clFrames+5 + count = count+1; + Screen('DrawLine', window, redLut, lftXCircleCenter, ycent, handxLft(count), handyLft(count), 2.5); + Screen('DrawLine', window, redLut, rhtXCircleCenter, ycent, handxRht(count), handyRht(count), 2.5); + end + + % % %----------------- + % % % PrintScreen of the monitor (for the paper) + % % % GetImage call. Alter the rect argument to change the location of the screen shot + % % imageArray = Screen('GetImage', window, [0 0 300 300]); + % % % imwrite is a Matlab function, not a PTB-3 function + % % imwrite(imageArray, 'test.jpg') + % % %------------------ + + Screen('Flip', window, secs0 + (waitframes - 0.5) * ifi); + + Screen('DrawingFinished', window); % tell psychtoolbox drawing is finished, should help timing + + end + Priority(0); + % % % % while ~keypress + % % % % if CharAvail + % % % % userRes = input(' '); + % % % % keypress = 1; + % % % % end + % % % % end + % % % % FlushEvents('mouseDown','keyDown'); + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % RESPONSES % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + if Simu_chck + userRes = 'simu'; + + else + keyIsDown=0; + kbName=[]; + Digit = []; + + Nums = {'0','1','2','3','4','5','6','7','8','9'}; + Screen('TextSize', window, 30); + commandwindow; + while keyIsDown==0 || (strcmp('ENTER',kbName)==0)% & strcmp('2',kbName)==0) + + %keyIsDown=0; + [keyIsDown, ~, keyCode] = KbCheck; + + + if keyIsDown==1 % + kbName = KbName(keyCode); + end + + if Digit && any(strcmp(Nums(:),kbName)) + %idx=find(strcmp(Nums(:),kbName)); + NumPressed = Nums{strcmp(Nums(:),kbName)}; + + kbName = strcat(firstDigit,NumPressed); + userRes = kbName; + % DrawFormattedText(window, kbName, 'center', 'center', color); + DrawFormattedText(window, kbName, 400, 512, redLut); + Screen('Flip', window); + kbName = []; + Digit = 0; + WaitSecs(.4); + elseif any(strcmp(Nums(:),kbName)) + %idx=find(strcmp(Nums(:),kbName)); + %NumPressed = Nums{idx}; + userRes = kbName; + %-si es numero -- llevarlo a la pantalla + DrawFormattedText(window, kbName, 400, 512, redLut); + % Flip to the screen + Screen('Flip', window); + + Digit = 1 ;% flag to mean that + firstDigit = kbName; + WaitSecs(.4); + kbName = []; + + end + + if strcmp('DELETE',kbName)==1 %-si es el backspace --limpiar numero + kbName = []; + userRes = kbName; + firstDigit = []; + Digit = 0; + DrawFormattedText(window, kbName, 400, 512, redLut); + % Flip to the screen + Screen('Flip', window); + %else % -si no es numero -- ignorar + WaitSecs(.4); + end + + + end %end while + + end + % userRes = num2str(2); + + %AfterResp = 'OK'; + + + + Screen('TextSize', window, 14); + FlushEvents('mouseDown','keyDown'); + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % SAVE % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + WaitSecs(.2) + + theDate = datestr(now(),'mm/dd/yyyy HH:MM:SS'); + fprintf(fp, '%s\t%s\t%1.3f\t%1.3f\t%1.3f\t%1.3f\t%i\t%i\t%i\t%i\t%s\tExperiment\n',... + subName, theDate, hfpRG, hfpBG, Bckg_Chro(iChro,1), Bckg_Chro(iChro,2), cont(iCont), curr_axis(iCond), Card_Dir, randStrt+5, userRes); + + % a = cd('/Users/clemente/Dropbox/Luminotecnia/2018/Experiments/Color Background Afterimage/1 Programs/4 ColBackg AI'); % + % a = cd('D:\Dropbox\Luminotecnia\2017\Chicago Lab files\2 Experiments\Color AfterImage_Exp_Room_150\2nd\1 Programs\4 AfterImage'); % + + cd + + WaitSecs(.2) + + + %ListenChar(0) + Screen('FillRect', window, wRGB, windowRect); + Screen('Flip', window); + clear secHandCord colLut + + TrialCount = TrialCount+1; + fprintf('Trial Count: %d\n',TrialCount); + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % WANT TO STOP? % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % pause(3) + yesno=evalin('base','Stop_Press'); + + + if yesno==1 + return + end + + + end %ICond + end %iCont + end %iRep + end %iChro + + fclose(fp); + sca + %create a matrix of seconds compared to pi values for each frame - just + %used in data analysis + % % % % piVSsecs(:,1) = [0:1/(nFrames-1):1]; + % % % % piVSsecs(:,2) = [0:numSecs/(nFrames-1):numSecs]; +catch warndlg('The program failed to run. Try again.') return - + end end diff --git a/002 After Image GUI Project/TVP_GENERATOR.mlapp b/002 After Image GUI Project/TVP_GENERATOR.mlapp index 7a2d1ac..5ae28ad 100644 Binary files a/002 After Image GUI Project/TVP_GENERATOR.mlapp and b/002 After Image GUI Project/TVP_GENERATOR.mlapp differ