/usr/share/psychtoolbox-3/PsychCal/UpdateAmbient.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 | function cal = UpdateAmbient(cal,newP_ambient,ADD)
% cal = UpdateAmbient(cal,newP_ambient,[ADD])
%
% Update the ambient light used in the conversions. The
% value of P_ambient in the structure is replaced with the
% passed value and the computed quantities that depend on
% it are updated.
%
% The ambient must be specified in the same measurement units as it
% was in the cal at the initial call to SetColorSpace. If different
% units are desired, all ambient fields in the structure must be updated
% and SetColorSpace called again. I have never wanted to do this,
% so I haven't written a separate routine.
%
% It is sometimes useful, however, to update the ambient in the
% linear color space defined by the call to SetColorSpace. To
% do this, use UpdateAmbientLinear.
%
%ÊIf flag ADD is true, passed ambient is added to current
% value. Otherwise passed value replaces current value.
% ADD is false if not passed. Use caution when setting ADD
% true -- if the ambient is changing during the experiment
% you typically don't want to keep adding multiple times.
%
% 11/17/93 dhb Wrote it.
% 8/4/96 dhb Updated for modern scheme.
% 8/21/97 dhb Update for structures.
% 3/2/98 dhb Fix bug in checks introduce 8/21/97, pointed out by dgp.
% 3/10/98 dhb Change T_ to P_.
% 10/26/99 dhb, mdr Fix bug in checks. There was also a variable name
% glitch. I don't think this could have worked the way
% it was. Perhaps no one calls it.
% 5/2/02 dhb, kr Add ADD flag.
% Set default on optional argument.
if (nargin < 3 || isempty(ADD))
ADD = 0;
end
% Check that passed data are compatible
oldP_ambient = cal.P_ambient;
T_ambient = cal.T_ambient;
S_ambient = cal.S_ambient;
if (isempty(oldP_ambient) || isempty(T_ambient) || isempty(S_ambient))
error('Calibration structure does not contain ambient data');
end
[nOld,mOld] = size(oldP_ambient);
[nNew,mNew] = size(newP_ambient);
if (nOld ~= nNew || mOld ~= mNew)
error('Old and new ambient specifications are not in same units');
end
% Update
if (~ADD)
cal.P_ambient = newP_ambient;
else
cal.P_ambient = cal.P_ambient + newP_ambient;
end
% Get conversion matrix and convert
M_ambient_linear = cal.M_ambient_linear;
if (isempty(M_ambient_linear))
error('SetColorSpace has not been called on this calibration structure');
end
ambient_linear = M_ambient_linear*cal.P_ambient;
cal.ambient_linear = ambient_linear;
|