/usr/share/psychtoolbox-3/PsychGLImageProcessing/private/bvlSelectFitPts.m is in psychtoolbox-3-common 3.0.11.20131230.dfsg1-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | function [scal] = bvlSelectFitPts(scal)
% bvlSelectFitPts
%
% Add points to the list in FITDOTLIST_L or _R. All dots are displayed on the screen
% and a circle is drawn around the circles that are in the list. The user can then select
% or deselect dots with the mouse.
% 2007-05-17 - Chris Burns
% Major re-write of the calibration code on the Bankslab Haploscope
% This is a complete rewrite of similar code from Ben Backus
% (1995-97) and Jimmy Sastra(2001). Using Matlab 7.x, Psychtoolbox 3.x
% on Windows XP.
% Large chunks of this are copied from the manual_calibrate.m code.
% It would be more elegant to reuse the existing code instead of
% copying, but was a lot of work to refactor manual_calibrate to use
% the mouse and keyboard and PTB 3.x. I don't want to brake that
% code or fudge this in. And in the interest of getting this done
% today... shamefully copying code.
% Define colors that are used in the drawing functionsp
colorBlack = [0 0 0 255];
colorWhite = [255 255 255 255];
colorRed = [255 0 0 255];
colorBlue = [0 0 255 255];
colorGreen = [0 255 0 255];
colorCyan = [0 255 255 255];
colorMagenta = [255 0 255 255];
colorYellow = [255 255 0 255];
% indices of selected dots
indicesSelectedDots = [];
nDots = scal.NxdotsG*scal.NydotsG;
%
% Construct 5x5 matrix grid
%
% Edges, center meridian (vert and horiz) and the midpoints
xMidPt = (scal.NxdotsG + 1) / 2;
xDelta = (xMidPt + 1) / 2;
xDelta = floor(xDelta);
xIndicies = [1; xDelta; xMidPt; scal.NxdotsG+1-xDelta; scal.NxdotsG];
yMidPt = (scal.NydotsG + 1) / 2;
yDelta = (yMidPt + 2) / 2;
yDelta = floor(yDelta);
yIndicies = [1; yDelta; yMidPt; scal.NydotsG+1-yDelta; scal.NydotsG];
indicesSelectedDots = [];
for xIndex = 1:length(xIndicies)
for yIndex = 1:length(yIndicies)
xCurr = xIndicies(xIndex);
yCurr = yIndicies(yIndex);
currIndex = ((xCurr - 1) * scal.NydotsG) + yCurr;
indicesSelectedDots = [indicesSelectedDots; currIndex];
end
end
indicesSelectedDots = 1:length(scal.XCALIBDOTS(:));
fSoftBeepVolume = 0.1;
%constants for dots and circledots
dots = [scal.XCALIBDOTS(:) scal.YCALIBDOTS(:)];
nDots = length(dots(:,1));
% Define dot parameters
dotDiam = 8; % Diameter of dots in pixels
selectedDotDiam = 2 * dotDiam; % Diameter of selected dots, in pixels
dotDiamArray = []; % Array containing the dot diameter for each dot.
% This allows us to keep the dotDiam and
% selectedDotDiam as constants and use this
% array to update the diameter or selected dots
% on each edit.
dotColor = colorWhite;
dotStyle = 2; % 0 = square pixels, 1 = circles, 2 = circles with antialiasing.
fprintf('\nbvlSelectFitPts: Begin fitting point selection...\n');
% calculate screen center
xmid = scal.rect(3) / 2 - 0.5;
ymid = scal.rect(4) / 2 - 0.5;
% Enable alpha blending with proper blend-function. We need it
% for drawing of smoothed points:
Screen('BlendFunction', scal.windowPtr, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
% bAbort = 0;
% while ~bAbort
%
% % Update dot diameters
% % Set all dots to default diameter
% dotDiamArray = [];
% dotDiamArray = zeros(size(dots,1), 1) + dotDiam;
% % Update diameters for selected dots
% dotDiamArray(indicesSelectedDots) = selectedDotDiam;
%
% % Fill to black
% Screen('FillRect', scal.windowPtr, colorBlack);
%
% bvlDrawCrosshair(scal.windowPtr, xmid, ymid, selectedDotDiam * 2, dotColor);
%
% % Draw dots
% %Screen('DrawDots', windowPtr, xy [,size] [,color] [,center] [,dot_type]);
% Screen('DrawDots', scal.windowPtr, transpose(dots), dotDiamArray, dotColor, [0 0], dotStyle);
%
% % Check for input
% [strInputName, xMouse, yMouse] = bvlWaitForInput(scal,0.010);
%
% % Handle specific keys we care about
% if strcmp(strInputName, 'ESCAPE')
% % Stop calibrating dots and return to Matlab
% bAbort = 1;
% Beeper('med', fSoftBeepVolume);
% elseif strcmp(strInputName, 'LeftMouse')
% newIndex = 0;
% location = [xMouse yMouse]
% dotDiffs = dots - (ones(nDots, 1) * location);
% dotDists = sqrt(dotDiffs(:,1).^2 + dotDiffs(:,2).^2);
% [dotDistance, newIndex] = min(dotDists);
% if (dotDistance > dotDiam)
% % Not close enough to a dot
% % Signal audio tone to let the user know they need
% % to try again
% Beeper('low');
% disp(dotDistance )
% disp(dotDiam)
% else
% existingIndex = find(indicesSelectedDots == newIndex);
% if isempty(existingIndex)
% % New dot, add it
% indicesSelectedDots = [indicesSelectedDots; newIndex];
% else
% % The dot was previously selected, unselect it
% indicesSelectedDots(existingIndex) = [];
% end
% end
% end
%
% % flip frame buffer to show all draw operations that happened in
% % this loop.
% Screen('Flip', scal.windowPtr);
% end
% Set timestamp to reenable mouse input
bvlAcceptCalibGuiInput(GetSecs);
% Store new selected indices
scal.FITDOTLIST = indicesSelectedDots;
scal.FITDOTLIST_ORG = scal.FITDOTLIST;
scal.SELECTXCALIBDOTS = scal.XCALIBDOTS(indicesSelectedDots);
scal.SELECTYCALIBDOTS = scal.YCALIBDOTS(indicesSelectedDots);
scal.SELECTXCALIBDOTS_ORG = scal.XCALIBDOTS_ORG(indicesSelectedDots);
scal.SELECTYCALIBDOTS_ORG = scal.YCALIBDOTS_ORG(indicesSelectedDots);
|