/usr/share/psychtoolbox-3/PsychCal/DumpMonCalSpd.m is in psychtoolbox-3-common 3.0.14.20170103+git6-g605ff5c.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 | % DumpMonCalSpd
%
% This program reads a standard calibration file and
% reports what is in it.
%
% Assumes exactly three primaries. There
% may be rare cases where this is not the case, in which case
% you need to look at the calibration data by hand.
%
% This version assumes that the calibration file contains
% measured spectral data. It needs to be made more generic
% so that it can handle tristimulus and luminance calibrations.
%
% 8/22/97 dhb Wrote it.
% 2/25/98 dhb Postpend Spd to the name.
% 8/20/00 dhb Change name to dump.
% 3/1/02 dhb Arbitrary file names.
% 5/1/02 dhb Add DUMPALL flag.
% 9/26/08 dhb, ijk, tyl Made output easier to read. Only access named files.
% Assume three primaries.
% 5/27/11 dhb Update name of default monitor calibration.
% Initialize
clear; close all;
% Flags
DUMPALL = 1;
% Enter load code
defaultFileName = 'PTB3TestCal';
thePrompt = sprintf('Enter calibration filename [%s]: ',defaultFileName);
newFileName = input(thePrompt,'s');
if (isempty(newFileName))
newFileName = defaultFileName;
end
fprintf(1,'\nLoading from %s.mat\n',newFileName);
cal_CT = LoadCalFile(newFileName);
fprintf('Calibration file %s read\n\n',newFileName);
% Print out some information from the calibration.
DescribeMonCal(cal_CT);
% Provide information about gamma measurements
% This is probably not method-independent.
fprintf('Gamma measurements were made at %g levels\n',...
size(cal_CT.rawdata.rawGammaInput,1));
fprintf('Gamma table available at %g levels\n',...
size(cal_CT.gammaInput,1));
% Put up a plot of the essential data.
figure(1); clf; hold on
plot(SToWls(cal_CT.S_device),cal_CT.P_device(:,1),'r');
plot(SToWls(cal_CT.S_device),cal_CT.P_device(:,2),'g');
plot(SToWls(cal_CT.S_device),cal_CT.P_device(:,3),'b');
xlabel('Wavelength (nm)', 'Fontweight', 'bold');
ylabel('Power', 'Fontweight', 'bold');
title('Phosphor spectra', 'Fontsize', 13, 'Fontname', 'helvetica', 'Fontweight', 'bold');
axis([380,780,-Inf,Inf]);
% Gamma
figure(2);
if (size(cal_CT.rawdata.rawGammaTable,2) > 3)
subplot(1,2,1);
end
hold on
plot(cal_CT.rawdata.rawGammaInput,cal_CT.rawdata.rawGammaTable(:,1),'r+');
plot(cal_CT.rawdata.rawGammaInput,cal_CT.rawdata.rawGammaTable(:,2),'g+');
plot(cal_CT.rawdata.rawGammaInput,cal_CT.rawdata.rawGammaTable(:,3),'b+');
xlabel('Input value', 'Fontweight', 'bold');
ylabel('Normalized output', 'Fontweight', 'bold');
title('Gamma functions', 'Fontsize', 13, 'Fontname', 'helvetica', 'Fontweight', 'bold');
hold on
plot(cal_CT.gammaInput,cal_CT.gammaTable(:,1),'r');
plot(cal_CT.gammaInput,cal_CT.gammaTable(:,2),'g');
plot(cal_CT.gammaInput,cal_CT.gammaTable(:,3),'b');
hold off
if (size(cal_CT.rawdata.rawGammaTable,2) > 3)
subplot(1,2,2); hold on
plot(cal_CT.rawdata.rawGammaInput,cal_CT.rawdata.rawGammaTable(:,4),'r+');
plot(cal_CT.rawdata.rawGammaInput,cal_CT.rawdata.rawGammaTable(:,5),'g+');
plot(cal_CT.rawdata.rawGammaInput,cal_CT.rawdata.rawGammaTable(:,6),'b+');
xlabel('Input value', 'Fontweight', 'bold');
ylabel('Normalized output', 'Fontweight', 'bold');
title('Gamma functions', 'Fontsize', 13, 'Fontname', 'helvetica', 'Fontweight', 'bold');
hold on
plot(cal_CT.gammaInput,cal_CT.gammaTable(:,4),'r');
plot(cal_CT.gammaInput,cal_CT.gammaTable(:,5),'g');
plot(cal_CT.gammaInput,cal_CT.gammaTable(:,6),'b');
end
drawnow;
% Plot full spectral data for each phosphor
if (DUMPALL)
figure(2+cal_CT.nDevices+1); clf; hold on
load T_xyz1931
nDontPlotLowPower = 3;
T_xyz1931 = SplineCmf(S_xyz1931,683*T_xyz1931,cal_CT.describe.S);
for j = 1:cal_CT.nDevices
% Get channel measurements into columns of a matrix from raw data in calibration file.
tempMon = reshape(cal_CT.rawdata.mon(:,j),cal_CT.describe.S(3),cal_CT.describe.nMeas);
% Scale each measurement to the maximum spectrum to allow us to compare shapes visually.
maxSpectrum = tempMon(:,end);
scaledMon = tempMon;
for i = 1:cal_CT.describe.nMeas
scaledMon(:,i) = scaledMon(:,i)*(scaledMon(:,i)\maxSpectrum);
end
% Compute phosphor chromaticities
xyYMon = XYZToxyY(T_xyz1931*tempMon);
% Dump out min and max luminance
minLum = min(xyYMon(3,:));
maxLum = max(xyYMon(3,:));
fprintf('Primary %d, max luminance %0.2f cd/m2, min %0.2f cd/m2\n',j,maxLum,minLum);
% Plot raw spectra
figure(2+j); clf
subplot(1,2,1);
plot(SToWls(cal_CT.S_device),tempMon);
xlabel('Wavelength (nm)', 'Fontweight', 'bold');
ylabel('Power', 'Fontweight', 'bold');
axis([380,780,-Inf,Inf]);
% Plot scaled spectra
subplot(1,2,2);
plot(SToWls(cal_CT.S_device),scaledMon(:,nDontPlotLowPower+1:end));
xlabel('Wavelength (nm)', 'Fontweight', 'bold');
ylabel('Normalized Power', 'Fontweight', 'bold');
axis([380,780,-Inf,Inf]);
drawnow;
% Keep singular values
monSVs(:,i) = svd(tempMon);
% Plot chromaticities
figure(2+cal_CT.nDevices+1); hold on
plot(xyYMon(1,nDontPlotLowPower+1:end)',xyYMon(2,nDontPlotLowPower+1:end)','+');
end
end
% Plot chromaticities
figure(2+cal_CT.nDevices+1); hold on
plot(xyYMon(1,nDontPlotLowPower+1:end)',xyYMon(2,nDontPlotLowPower+1:end)','+');
axis([0.0 1 0 1]); axis('square');
xlabel('x chromaticity');
ylabel('y chromaticity');
return
|