/usr/share/psychtoolbox-3/Psychometric/ComputeNakaRushton.m is in psychtoolbox-3-common 3.0.11.20140816.dfsg1-1.
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 | function [response] = ComputeNakaRushton(params,contrast)
% [response] = ComputeNakaRushton(params,contrast)
%
% Compute the Naka-Rushton function on passed vector of contrasts.
% Several different forms may be computed depending on length of
% passed params vector.
%
% length(params) == 2
% sigma = params(1)
% n = params(2)
% response = contrast^n/[contrast^n + sigma^n]
%
% length(params) == 3
% Rmax = params(1)
% sigma = params(2)
% n = params(3)
% response = Rmax*[contrast^n]/[contrast^n + sigma^n]
%
% length(params) == 4
% Rmax = params(1)
% sigma = params(2)
% n = params(3)
% m = params(4)
% response = Rmax*[contrast^n]/[contrast^m + sigma^m]
%
% 8/1/05 dhb, pr Wrote from FitLightnessOrient version
% 8/2/07 dhb Rewrote to allow several different forms depending
% on length of params.
% 12/5/10 dhb Expanded comment. Error check on input length
% 9/23/13 dhb Fix BAD bug. This wasn't computing what the comments said it was.
% Not sure when that crept in. The contrast in the numerator was
% being divided by sigma before being raised to the power n. No idea why.
% Extract parameter vector into meaningful variables
if (length(params) == 2)
A = 1;
sigma = params(1);
exponent = params(2);
exponent1 = params(2);
elseif (length(params) == 3)
A = params(1);
sigma = params(2);
exponent = params(3);
exponent1 = params(3);
elseif (length(params) == 4)
A = params(1);
sigma = params(2);
exponent = params(3);
exponent1 = params(4);
else
error('Inproper format for passed parameter vector');
end
% Check for bad contrast input
if (any(contrast < 0))
error('Cannot deal with negative contrast');
end
% Handle really weird parameter values
if (sigma < 0 || exponent < 0 || exponent1 < 0)
response = -1*ones(size(contrast));
else
% Now pump the linear response through a non-linearity
expContrast = (contrast).^exponent;
expContrast1 = contrast.^exponent1;
sigma1 = sigma.^exponent1;
response = A*(expContrast ./ (expContrast1 + sigma1));
end
|