/usr/share/psychtoolbox-3/PsychCal/CVIAdjustCalData.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 | function calData = CVIAdjustCalData(calData,cviData)
% calData = CVIAdjustCalData(calData,cviData)
%
% Use the fine spectral measurements taken with
% the CVI (see CVIMeasurePhosphors) to adjust
% the coarse spectral measurements taken with
% the PR-650. Actually, nothing about the
% method is particularly specific to the CVI
% and PR-650 devices, but the names in the
% structures are coded that way.
%
% 1/02/01 dhb, mpr Wrote it.
% Make sure calData and PR-650 portion
% of cviData have same wavelength spacing.
if (CheckWls(calData.S_device,cviData.pr650.S))
error('Wavelength sampling mismatch for PR-650 measurements.');
end
% For each phosphor, find scale factor between calibration (calData)
% and reference (cviData) measurements. Create new spectral data
% by scaling cvi reference measurement by the scale factor.
tempS = cviData.use.S;
temp = cviData.use.spectra;
for i = 1:3
factor(i) = cviData.pr650.spectra(:,i)\calData.P_device(:,i);
temp(:,i) = factor(i)*temp(:,i);
end
% Patch up calibration data
calData.S_device = tempS;
calData.P_device = temp;
calData.T_device = eye(tempS(3));
% Spline ambient to match new wavelength spacing. Could
% model the ambient as sum of three phosphors and recreate
% a finer version, but that would be a third order correction
% and could go wrong in cases where the ambient also had
% a contribution not from the monitor phosphors.
calData.P_ambient = ...
SplineSpd(calData.S_ambient,calData.P_ambient,tempS);
calData.S_ambient = tempS;
calData.T_ambient = eye(tempS(3));
|