From c0b89ac5bfb90835ef01573267020e42d4fe070c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Sun, 23 Aug 2015 12:17:05 +0200 Subject: Imported Upstream version 1.8.0 --- xicc/xspect.c | 3370 +++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 3012 insertions(+), 358 deletions(-) mode change 100644 => 100755 xicc/xspect.c (limited to 'xicc/xspect.c') diff --git a/xicc/xspect.c b/xicc/xspect.c old mode 100644 new mode 100755 index 477892b..1df8555 --- a/xicc/xspect.c +++ b/xicc/xspect.c @@ -52,7 +52,7 @@ #undef STOCKFWA /* [und] Use table shape else compute from flat line estimate*/ -#undef DEBUG /* [und] Extra printouts + debugging messages */ +#undef DEBUG /* [und] Extra printouts + debugging messages (need to uncomment) */ #undef DOPLOT /* [und] Plot FWA setup */ #undef DOPLOT_ALL_FWA /* [und] Plot all FWA corrected conversions */ #undef WRITE_FWA1_STIM /* [und] Write file "fwa1_stip.sp" when FWA is setup */ @@ -292,10 +292,11 @@ static xspect il_D65 = { }; #ifndef SALONEINSTLIB -/* General temperature Daylight spectra (Using CIE 1960 u,v CCT) */ +/* General temperature Daylight spectra (Using OLDER CIE 1960 u,v CCT) */ +/* 300 - 830nm ub 5nm intervals. */ /* Fill in the given xspect with the specified daylight illuminant */ /* Return nz if temperature is out of range */ -static int daylight_il(xspect *sp, double ct) { +static int daylight_old_il(xspect *sp, double ct) { static double s0[107] = { 0.04, 3.02, 6.00, 17.80, 29.60, 42.45, 55.30, 56.30, 57.30, 59.55, 61.80, 61.65, 61.50, 65.15, 68.80, 66.10, 63.40, 64.60, 65.80, 80.30, @@ -339,7 +340,147 @@ static int daylight_il(xspect *sp, double ct) { double xd, yd; double m1, m2; - if (ct < 4000.0 || ct > 25000.0) { /* Only accurate down to 4000 */ + if (ct < 2500.0 || ct > 25000.0) { /* Only accurate down to about 4000 */ + return 1; + } + + /* Compute chromaticity coordinates */ + if (ct < 7000.0) { + xd = -4.6070e9/(ct * ct * ct) + 2.9678e6/(ct * ct) + 0.09911e3/ct + 0.244063; + } else { + xd = -2.0064e9/(ct * ct * ct) + 1.9018e6/(ct * ct) + 0.24748e3/ct + 0.237040; + } + yd = -3.000 * xd * xd + 2.870 * xd - 0.275; + + /* Compute m factors */ + m1 = (-1.7703 * xd + 5.9114 * yd - 1.3515)/(0.2562 * xd - 0.7341 * yd + 0.0241); + m2 = (-31.4424 * xd + 30.0717 * yd + 0.0300)/(0.2562 * xd - 0.7341 * yd + 0.0241); + + /* Compute spectral values */ + for (i = 0; i < 107; i++) { + sp->spec[i] = s0[i] + m1 * s1[i] + m2 * s2[i]; + } + sp->spec_n = 107; + sp->spec_wl_short = 300.0; + sp->spec_wl_long = 830; + sp->norm = 100.0; /* Arbitrary */ + + return 0; +} + + +/* General temperature Daylight spectra from CIE 15.2004 Appendix C. */ +/* - uses improved interpolation. Assumes 1931 observer & 1 nm spacing. */ +/* 300 - 830nm ub 5nm intervals. */ +/* Fill in the given xspect with the specified daylight illuminant */ +/* Return nz if temperature is out of range */ +static int daylight_il(xspect *sp, double ct) { + static double s0[107] = { + 0.04000, -0.15625, 6.00000, 16.56625, 29.60000, + 43.80000, 55.30000, 57.62500, 57.30000, 59.69375, + 61.80000, 61.47500, 61.50000, 65.46875, 68.80000, + 66.40625, 63.40000, 62.45000, 65.80000, 79.82500, + 94.80000, 101.54375, 104.80000, 106.54375, 105.90000, + 100.35000, 96.80000, 104.05000, 113.90000, 120.82500, + 125.60000, 126.54375, 125.50000, 123.39375, 121.30000, + 121.52500, 121.30000, 117.42500, 113.50000, 112.95625, + 113.10000, 112.19375, 110.80000, 108.36250, 106.50000, + 107.60000, 108.80000, 107.25000, 105.30000, 104.90625, + 104.40000, 102.39375, 100.00000, 97.78125, 96.00000, + 95.67500, 95.10000, 91.95625, 89.10000, 89.43750, + 90.50000, 90.60625, 90.30000, 89.61250, 88.40000, + 86.01250, 84.00000, 84.47500, 85.10000, 83.52500, + 81.90000, 81.90625, 82.60000, 84.01875, 84.90000, + 83.83125, 81.30000, 76.22500, 71.90000, 72.38125, + 74.30000, 76.31875, 76.40000, 69.45625, 63.30000, + 66.35000, 71.70000, 75.61250, 77.00000, 72.52500, + 65.20000, 54.40625, 47.70000, 57.28125, 68.60000, + 68.04375, 65.00000, 65.58750, 66.00000, 64.04375, + 61.00000, 56.48750, 53.30000, 55.43125, 58.90000, + 61.71875, 61.90000 + }; + + static double s1[107] = { + 0.02000, -0.15000, 4.50000, 12.50500, 22.40000, + 33.40625, 42.00000, 42.46250, 40.60000, 41.23750, + 41.60000, 39.58750, 38.00000, 40.21875, 42.40000, + 40.94375, 38.50000, 35.98125, 35.00000, 38.80000, + 43.40000, 45.52500, 46.30000, 45.70625, 43.90000, + 40.37500, 37.10000, 36.52500, 36.70000, 36.48125, + 35.90000, 34.49375, 32.60000, 30.26875, 27.90000, + 26.06875, 24.30000, 22.21875, 20.10000, 18.07500, + 16.20000, 14.74375, 13.20000, 10.86875, 8.60000, + 7.18125, 6.10000, 5.13750, 4.20000, 3.05000, + 1.90000, 0.90625, 0.00000, -0.80000, -1.60000, + -2.65000, -3.50000, -3.47500, -3.50000, -4.56250, + -5.80000, -6.55625, -7.20000, -7.93125, -8.60000, + -9.05000, -9.50000, -10.26875, -10.90000, -10.80625, + -10.70000, -11.21250, -12.00000, -13.10625, -14.00000, + -14.02500, -13.60000, -12.69375, -12.00000, -12.57500, + -13.30000, -13.32500, -12.90000, -11.66250, -10.60000, + -10.91875, -11.60000, -12.08750, -12.20000, -11.38750, + -10.20000, -8.66250, -7.80000, -9.40000, -11.20000, + -11.00000, -10.40000, -10.50625, -10.60000, -10.25000, + -9.70000, -8.88125, -8.30000, -8.68125, -9.30000, + -9.79375, -9.80000 + }; + + static double s2[107] = { + 0.00000, 1.15625, 2.00000, 2.84375, 4.00000, + 6.41875, 8.50000, 8.50000, 7.80000, 7.29375, + 6.70000, 5.88125, 5.30000, 5.80625, 6.10000, + 4.71250, 3.00000, 2.05000, 1.20000, -0.10000, + -1.10000, -0.93125, -0.50000, -0.53125, -0.70000, + -0.87500, -1.20000, -1.91250, -2.60000, -2.84375, + -2.90000, -2.88125, -2.80000, -2.69375, -2.60000, + -2.63750, -2.60000, -2.21875, -1.80000, -1.61250, + -1.50000, -1.38750, -1.30000, -1.25000, -1.20000, + -1.12500, -1.00000, -0.75000, -0.50000, -0.38750, + -0.30000, -0.15000, 0.00000, 0.10000, 0.20000, + 0.26250, 0.50000, 1.25000, 2.10000, 2.69375, + 3.20000, 3.68125, 4.10000, 4.43125, 4.70000, + 4.83750, 5.10000, 5.88750, 6.70000, 7.01875, + 7.30000, 7.91250, 8.60000, 9.25625, 9.80000, + 10.19375, 10.20000, 9.19375, 8.30000, 8.90000, + 9.60000, 9.22500, 8.50000, 7.64375, 7.00000, + 7.18125, 7.60000, 7.91875, 8.00000, 7.46875, + 6.70000, 5.73125, 5.20000, 6.24375, 7.40000, + 7.22500, 6.80000, 6.90000, 7.00000, 6.76875, + 6.40000, 5.87500, 5.50000, 5.71875, 6.10000, + 6.43125, 6.50000, + }; + + /* M values for [1nm,5nm][1931,1964][M1,M2][g, h, i, j, k, l] */ + double ms[2][2][2][6] = { + { /* 1nm */ + { + { -1.77864, 5.90745, -1.34666, 0.25540, -0.73218, 0.02387 }, + { -31.44505, 30.06408, 0.03656, 0.25540, -0.73218, 0.02387 } + }, + { + { -1.57049, 5.56450, -1.31211, 0.21249, -0.71591, 0.04663 }, + { -30.15166, 31.07906, -0.73912, 0.21249, -0.71591, 0.04663 } + } + }, + { /* 5nm */ + { + { -1.77861, 5.90757, -1.34674, 0.25539, -0.73217, 0.02387 }, + { -31.44464, 30.06400, 0.03638, 0.25539, -0.73217, 0.02387 } + }, + { + { -1.57049, 5.56460, -1.31215, 0.21250, -0.71592, 0.04663 }, + { -30.15139, 31.07931, -0.73928, 0.21250, -0.71592, 0.04663 } + } + } + }; + + int i; + double xd, yd; + int obs = 0; /* 1931 */ + int sint = 0; /* 1nm */ + double m1, m2; + + if (ct < 2500.0 || ct > 25000.0) { /* Only accurate down to about 4000 */ return 1; } @@ -352,13 +493,16 @@ static int daylight_il(xspect *sp, double ct) { yd = -3.000 * xd * xd + 2.870 * xd - 0.275; /* Compute m factors */ - m1 = (-1.3515 - 1.7703 * xd + 5.9114 * yd)/(0.0241 + 0.2562 * xd - 0.7341 * yd); - m2 = (0.0300 - 31.4424 * xd + 30.0717 * yd)/(0.0241 + 0.2562 * xd - 0.7341 * yd); + m1 = (ms[sint][obs][0][0] * xd + ms[sint][obs][0][1] * yd + ms[sint][obs][0][2]) + / (ms[sint][obs][0][3] * xd + ms[sint][obs][0][4] * yd + ms[sint][obs][0][5]); + m2 = (ms[sint][obs][1][0] * xd + ms[sint][obs][1][1] * yd + ms[sint][obs][1][2]) + / (ms[sint][obs][1][3] * xd + ms[sint][obs][1][4] * yd + ms[sint][obs][1][5]); /* Compute spectral values */ for (i = 0; i < 107; i++) { sp->spec[i] = s0[i] + m1 * s1[i] + m2 * s2[i]; } + sp->spec_n = 107; sp->spec_wl_short = 300.0; sp->spec_wl_long = 830; @@ -369,8 +513,9 @@ static int daylight_il(xspect *sp, double ct) { #endif /* !SALONEINSTLIB */ -/* General temperature Planckian (black body) spectra */ +/* General temperature Planckian (black body) spectra using CIE 15:2004 */ /* Fill in the given xspect with the specified Planckian illuminant */ +/* normalised so that 560nm = 100. */ /* Return nz if temperature is out of range */ static int planckian_il(xspect *sp, double ct) { int i; @@ -386,19 +531,49 @@ static int planckian_il(xspect *sp, double ct) { /* Compute spectral values using Plank's radiation law: */ /* Normalise numbers by energy at 560 nm */ - wl = 1e-9 * 560; - norm = 0.01 * (3.74183e-16 * pow(wl, -5.0)) / (exp(1.4388e-2 / (wl * ct)) - 1.0); + norm = pow(560e-9, -5.0) / (exp(1.4388e-2 / (560e-9 * ct)) - 1.0); for (i = 0; i < sp->spec_n; i++) { wl = 1e-9 * XSPECT_XWL(sp, i); /* Wavelength in meters */ - sp->spec[i] = (3.74183e-16 * pow(wl, -5.0)) / (exp(1.4388e-2 / (wl * ct)) - 1.0); + sp->spec[i] = 100.0 * pow(wl, -5.0) / (exp(1.4388e-2 / (wl * ct)) - 1.0); sp->spec[i] /= norm; } - sp->norm = 100.0; /* Arbitrary */ + sp->norm = 100.0; /* value at 560 nm */ + + return 0; +} + +/* General temperature Planckian (black body) spectra using older formulation */ +/* Fill in the given xspect with the specified Planckian illuminant */ +/* normalised so that 560nm = 100. */ +/* Return nz if temperature is out of range */ +static int planckian_old_il(xspect *sp, double ct) { + int i; + double wl, norm; + + if (ct < 1.0 || ct > 1e6) /* set some arbitrary limits */ + return 1; + + /* Set out targets */ + sp->spec_n = 531; /* 1nm */ + sp->spec_wl_short = 300.0; + sp->spec_wl_long = 830; + + /* Compute spectral values using Plank's radiation law: */ + /* Normalise numbers by energy at 560 nm */ + norm = pow(560e-9, -5.0) / (exp(1.4350e-2 / (560e-9 * ct)) - 1.0); + for (i = 0; i < sp->spec_n; i++) { + wl = 1e-9 * XSPECT_XWL(sp, i); /* Wavelength in meters */ + sp->spec[i] = 100.0 * pow(wl, -5.0) / (exp(1.4350e-2 / (wl * ct)) - 1.0); + sp->spec[i] /= norm; + + } + sp->norm = 100.0; /* value at 560 nm */ return 0; } + #ifndef SALONEINSTLIB /* CIE F5 */ @@ -460,7 +635,7 @@ static xspect il_F10 = { 6.75, 34.39, 14.86, 10.40, 10.76, 10.67, 10.11, 9.27, 8.29, 7.29, 7.91, 16.64, 16.73, 10.44, 5.94, 3.34, 2.35, 1.88, 1.59, 1.47, 1.80, 5.71, 40.98, 73.69, 33.61, 8.24, 3.38, 2.47, 2.14, 4.86, - 11.45, 14.79, 12.16, 8.97, 6.53, 8.31, 44.12, 34.55, 12.09, 12.15, + 11.45, 14.79, 12.16, 8.97, 6.5, 8.31, 44.12, 34.55, 12.09, 12.15, 10.52, 4.43, 1.95, 2.19, 3.19, 2.77, 2.29, 2.00, 1.52, 1.35, 1.47, 1.79, 1.74, 1.02, 1.14, 3.32, 4.49, 2.05, 0.49, 0.24, 0.21, 0.21, 0.24, 0.24, 0.21, 0.17, 0.21, 0.22, 0.17, 0.12, @@ -569,16 +744,19 @@ double temp /* Optional temperature in degrees kelvin, for Dtemp and Ptemp * case icxIT_Spectrocam: *sp = il_Spectrocam; return 0; + case icxIT_ODtemp: + return daylight_old_il(sp, temp); case icxIT_Dtemp: return daylight_il(sp, temp); #endif + case icxIT_OPtemp: + return planckian_old_il(sp, temp); case icxIT_Ptemp: return planckian_il(sp, temp); } return 1; } - /* ------------- */ /* Observer Data */ @@ -1712,6 +1890,77 @@ static xspect ob_Shaw_Fairchild_2[3] = { } }; +/* EBU standard camera curves - 2012 */ +/* from Tech 3355 */ +static xspect ob_EBU_2012[3] = { + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000450, 0.001000, 0.001230, 0.001300, + 0.001300, 0.001190, 0.001120, 0.001040, 0.000930, + 0.000860, 0.000820, 0.000820, 0.000890, 0.000890, + 0.000970, 0.000890, 0.000890, 0.000890, 0.000930, + 0.001040, 0.001120, 0.001340, 0.001490, 0.001710, + 0.001790, 0.001670, 0.001410, 0.001150, 0.001120, + 0.001190, 0.001710, 0.005920, 0.015630, 0.032310, + 0.054310, 0.067330, 0.072830, 0.073060, 0.071650, + 0.068640, 0.063800, 0.059260, 0.054600, 0.049390, + 0.044370, 0.039570, 0.034540, 0.029440, 0.025030, + 0.021030, 0.017900, 0.014960, 0.012170, 0.009710, + 0.007740, 0.005880, 0.004350, 0.002900, 0.002000, + 0.001340, 0.000950, 0.000710, 0.000530, 0.000440, + 0.000310, 0.000190, 0.000060, 0.000000, 0.000000, + 0.000000, 0.000000 + } + }, + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000110, 0.000211, 0.000321, 0.000482, + 0.000562, 0.000633, 0.000753, 0.000934, 0.001175, + 0.001386, 0.001777, 0.002239, 0.002902, 0.003555, + 0.004488, 0.006175, 0.010664, 0.021297, 0.036343, + 0.046681, 0.054634, 0.059594, 0.062114, 0.063761, + 0.065066, 0.066341, 0.067426, 0.068018, 0.068109, + 0.066994, 0.063530, 0.054222, 0.041319, 0.025210, + 0.013264, 0.007350, 0.004418, 0.002611, 0.001707, + 0.001084, 0.000482, 0.000030, 0.000011, 0.000008, + 0.000006, 0.000003, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000 + } + }, + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.000000, 0.000215, 0.000649, 0.001397, 0.003902, + 0.007905, 0.014223, 0.021958, 0.029294, 0.036253, + 0.042739, 0.048916, 0.055513, 0.061881, 0.068628, + 0.073179, 0.075694, 0.077461, 0.078010, 0.074377, + 0.066582, 0.053601, 0.036619, 0.022597, 0.012366, + 0.008274, 0.006138, 0.004461, 0.003254, 0.002455, + 0.001996, 0.001707, 0.001407, 0.001228, 0.000998, + 0.000928, 0.000779, 0.000599, 0.000489, 0.000369, + 0.000329, 0.000260, 0.000190, 0.000110, 0.000070, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000 + } + } +}; + #ifdef NEVER CIE TC 1-36 proposed @@ -2649,6 +2898,11 @@ icxObserverType obType /* Type of observer */ sp[1] = &ob_Shaw_Fairchild_2[1]; sp[2] = &ob_Shaw_Fairchild_2[2]; return 0; + case icxOT_EBU_2012: + sp[0] = &ob_EBU_2012[0]; + sp[1] = &ob_EBU_2012[1]; + sp[2] = &ob_EBU_2012[2]; + return 0; #endif /* !SALONEINSTLIB */ default: return 1; @@ -2676,6 +2930,8 @@ char *standardObserverDescription(icxObserverType obType) { return "CIE 1964 10 degree observer (aligned)"; case icxOT_Shaw_Fairchild_2: return "Shaw & Fairchild 1997 2 degree observer"; + case icxOT_EBU_2012: + return "EBU Standard Camera 2012"; #endif /* !SALONEINSTLIB */ } return "Unknown observer"; @@ -2961,6 +3217,562 @@ static xspect CIE1995_TCS[] = { } }; +/* EBU TLCI ColorChecker samples */ +static xspect TLCI_2012_TCS[] = { + + /* 1 Dark skin */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.05400, 0.05700, 0.06300, 0.06600, 0.07500, + 0.07800, 0.07800, 0.07600, 0.07400, 0.07000, + 0.06600, 0.06400, 0.06200, 0.06000, 0.05900, + 0.06000, 0.05800, 0.06000, 0.06000, 0.06200, + 0.05800, 0.06300, 0.06300, 0.06700, 0.06800, + 0.07000, 0.07200, 0.07700, 0.07900, 0.08100, + 0.08100, 0.08300, 0.08300, 0.08400, 0.08400, + 0.08800, 0.09300, 0.09800, 0.10400, 0.11100, + 0.12100, 0.12700, 0.13300, 0.14000, 0.14400, + 0.14900, 0.15100, 0.15400, 0.16000, 0.16400, + 0.17000, 0.17500, 0.17900, 0.18400, 0.19300, + 0.20300, 0.21300, 0.22000, 0.23600, 0.24100, + 0.24800, 0.25700, 0.26900, 0.28000, 0.28900, + 0.30000, 0.31400, 0.33700, 0.34600, 0.36100, + 0.38200, 0.40400, 0.42500, 0.43900, 0.46400, + 0.47600, 0.49000 + } + }, + /* 2 Light skin */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.09200, 0.10900, 0.13400, 0.16100, 0.18600, + 0.20000, 0.20500, 0.20600, 0.20700, 0.20900, + 0.21100, 0.21300, 0.21600, 0.22100, 0.22700, + 0.23700, 0.24600, 0.25900, 0.27300, 0.28500, + 0.29400, 0.30400, 0.30500, 0.30900, 0.31400, + 0.32300, 0.33400, 0.34000, 0.33200, 0.31600, + 0.30000, 0.29200, 0.29000, 0.29500, 0.30000, + 0.30200, 0.29700, 0.29500, 0.30400, 0.32800, + 0.36500, 0.40900, 0.45000, 0.48800, 0.52000, + 0.54000, 0.55600, 0.56600, 0.57400, 0.58200, + 0.59300, 0.60200, 0.60700, 0.62500, 0.63100, + 0.63900, 0.65500, 0.66100, 0.68700, 0.69300, + 0.71100, 0.72200, 0.73700, 0.75700, 0.76800, + 0.78600, 0.79800, 0.81500, 0.82200, 0.82300, + 0.83500, 0.84500, 0.85500, 0.84800, 0.86200, + 0.86100, 0.86800 + } + }, + /* 3 Blue sky */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.10500, 0.12700, 0.16400, 0.21300, 0.27100, + 0.31400, 0.33300, 0.34400, 0.34500, 0.34400, + 0.34600, 0.34600, 0.34700, 0.34300, 0.33700, + 0.33300, 0.32700, 0.32400, 0.31900, 0.30600, + 0.29000, 0.28800, 0.28000, 0.27400, 0.26500, + 0.25800, 0.25000, 0.24000, 0.22900, 0.22000, + 0.21200, 0.20700, 0.20300, 0.19800, 0.19300, + 0.19100, 0.18700, 0.18100, 0.17400, 0.17000, + 0.16700, 0.16200, 0.15800, 0.16100, 0.15600, + 0.15200, 0.15000, 0.14500, 0.14200, 0.13700, + 0.13300, 0.13200, 0.12600, 0.12700, 0.12100, + 0.11800, 0.11500, 0.11500, 0.11200, 0.11000, + 0.11000, 0.10900, 0.10800, 0.10800, 0.10600, + 0.10500, 0.10500, 0.10600, 0.10600, 0.10500, + 0.10700, 0.10500, 0.10600, 0.10500, 0.10800, + 0.10700, 0.11000 + } + }, + /* 4 Foliage */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.05000, 0.05200, 0.05200, 0.05000, 0.05200, + 0.05200, 0.05200, 0.05300, 0.05100, 0.05300, + 0.05300, 0.05300, 0.05500, 0.05800, 0.05900, + 0.06100, 0.06000, 0.06300, 0.06300, 0.06700, + 0.06500, 0.06700, 0.06900, 0.07200, 0.07700, + 0.08800, 0.10500, 0.13200, 0.15900, 0.18200, + 0.19500, 0.19900, 0.19100, 0.18000, 0.16700, + 0.15600, 0.14400, 0.13300, 0.13100, 0.13000, + 0.12900, 0.12300, 0.11800, 0.11400, 0.11000, + 0.10200, 0.10100, 0.10300, 0.10400, 0.10500, + 0.10500, 0.10600, 0.10200, 0.10200, 0.10100, + 0.10100, 0.10100, 0.10100, 0.10700, 0.11500, + 0.13200, 0.15200, 0.18500, 0.23300, 0.28300, + 0.33900, 0.38300, 0.41900, 0.44400, 0.44500, + 0.46500, 0.47300, 0.47700, 0.48000, 0.48900, + 0.49200, 0.49800 + } + }, + /* 5 Blue flower */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.10100, 0.12700, 0.17000, 0.23300, 0.31000, + 0.37300, 0.40900, 0.42400, 0.43200, 0.43700, + 0.43700, 0.43800, 0.43700, 0.43200, 0.42800, + 0.42300, 0.41700, 0.41200, 0.40500, 0.39500, + 0.38000, 0.37300, 0.36400, 0.35500, 0.34200, + 0.33300, 0.31600, 0.29600, 0.26700, 0.24500, + 0.22700, 0.21200, 0.20600, 0.20300, 0.20300, + 0.20400, 0.19600, 0.19000, 0.19000, 0.19400, + 0.20100, 0.21000, 0.21600, 0.22500, 0.22800, + 0.23200, 0.23800, 0.24000, 0.23600, 0.23600, + 0.24000, 0.24800, 0.26100, 0.28900, 0.32200, + 0.36200, 0.40700, 0.44600, 0.48800, 0.51200, + 0.54600, 0.54600, 0.55500, 0.56300, 0.56400, + 0.57500, 0.57800, 0.58600, 0.59000, 0.58900, + 0.60100, 0.60400, 0.60600, 0.60500, 0.61400, + 0.61600, 0.61700 + } + }, + /* 6 Bluish green */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.10800, 0.13200, 0.16800, 0.21300, 0.26000, + 0.29200, 0.30800, 0.31700, 0.32000, 0.32800, + 0.33600, 0.34200, 0.35200, 0.36000, 0.37100, + 0.38600, 0.40500, 0.43300, 0.46500, 0.49700, + 0.52800, 0.55700, 0.57600, 0.59100, 0.58600, + 0.59100, 0.58600, 0.58200, 0.56700, 0.55900, + 0.54500, 0.53300, 0.51200, 0.49200, 0.47200, + 0.44500, 0.42900, 0.40200, 0.38000, 0.35500, + 0.33200, 0.30900, 0.28400, 0.26200, 0.24700, + 0.23300, 0.22400, 0.21700, 0.21200, 0.20900, + 0.20700, 0.20500, 0.20000, 0.19800, 0.19900, + 0.19700, 0.19900, 0.20300, 0.21000, 0.21600, + 0.21800, 0.22600, 0.23200, 0.23600, 0.23800, + 0.24200, 0.24200, 0.23900, 0.23200, 0.22700, + 0.22900, 0.23000, 0.23700, 0.24800, 0.25600, + 0.26900, 0.27400 + } + }, + /* 7 Orange */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.05200, 0.05400, 0.05200, 0.05000, 0.05200, + 0.05200, 0.05200, 0.05100, 0.05000, 0.05000, + 0.05200, 0.05000, 0.05100, 0.05100, 0.05200, + 0.05100, 0.05100, 0.05300, 0.05300, 0.05400, + 0.05500, 0.05600, 0.05500, 0.05800, 0.06100, + 0.06300, 0.06800, 0.07700, 0.08600, 0.09800, + 0.12000, 0.14500, 0.17500, 0.20600, 0.23600, + 0.27000, 0.30200, 0.34100, 0.37500, 0.41000, + 0.44000, 0.46700, 0.48800, 0.50900, 0.51800, + 0.53200, 0.54000, 0.55100, 0.55700, 0.56200, + 0.56800, 0.57500, 0.58100, 0.58400, 0.58500, + 0.59000, 0.60100, 0.59600, 0.60000, 0.59600, + 0.60400, 0.60300, 0.60600, 0.60700, 0.60800, + 0.61500, 0.61700, 0.62100, 0.62200, 0.61900, + 0.62500, 0.62800, 0.63000, 0.62700, 0.63500, + 0.63900, 0.64000 + } + }, + /* 8 Purplish blue */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.09400, 0.11300, 0.14100, 0.18600, 0.23500, + 0.27500, 0.29700, 0.31600, 0.31700, 0.33300, + 0.34600, 0.35500, 0.36800, 0.37800, 0.38100, + 0.37700, 0.36800, 0.35600, 0.34000, 0.32200, + 0.29600, 0.26900, 0.24100, 0.22000, 0.19700, + 0.18200, 0.16600, 0.15100, 0.13800, 0.12700, + 0.12000, 0.11500, 0.10800, 0.10400, 0.10100, + 0.09500, 0.09000, 0.08400, 0.08200, 0.08100, + 0.08100, 0.08100, 0.08100, 0.08300, 0.08300, + 0.08000, 0.07900, 0.08000, 0.08100, 0.08100, + 0.08400, 0.08900, 0.09200, 0.09600, 0.10300, + 0.10700, 0.11200, 0.11100, 0.11200, 0.10900, + 0.10400, 0.10200, 0.09900, 0.09900, 0.10000, + 0.10000, 0.10300, 0.10600, 0.10900, 0.11300, + 0.12200, 0.12700, 0.13800, 0.15300, 0.17300, + 0.19300, 0.21500 + } + }, + /* 9 Moderate red */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.08800, 0.10200, 0.12100, 0.13600, 0.15100, + 0.15300, 0.15100, 0.14400, 0.14200, 0.14100, + 0.13900, 0.13500, 0.13600, 0.13500, 0.13300, + 0.13200, 0.12900, 0.13000, 0.12900, 0.12700, + 0.12100, 0.11800, 0.10900, 0.10500, 0.10500, + 0.10400, 0.10100, 0.10000, 0.09400, 0.09100, + 0.08900, 0.09200, 0.09500, 0.09700, 0.10400, + 0.10900, 0.11100, 0.11300, 0.11600, 0.13400, + 0.16700, 0.22300, 0.29100, 0.36200, 0.42600, + 0.47400, 0.51100, 0.53700, 0.55100, 0.56200, + 0.56500, 0.57000, 0.57500, 0.57400, 0.57900, + 0.57700, 0.57900, 0.57700, 0.58000, 0.58100, + 0.57900, 0.58100, 0.58100, 0.58300, 0.58100, + 0.58100, 0.58000, 0.58600, 0.58500, 0.58400, + 0.58900, 0.58700, 0.59000, 0.58200, 0.58900, + 0.59200, 0.59000 + } + }, + /* 10 Purple */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.08300, 0.10000, 0.12500, 0.15400, 0.18300, + 0.19800, 0.20600, 0.20700, 0.20700, 0.20100, + 0.19400, 0.18400, 0.17500, 0.16300, 0.15400, + 0.14200, 0.12900, 0.12000, 0.10900, 0.10200, + 0.09500, 0.09000, 0.08100, 0.07700, 0.07000, + 0.06700, 0.06500, 0.06300, 0.05900, 0.05800, + 0.05600, 0.05300, 0.05200, 0.05200, 0.05100, + 0.05300, 0.05500, 0.05600, 0.05400, 0.05200, + 0.05300, 0.04900, 0.05100, 0.05500, 0.05800, + 0.06300, 0.07300, 0.08700, 0.10300, 0.12000, + 0.13700, 0.14900, 0.16100, 0.17500, 0.18800, + 0.19700, 0.20800, 0.21800, 0.22900, 0.24100, + 0.24900, 0.26200, 0.27200, 0.28400, 0.29200, + 0.30400, 0.31200, 0.32500, 0.32900, 0.33300, + 0.34300, 0.34600, 0.35000, 0.35000, 0.35900, + 0.36000, 0.36200 + } + }, + /* 11 Yellow green */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.04500, 0.04800, 0.05000, 0.05000, 0.05400, + 0.05300, 0.05300, 0.05500, 0.05300, 0.05700, + 0.05900, 0.05900, 0.06200, 0.06500, 0.07000, + 0.07500, 0.08100, 0.09200, 0.10200, 0.11600, + 0.13600, 0.15800, 0.18500, 0.22500, 0.27400, + 0.32800, 0.39000, 0.44600, 0.48500, 0.51100, + 0.52900, 0.53800, 0.53900, 0.53500, 0.52600, + 0.52100, 0.51100, 0.50000, 0.48400, 0.46700, + 0.45000, 0.43500, 0.41200, 0.39500, 0.37700, + 0.36300, 0.35200, 0.34600, 0.33900, 0.33700, + 0.33700, 0.33100, 0.32600, 0.32200, 0.32300, + 0.32000, 0.32500, 0.32700, 0.33400, 0.34000, + 0.34700, 0.35500, 0.36200, 0.36900, 0.37300, + 0.37600, 0.37500, 0.37900, 0.37200, 0.36500, + 0.36700, 0.37500, 0.37900, 0.38800, 0.40300, + 0.41500, 0.43000 + } + }, + /* 12 Orange yellow */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.04900, 0.05200, 0.05400, 0.05500, 0.05400, + 0.05700, 0.05700, 0.05900, 0.05700, 0.05700, + 0.05900, 0.05700, 0.05800, 0.06000, 0.06100, + 0.06100, 0.06200, 0.06700, 0.07200, 0.08100, + 0.08800, 0.09800, 0.10600, 0.11200, 0.12000, + 0.13000, 0.14300, 0.16300, 0.18800, 0.21800, + 0.25600, 0.30400, 0.35100, 0.39900, 0.44200, + 0.47600, 0.50500, 0.53200, 0.54400, 0.56100, + 0.57900, 0.53900, 0.59700, 0.60400, 0.61700, + 0.61700, 0.61800, 0.62400, 0.62500, 0.63000, + 0.64700, 0.63500, 0.63800, 0.64200, 0.64900, + 0.65000, 0.64900, 0.65000, 0.67700, 0.65700, + 0.65300, 0.65900, 0.65800, 0.66200, 0.66100, + 0.66600, 0.66800, 0.67200, 0.67100, 0.66700, + 0.67700, 0.67800, 0.68200, 0.67800, 0.68600, + 0.69300, 0.69000 + } + }, + /* 13 Blue */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.06800, 0.08400, 0.10400, 0.12700, 0.15600, + 0.17800, 0.19400, 0.20900, 0.22100, 0.23400, + 0.25000, 0.26400, 0.28700, 0.30800, 0.31800, + 0.32300, 0.31700, 0.30300, 0.27600, 0.25500, + 0.22500, 0.19300, 0.16000, 0.13900, 0.11700, + 0.10400, 0.08700, 0.07700, 0.06600, 0.06000, + 0.05600, 0.05300, 0.05000, 0.04700, 0.04500, + 0.04200, 0.04300, 0.04000, 0.04000, 0.03800, + 0.03800, 0.03700, 0.03600, 0.03700, 0.03800, + 0.03600, 0.03700, 0.03700, 0.03700, 0.03900, + 0.03900, 0.04200, 0.04000, 0.04200, 0.04400, + 0.04500, 0.04700, 0.04800, 0.05000, 0.04800, + 0.04600, 0.05000, 0.04800, 0.05100, 0.04900, + 0.05200, 0.05400, 0.05700, 0.06000, 0.06500, + 0.06900, 0.07600, 0.08700, 0.10200, 0.12300, + 0.14700, 0.17400 + } + }, + /* 14 Green */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.04500, 0.04800, 0.05400, 0.05400, 0.05700, + 0.05900, 0.06000, 0.06000, 0.06000, 0.06200, + 0.05400, 0.06400, 0.06900, 0.07000, 0.07500, + 0.07900, 0.08300, 0.09000, 0.09900, 0.10900, + 0.12000, 0.13200, 0.14400, 0.15800, 0.17500, + 0.19600, 0.23100, 0.27200, 0.30700, 0.33800, + 0.35200, 0.35700, 0.35300, 0.34100, 0.32300, + 0.30500, 0.28600, 0.26500, 0.24400, 0.22400, + 0.20300, 0.18000, 0.16100, 0.14400, 0.12400, + 0.10800, 0.09800, 0.08900, 0.08400, 0.08000, + 0.07600, 0.07500, 0.07100, 0.07100, 0.07000, + 0.06700, 0.06700, 0.06700, 0.06800, 0.07000, + 0.07000, 0.07400, 0.07600, 0.07900, 0.08000, + 0.08200, 0.08600, 0.08500, 0.08300, 0.08100, + 0.08100, 0.08100, 0.08300, 0.08600, 0.09100, + 0.09400, 0.09800 + } + }, + /* 15 Red */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.04300, 0.04500, 0.04600, 0.04500, 0.04700, + 0.04600, 0.04800, 0.04600, 0.04600, 0.04600, + 0.04800, 0.04400, 0.04600, 0.04700, 0.04700, + 0.04700, 0.04600, 0.04600, 0.04400, 0.04400, + 0.04000, 0.04200, 0.03900, 0.04000, 0.04000, + 0.03900, 0.04000, 0.04000, 0.03800, 0.03800, + 0.03900, 0.03800, 0.04000, 0.04000, 0.04100, + 0.04200, 0.04400, 0.04600, 0.04700, 0.05400, + 0.06400, 0.08100, 0.11200, 0.15600, 0.21600, + 0.28300, 0.35800, 0.43400, 0.49900, 0.54900, + 0.58500, 0.60700, 0.62400, 0.63300, 0.65000, + 0.65200, 0.65200, 0.65600, 0.66100, 0.66600, + 0.66400, 0.67100, 0.67100, 0.67700, 0.67300, + 0.67800, 0.68000, 0.68900, 0.68800, 0.68500, + 0.69100, 0.69400, 0.69600, 0.69200, 0.69800, + 0.70400, 0.70000 + } + }, + /* 16 Yellow */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.04700, 0.04700, 0.04800, 0.04700, 0.05000, + 0.05200, 0.05200, 0.05100, 0.05100, 0.05300, + 0.05300, 0.05300, 0.05700, 0.05600, 0.05800, + 0.06000, 0.06200, 0.06700, 0.07600, 0.09000, + 0.10900, 0.14200, 0.18300, 0.22800, 0.27400, + 0.31900, 0.36000, 0.40500, 0.44300, 0.47500, + 0.51000, 0.54400, 0.57100, 0.59400, 0.61200, + 0.63000, 0.64600, 0.65600, 0.66800, 0.67700, + 0.69100, 0.69600, 0.70100, 0.70200, 0.72900, + 0.70100, 0.70400, 0.70700, 0.70800, 0.71300, + 0.72100, 0.71600, 0.71700, 0.71800, 0.72600, + 0.72900, 0.73000, 0.72800, 0.74700, 0.73900, + 0.73700, 0.74300, 0.74000, 0.75600, 0.74200, + 0.74900, 0.75100, 0.75300, 0.75400, 0.75000, + 0.76000, 0.76200, 0.76900, 0.76200, 0.77400, + 0.77600, 0.77900 + } + }, + /* 17 Magenta */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.10600, 0.12900, 0.16800, 0.22900, 0.29700, + 0.34600, 0.36700, 0.37200, 0.37700, 0.37300, + 0.36200, 0.35100, 0.34000, 0.32300, 0.30600, + 0.29300, 0.27600, 0.25900, 0.25000, 0.23400, + 0.22000, 0.20600, 0.19000, 0.17900, 0.16900, + 0.16300, 0.15200, 0.14000, 0.12600, 0.11300, + 0.10400, 0.09800, 0.09800, 0.10200, 0.10400, + 0.10300, 0.10400, 0.10300, 0.10600, 0.11800, + 0.14000, 0.17000, 0.21200, 0.25700, 0.31300, + 0.35400, 0.40300, 0.45700, 0.50100, 0.54600, + 0.58700, 0.61200, 0.63700, 0.65500, 0.67700, + 0.68400, 0.69300, 0.69500, 0.71400, 0.71000, + 0.72000, 0.71500, 0.71400, 0.73900, 0.71900, + 0.72600, 0.72800, 0.73300, 0.73700, 0.73200, + 0.74300, 0.74200, 0.74800, 0.74100, 0.75300, + 0.75400, 0.76100 + } + }, + /* 18 Cyan */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.08500, 0.10200, 0.13000, 0.16300, 0.20100, + 0.22800, 0.24700, 0.25400, 0.26200, 0.27800, + 0.28200, 0.30000, 0.31900, 0.33200, 0.34800, + 0.36300, 0.38200, 0.40100, 0.41900, 0.43100, + 0.43800, 0.44100, 0.43800, 0.42900, 0.41500, + 0.40400, 0.38100, 0.35800, 0.33900, 0.31600, + 0.28800, 0.26200, 0.23600, 0.21000, 0.18600, + 0.16200, 0.14200, 0.12900, 0.11600, 0.10500, + 0.09900, 0.09200, 0.08800, 0.08600, 0.08100, + 0.07700, 0.07800, 0.07600, 0.07600, 0.07600, + 0.07600, 0.07600, 0.07600, 0.07700, 0.07800, + 0.07700, 0.08100, 0.08000, 0.08100, 0.07900, + 0.07900, 0.07900, 0.07700, 0.07600, 0.07500, + 0.07400, 0.07400, 0.07600, 0.07700, 0.08100, + 0.08400, 0.09000, 0.09800, 0.11100, 0.13000, + 0.15100, 0.17900 + } + }, + /* 19 White */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.12600, 0.16900, 0.21200, 0.26400, 0.31800, + 0.49100, 0.66400, 0.75700, 0.85100, 0.86800, + 0.88700, 0.88800, 0.89000, 0.89300, 0.89500, + 0.89600, 0.89800, 0.90000, 0.90200, 0.90000, + 0.89700, 0.90400, 0.90100, 0.90000, 0.90000, + 0.89800, 0.89700, 0.90000, 0.90200, 0.90200, + 0.90100, 0.90000, 0.89900, 0.89600, 0.89300, + 0.89500, 0.89800, 0.90000, 0.90200, 0.90400, + 0.90500, 0.90600, 0.90700, 0.90500, 0.90300, + 0.90400, 0.90500, 0.90700, 0.89800, 0.89700, + 0.89600, 0.89800, 0.90000, 0.90000, 0.89900, + 0.90100, 0.90400, 0.90400, 0.90500, 0.90200, + 0.89900, 0.89900, 0.90000, 0.89900, 0.89800, + 0.89800, 0.89900, 0.89800, 0.89800, 0.89900, + 0.90100, 0.89800, 0.89600, 0.89500, 0.89800, + 0.89900, 0.89800 + } + }, + /* 20 Neutral 8 */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.08400, 0.11300, 0.14100, 0.17600, 0.21100, + 0.32700, 0.44200, 0.50400, 0.56700, 0.57800, + 0.59000, 0.59100, 0.59200, 0.59400, 0.59500, + 0.59600, 0.59700, 0.59900, 0.60000, 0.59900, + 0.59700, 0.60200, 0.59900, 0.59900, 0.59900, + 0.59700, 0.59700, 0.59900, 0.60000, 0.60000, + 0.59900, 0.59900, 0.59800, 0.59600, 0.59400, + 0.59500, 0.59700, 0.59900, 0.60000, 0.60200, + 0.60200, 0.60300, 0.60400, 0.60200, 0.60100, + 0.60200, 0.60200, 0.60400, 0.59700, 0.59700, + 0.59600, 0.59700, 0.59900, 0.59900, 0.59800, + 0.59900, 0.60200, 0.60200, 0.60200, 0.60000, + 0.59800, 0.59800, 0.59900, 0.59800, 0.59700, + 0.59700, 0.59800, 0.59700, 0.59700, 0.59800, + 0.59900, 0.59700, 0.59600, 0.59500, 0.59700, + 0.59800, 0.59700 + } + }, + /* 21 Neutral 6.5 */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.05100, 0.06800, 0.08500, 0.10600, 0.12800, + 0.19800, 0.26700, 0.30500, 0.34200, 0.34900, + 0.35700, 0.35700, 0.35800, 0.35900, 0.36000, + 0.36000, 0.36100, 0.36200, 0.36300, 0.36200, + 0.36100, 0.36400, 0.36200, 0.36200, 0.36200, + 0.36100, 0.36100, 0.36200, 0.36300, 0.36300, + 0.36200, 0.36200, 0.36100, 0.36000, 0.35900, + 0.36000, 0.36100, 0.36200, 0.36300, 0.36400, + 0.36400, 0.36400, 0.36500, 0.36400, 0.36300, + 0.36400, 0.36400, 0.36500, 0.36100, 0.36100, + 0.36000, 0.36100, 0.36200, 0.36200, 0.36100, + 0.36200, 0.36400, 0.36400, 0.36400, 0.36300, + 0.36100, 0.36100, 0.36200, 0.36100, 0.36100, + 0.36100, 0.36100, 0.36100, 0.36100, 0.36100, + 0.36200, 0.36100, 0.36000, 0.36000, 0.36100, + 0.36100, 0.36100 + } + }, + /* 22 Neutral 5 */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.02770, 0.03720, 0.04650, 0.05800, 0.06980, + 0.10790, 0.14570, 0.16630, 0.18690, 0.19070, + 0.19470, 0.19490, 0.19540, 0.19600, 0.19650, + 0.19670, 0.19710, 0.19760, 0.19800, 0.19760, + 0.19690, 0.19850, 0.19780, 0.19760, 0.19760, + 0.19710, 0.19690, 0.19760, 0.19800, 0.19800, + 0.19780, 0.19760, 0.19740, 0.19670, 0.19600, + 0.19650, 0.19710, 0.19760, 0.19800, 0.19850, + 0.19870, 0.19890, 0.19910, 0.19870, 0.19820, + 0.19850, 0.19870, 0.19910, 0.19710, 0.19690, + 0.19670, 0.19710, 0.19760, 0.19760, 0.19740, + 0.19780, 0.19850, 0.19850, 0.19870, 0.19800, + 0.19740, 0.19740, 0.19760, 0.19740, 0.19710, + 0.19710, 0.19740, 0.19710, 0.19710, 0.19740, + 0.19780, 0.19710, 0.19670, 0.19650, 0.19710, + 0.19740, 0.19710 + } + }, + /* 23 Neutral 3.5 */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.01260, 0.01690, 0.02120, 0.02640, 0.03180, + 0.04910, 0.06640, 0.07570, 0.08510, 0.08680, + 0.08860, 0.08870, 0.08890, 0.08930, 0.08950, + 0.08960, 0.08980, 0.09000, 0.09020, 0.09000, + 0.08970, 0.09040, 0.09010, 0.09000, 0.09000, + 0.08980, 0.08970, 0.09000, 0.09020, 0.09020, + 0.09010, 0.09000, 0.08990, 0.08960, 0.08930, + 0.08950, 0.08980, 0.09000, 0.09020, 0.09040, + 0.09050, 0.09060, 0.09070, 0.09050, 0.09030, + 0.09040, 0.09050, 0.09070, 0.08980, 0.08970, + 0.08960, 0.08980, 0.09000, 0.09000, 0.08990, + 0.09010, 0.09040, 0.09040, 0.09050, 0.09020, + 0.08990, 0.08990, 0.09000, 0.08990, 0.08980, + 0.08980, 0.08990, 0.08980, 0.08980, 0.08990, + 0.09010, 0.08980, 0.08960, 0.08950, 0.08980, + 0.08990, 0.08980 + } + }, + /* 24 Black */ + { + 77, 380.0, 760.0, /* 77 bands from 380 to 760 nm in 5nm steps */ + 1.0, /* Scale factor */ + { + 0.00439, 0.00589, 0.00737, 0.00919, 0.01105, + 0.01708, 0.02308, 0.02635, 0.02961, 0.03020, + 0.03084, 0.03087, 0.03094, 0.03105, 0.03112, + 0.03115, 0.03122, 0.03129, 0.03136, 0.03129, + 0.03119, 0.03143, 0.03133, 0.03129, 0.03129, + 0.03122, 0.03119, 0.03129, 0.03136, 0.03136, + 0.03133, 0.03129, 0.03126, 0.03115, 0.03105, + 0.03112, 0.03122, 0.03129, 0.03136, 0.03143, + 0.03147, 0.03150, 0.03154, 0.03147, 0.03140, + 0.03143, 0.03147, 0.03154, 0.03122, 0.03119, + 0.03115, 0.03122, 0.03129, 0.03129, 0.03126, + 0.03133, 0.03143, 0.03143, 0.03147, 0.03136, + 0.03126, 0.03126, 0.03129, 0.03126, 0.03122, + 0.03122, 0.03126, 0.03122, 0.03122, 0.03126, + 0.03133, 0.03122, 0.03115, 0.03112, 0.03122, + 0.03126, 0.03122 + } + } +}; /* -------------------------------- */ /* Fluorescent Whitening Agent Data */ @@ -3076,7 +3888,7 @@ int write_nxspect(char *fname, xspect *sp, int nspec, int type) { return 0; } -/* restore a set of spectrum from a CGATS file. */ +/* Restore a set of spectrum from a CGATS file. */ /* Up to nspec will be restored starting at offset off.. */ /* The number restored from the file will be written to *nret */ /* type: 0 = any, mask: 1 = SPECT, 2 = CMF, 4 = ccss */ @@ -3221,8 +4033,10 @@ int write_cmf(char *fname, xspect sp[3]) { int read_cmf(xspect sp[3], char *fname) { int rv, nret; - if ((rv = read_nxspect(sp, fname, &nret, 0, 3, 2)) != 0) + if ((rv = read_nxspect(sp, fname, &nret, 0, 3, 2)) != 0) { + DBG("read_nxspect failed\n"); return rv; + } if (nret != 3) { DBG("Didn't read three spectra\n"); return 1; @@ -3578,6 +4392,49 @@ void xspect_plot(xspect *sp1, xspect *sp2, xspect *sp3) { do_plot(xx, y1, sp2 != NULL ? y2 : NULL, sp3 != NULL ? y3 : NULL, j); } + +/* Plot up to 10 spectra */ +void xspect_plot10(xspect *sp, int n) { + double xx[XSPECT_MAX_BANDS]; + double *yp[10]; + double yy[10][XSPECT_MAX_BANDS]; + double wl, wlshort, wllong; + int i, j; + + for (i = 0; i < 10; i++) + yp[i] = NULL; + + if (sp == NULL) + return; + + wlshort = sp->spec_wl_short; + wllong = sp->spec_wl_long; + + for (i = 0; i < n; i++) { + if (sp[i].spec_wl_short < wlshort) + wlshort = sp[i].spec_wl_short; + if (sp[i].spec_wl_long > wllong) + wllong = sp[i].spec_wl_long; + } + + wlshort = floor(wlshort + 0.5); + wllong = floor(wllong + 0.5); + + /* Compute at 1nm intervals over the whole range covered */ + for (j = 0, wl = wlshort; j < XSPECT_MAX_BANDS && wl < wllong; j++, wl += 1.0) { +#if defined(__APPLE__) && defined(__POWERPC__) + gcc_bug_fix(j); +#endif + xx[j] = wl; + for (i = 0; i < n; i++) { + yp[i] = yy[i]; + yy[i][j] = value_xspect(&sp[i], wl); + } + } + do_plot10(xx, yp[0], yp[1], yp[2], yp[3], yp[4], + yp[5], yp[6], yp[7], yp[8], yp[9], j, 0); +} + /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* Given an emission spectrum, set the UV output to the given level. */ @@ -3787,7 +4644,7 @@ static int xsp2cie_set_fwa_imp(xsp2cie *p) { DBG("set_fwa started\n"); - p->bw = 1.0; /* Intergrate over 1nm bands */ + p->fwa_bw = 1.0; /* Intergrate over 1nm bands */ p->oillum = p->illuminant; /* Take copy of observer illuminant */ xspect_denorm(&p->oillum); if (p->tillum.spec_n == 0) { /* If not set by set_fwa(), copy observer illuminant */ @@ -3801,7 +4658,7 @@ static int xsp2cie_set_fwa_imp(xsp2cie *p) { double Iim; /* illuminant multiplier */ Iim = 0.0; - for (ww = p->observer[1].spec_wl_short; ww <= p->observer[1].spec_wl_long; ww += p->bw) { + for (ww = p->spec_wl_short; ww <= p->spec_wl_long; ww += p->spec_bw) { double O, I; getval_lxspec(&p->iillum, &I, ww); getval_lxspec(&p->observer[1], &O, ww); @@ -3824,7 +4681,7 @@ static int xsp2cie_set_fwa_imp(xsp2cie *p) { scale = 0.0; Itm = 0.0; - for (ww = p->observer[1].spec_wl_short; ww <= p->observer[1].spec_wl_long; ww += p->bw) { + for (ww = p->spec_wl_short; ww <= p->spec_wl_long; ww += p->spec_bw) { double O, I; getval_lxspec(&p->tillum, &I, ww); getval_lxspec(&p->observer[1], &O, ww); @@ -3865,7 +4722,7 @@ static int xsp2cie_set_fwa_imp(xsp2cie *p) { scale = 0.0; Itm = 0.0; - for (ww = p->observer[1].spec_wl_short; ww <= p->observer[1].spec_wl_long; ww += p->bw) { + for (ww = p->spec_wl_short; ww <= p->spec_wl_long; ww += p->spec_bw) { double O, I; getval_lxspec(&p->oillum, &I, ww); getval_lxspec(&p->observer[1], &O, ww); @@ -3890,7 +4747,7 @@ static int xsp2cie_set_fwa_imp(xsp2cie *p) { /* Find darkest point between 450 and 510nm */ ar = 1e6; - for (ww = 450.0; ww <= 510.0; ww += p->bw) { + for (ww = 450.0; ww <= 510.0; ww += p->fwa_bw) { double rr; getval_lxspec(&p->imedia, &rr, ww); DBGF((DBGA,"media %f = %f\n",ww,rr)); @@ -3903,7 +4760,7 @@ static int xsp2cie_set_fwa_imp(xsp2cie *p) { /* Find lightest point between A point+70 and 650 */ br = -1.0; - for (ww = aw+70.0; ww <= 630.0; ww += p->bw) { + for (ww = aw+70.0; ww <= 630.0; ww += p->fwa_bw) { double rr; getval_lxspec(&p->imedia, &rr, ww); DBGF((DBGA,"media %f = %f\n",ww,rr)); @@ -3921,7 +4778,7 @@ static int xsp2cie_set_fwa_imp(xsp2cie *p) { /* Compute an Em that explains the bump over the flat line */ Em = 0.0; - for (ww = FWA1_emit.spec_wl_short; ww <= (FWA1_emit.spec_wl_long - 100.0); ww += p->bw) { + for (ww = FWA1_emit.spec_wl_short; ww <= (FWA1_emit.spec_wl_long - 100.0); ww += p->fwa_bw) { double Rl, rr; /* Compute value of line at this wavelength */ @@ -4085,7 +4942,7 @@ static int xsp2cie_set_fwa_imp(xsp2cie *p) { /* Compute level of UV stimulating FWA */ p->Sm = 0.0; - for (ww = FWA1_stim.spec_wl_short; ww <= FWA1_stim.spec_wl_long; ww += p->bw) { + for (ww = FWA1_stim.spec_wl_short; ww <= FWA1_stim.spec_wl_long; ww += p->fwa_bw) { double Ii; double Su; @@ -4099,7 +4956,7 @@ static int xsp2cie_set_fwa_imp(xsp2cie *p) { /* Compute FWA content of this media, for information purposes */ p->FWAc = 0.0; - for (ww = p->emits.spec_wl_short; ww <= p->emits.spec_wl_long; ww += p->bw) { + for (ww = p->emits.spec_wl_short; ww <= p->emits.spec_wl_long; ww += p->fwa_bw) { double Eu; getval_lxspec(&p->emits, &Eu, ww); /* FWA emission at this wavelength */ @@ -4250,7 +5107,7 @@ xspect *in /* Spectrum to be converted */ Emc = Emct = 0.0; for (k = 0; k < 4; k++) { Smct = Smc = 0.0; - for (ww = FWA1_stim.spec_wl_short; ww <= FWA1_stim.spec_wl_long; ww += p->bw) { + for (ww = FWA1_stim.spec_wl_short; ww <= FWA1_stim.spec_wl_long; ww += p->fwa_bw) { double Kc; /* FWA contribution for instrument illum */ double Kct; /* FWA contribution for target illum */ double Ii; /* Instrument illuminant level */ @@ -4312,9 +5169,9 @@ xspect *in /* Spectrum to be converted */ #endif /* DEBUG */ } - /* Compute CIE output over observer range in 1nm increments */ + /* Compute CIE output over observer range in bw increments */ scale = 0.0; - for (ww = p->observer[1].spec_wl_short; ww <= p->observer[1].spec_wl_long; ww += p->bw) { + for (ww = p->spec_wl_short; ww <= p->spec_wl_long; ww += p->spec_bw) { double Kc; /* FWA contribution for instrument illum */ double Kct; /* FWA contribution for target illum */ double Ii; /* Instrument illuminant level */ @@ -4421,10 +5278,10 @@ xspect *in /* Spectrum to be converted */ /* Do it again for output over optional returned spectrum range */ if (sout != NULL) { - tsout.spec_n = in->spec_n; + tsout.spec_n = in->spec_n; tsout.spec_wl_short = in->spec_wl_short; - tsout.spec_wl_long = in->spec_wl_long; - tsout.norm = in->norm; + tsout.spec_wl_long = in->spec_wl_long; + tsout.norm = in->norm; for (i = 0; i < in->spec_n; i++) { double Kc; /* FWA contribution for instrument illum */ @@ -4527,7 +5384,7 @@ xspect *in /* Spectrum to be converted, normalised by norm */ Emc = 0.0; for (k = 0; k < 4; k++) { Smc = 0.0; - for (ww = FWA1_stim.spec_wl_short; ww <= FWA1_stim.spec_wl_long; ww += p->bw) { + for (ww = FWA1_stim.spec_wl_short; ww <= FWA1_stim.spec_wl_long; ww += p->fwa_bw) { double Kc; /* FWA contribution for instrument illum */ double Ii; /* Instrument illuminant level */ double Su; /* FWA sensitivity */ @@ -4639,7 +5496,7 @@ xspect *in /* Colorant reflectance to be applied */ Emc = 0.0; for (k = 0; k < 4; k++) { Smc = 0.0; - for (ww = FWA1_stim.spec_wl_short; ww <= FWA1_stim.spec_wl_long; ww += p->bw) { + for (ww = FWA1_stim.spec_wl_short; ww <= FWA1_stim.spec_wl_long; ww += p->fwa_bw) { double Kc; /* FWA contribution for instrument illum */ double Ii; /* Instrument illuminant level */ double Eu; /* FWA emmission profile */ @@ -4722,6 +5579,18 @@ xspect *in /* Colorant reflectance to be applied */ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #endif /* !SALONEINSTLIB */ +/* Override the integration wavelength range and step size */ +static void xsp2cie_set_int_steps( +xsp2cie *p, /* this */ +double bw, /* Integration step size (nm) */ +double wl_short, /* Starting nm */ +double wl_long /* Ending nm */ +) { + p->spec_bw = bw; + p->spec_wl_short = wl_short; + p->spec_wl_long = wl_long; +} + /* Do the normal spectral to CIE conversion. */ /* Note that the input spectrum normalisation value is used. */ /* Emissive spectral values are assumed to be in mW/nm, and sampled */ @@ -4748,18 +5617,20 @@ xspect *in /* Spectrum to be converted */ /* values are truncated at the extremes, then the last valid values */ /* are used, also consistent with CIE and ANSI CGATS recommendations. */ out[j] = 0.0; - for (ww = p->observer[j].spec_wl_short; ww <= p->observer[j].spec_wl_long; ww += 1.0) { + for (ww = p->spec_wl_short; ww <= p->spec_wl_long; ww += p->spec_bw) { double I = 1.0, O, S; if (!p->isemis) getval_xspec(&p->illuminant, &I, ww); getval_xspec(&p->observer[j], &O, ww); getval_xspec(in, &S, ww); if (j == 1) - scale += I * O; /* Integrate Y illuminant/observer values */ + scale += I * O; /* Integrate Y illuminant * observer values */ out[j] += I * O * S; } } if (p->isemis) { + // Hmm. Should we really make scale += O for this case and then + // scale = 0.683002/scale ?? scale = 0.683002; /* Convert from mW/m^2 to Lumens/m^2 */ /* (== 683 Luments/Watt/m^2) */ } else { @@ -4917,6 +5788,11 @@ icxClamping clamp /* NZ to clamp XYZ/Lab to be +ve */ p->observer[1] = ob_Shaw_Fairchild_2[1]; p->observer[2] = ob_Shaw_Fairchild_2[2]; break; + case icxOT_EBU_2012: + p->observer[0] = ob_EBU_2012[0]; + p->observer[1] = ob_EBU_2012[1]; + p->observer[2] = ob_EBU_2012[2]; + break; #endif /* !SALONEINSTLIB */ default: DBGF((DBGA,"new_xsp2cie() unrecognised observer type 0x%x\n",obType)); @@ -4938,18 +5814,23 @@ icxClamping clamp /* NZ to clamp XYZ/Lab to be +ve */ p->clamp = clamp; - p->convert = xsp2cie_convert; - p->sconvert = xsp2cie_sconvert; - p->get_cie_il = xsp2cie_get_cie_il; + p->spec_bw = 1.0; /* 1nm integration */ + p->spec_wl_short = p->observer[1].spec_wl_short; + p->spec_wl_long = p->observer[1].spec_wl_long; + + p->set_int_steps = xsp2cie_set_int_steps; + p->convert = xsp2cie_convert; + p->sconvert = xsp2cie_sconvert; + p->get_cie_il = xsp2cie_get_cie_il; #ifndef SALONEINSTLIB - p->set_mw = xsp2cie_set_mw; /* Default no media white */ - p->set_fwa = xsp2cie_set_fwa; /* Default no FWA compensation */ + p->set_mw = xsp2cie_set_mw; /* Default no media white */ + p->set_fwa = xsp2cie_set_fwa; /* Default no FWA compensation */ p->update_fwa_custillum = xsp2cie_update_fwa_custillum; - p->get_fwa_info = xsp2cie_get_fwa_info; - p->extract = xsp2cie_extract; - p->apply = xsp2cie_apply; + p->get_fwa_info = xsp2cie_get_fwa_info; + p->extract = xsp2cie_extract; + p->apply = xsp2cie_apply; #endif /* !SALONEINSTLIB */ - p->del = xsp2cie_del; + p->del = xsp2cie_del; return p; } @@ -5001,33 +5882,118 @@ int icx_spectrum_locus(double xyz[3], double wl, icxObserverType obType) { /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* Pre-calculated spectral locuses of Daylight and Plankian at 5 Mired intervals, */ -/* created using illlocus.c */ +/* used by the fast but slightly less accurate CCT support icx_XYZ2ill_ct2() */ +/* Created using illlocus.c */ + /* These aren't actually spectrum, they are XYZ values */ /* indexed by temperature in Mired */ -static xspect illoc_Daylight_CIE_1931_2[3] = { +static xspect illoc_Plankian_CIE_1931_2[3] = { { - 69, 60.000000, 400.000000, + 481, 40.000000, 1000.000000, 1.0, { - 0.970635, 0.968292, 0.966045, 0.963906, 0.961884, - 0.959990, 0.958232, 0.956618, 0.955155, 0.953850, - 0.952710, 0.951740, 0.950945, 0.950330, 0.949899, - 0.949656, 0.949604, 0.949747, 0.950085, 0.950619, - 0.951352, 0.952283, 0.953413, 0.954741, 0.956265, - 0.957984, 0.959896, 0.961999, 0.964289, 0.966764, - 0.969419, 0.972251, 0.975254, 0.978425, 0.981759, - 0.985248, 0.988889, 0.992674, 0.996597, 1.000651, - 1.004828, 1.009121, 1.013522, 1.018021, 1.022611, - 1.027281, 1.032021, 1.036822, 1.041673, 1.046562, - 1.051478, 1.056409, 1.061342, 1.066265, 1.071163, - 1.076024, 1.080834, 1.085577, 1.090239, 1.094805, - 1.099259, 1.103586, 1.107771, 1.111796, 1.115647, - 1.119306, 1.122759, 1.125989, 1.128981 + 1.001190, 1.000021, 0.998861, 0.997711, 0.996571, + 0.995444, 0.994330, 0.993229, 0.992143, 0.991072, + 0.990017, 0.988980, 0.987961, 0.986960, 0.985979, + 0.985018, 0.984078, 0.983159, 0.982263, 0.981390, + 0.980540, 0.979714, 0.978913, 0.978137, 0.977387, + 0.976663, 0.975965, 0.975295, 0.974652, 0.974036, + 0.973449, 0.972890, 0.972359, 0.971858, 0.971385, + 0.970942, 0.970529, 0.970145, 0.969791, 0.969468, + 0.969174, 0.968910, 0.968677, 0.968474, 0.968301, + 0.968159, 0.968047, 0.967965, 0.967914, 0.967893, + 0.967902, 0.967941, 0.968010, 0.968109, 0.968238, + 0.968396, 0.968584, 0.968802, 0.969049, 0.969325, + 0.969629, 0.969963, 0.970325, 0.970715, 0.971134, + 0.971581, 0.972055, 0.972558, 0.973087, 0.973644, + 0.974227, 0.974838, 0.975475, 0.976138, 0.976827, + 0.977542, 0.978282, 0.979048, 0.979839, 0.980655, + 0.981495, 0.982360, 0.983249, 0.984162, 0.985098, + 0.986058, 0.987041, 0.988047, 0.989076, 0.990127, + 0.991200, 0.992295, 0.993412, 0.994551, 0.995711, + 0.996891, 0.998093, 0.999315, 1.000557, 1.001820, + 1.003102, 1.004404, 1.005726, 1.007066, 1.008426, + 1.009804, 1.011201, 1.012616, 1.014050, 1.015501, + 1.016970, 1.018456, 1.019960, 1.021480, 1.023018, + 1.024572, 1.026143, 1.027729, 1.029332, 1.030951, + 1.032586, 1.034236, 1.035901, 1.037581, 1.039276, + 1.040986, 1.042711, 1.044450, 1.046203, 1.047970, + 1.049751, 1.051546, 1.053354, 1.055175, 1.057010, + 1.058857, 1.060718, 1.062591, 1.064477, 1.066375, + 1.068285, 1.070207, 1.072141, 1.074087, 1.076045, + 1.078013, 1.079994, 1.081985, 1.083987, 1.086000, + 1.088024, 1.090059, 1.092103, 1.094159, 1.096224, + 1.098299, 1.100384, 1.102479, 1.104584, 1.106698, + 1.108822, 1.110954, 1.113096, 1.115247, 1.117407, + 1.119575, 1.121752, 1.123938, 1.126132, 1.128334, + 1.130544, 1.132763, 1.134989, 1.137223, 1.139465, + 1.141715, 1.143972, 1.146236, 1.148508, 1.150786, + 1.153072, 1.155365, 1.157665, 1.159971, 1.162284, + 1.164604, 1.166930, 1.169263, 1.171601, 1.173946, + 1.176297, 1.178654, 1.181017, 1.183386, 1.185760, + 1.188140, 1.190526, 1.192917, 1.195313, 1.197715, + 1.200122, 1.202534, 1.204951, 1.207372, 1.209799, + 1.212231, 1.214667, 1.217107, 1.219553, 1.222002, + 1.224456, 1.226915, 1.229377, 1.231844, 1.234315, + 1.236790, 1.239268, 1.241751, 1.244237, 1.246727, + 1.249221, 1.251718, 1.254219, 1.256723, 1.259230, + 1.261741, 1.264255, 1.266772, 1.269292, 1.271816, + 1.274342, 1.276871, 1.279403, 1.281938, 1.284475, + 1.287015, 1.289558, 1.292103, 1.294651, 1.297201, + 1.299753, 1.302308, 1.304865, 1.307424, 1.309985, + 1.312548, 1.315113, 1.317681, 1.320250, 1.322821, + 1.325393, 1.327968, 1.330544, 1.333122, 1.335701, + 1.338282, 1.340865, 1.343448, 1.346034, 1.348620, + 1.351208, 1.353797, 1.356387, 1.358979, 1.361571, + 1.364165, 1.366759, 1.369355, 1.371951, 1.374548, + 1.377146, 1.379745, 1.382345, 1.384945, 1.387546, + 1.390147, 1.392749, 1.395352, 1.397955, 1.400559, + 1.403162, 1.405767, 1.408371, 1.410976, 1.413581, + 1.416186, 1.418792, 1.421397, 1.424003, 1.426609, + 1.429214, 1.431820, 1.434425, 1.437031, 1.439636, + 1.442241, 1.444846, 1.447451, 1.450055, 1.452659, + 1.455263, 1.457866, 1.460469, 1.463072, 1.465674, + 1.468275, 1.470876, 1.473477, 1.476077, 1.478676, + 1.481274, 1.483872, 1.486469, 1.489065, 1.491661, + 1.494255, 1.496849, 1.499442, 1.502034, 1.504625, + 1.507215, 1.509804, 1.512392, 1.514979, 1.517565, + 1.520150, 1.522734, 1.525316, 1.527898, 1.530478, + 1.533057, 1.535634, 1.538211, 1.540786, 1.543359, + 1.545932, 1.548503, 1.551072, 1.553640, 1.556207, + 1.558772, 1.561335, 1.563897, 1.566458, 1.569017, + 1.571574, 1.574130, 1.576684, 1.579236, 1.581787, + 1.584336, 1.586883, 1.589429, 1.591972, 1.594514, + 1.597054, 1.599593, 1.602129, 1.604664, 1.607196, + 1.609727, 1.612256, 1.614782, 1.617307, 1.619830, + 1.622351, 1.624869, 1.627386, 1.629901, 1.632413, + 1.634924, 1.637432, 1.639938, 1.642442, 1.644944, + 1.647444, 1.649941, 1.652436, 1.654929, 1.657420, + 1.659908, 1.662394, 1.664878, 1.667359, 1.669838, + 1.672315, 1.674790, 1.677261, 1.679731, 1.682198, + 1.684663, 1.687125, 1.689585, 1.692042, 1.694497, + 1.696949, 1.699399, 1.701846, 1.704291, 1.706733, + 1.709173, 1.711610, 1.714044, 1.716476, 1.718905, + 1.721331, 1.723755, 1.726176, 1.728594, 1.731010, + 1.733423, 1.735833, 1.738241, 1.740646, 1.743048, + 1.745447, 1.747844, 1.750238, 1.752629, 1.755017, + 1.757402, 1.759785, 1.762164, 1.764541, 1.766915, + 1.769286, 1.771654, 1.774019, 1.776382, 1.778741, + 1.781098, 1.783451, 1.785802, 1.788150, 1.790494, + 1.792836, 1.795175, 1.797511, 1.799843, 1.802173, + 1.804500, 1.806824, 1.809144, 1.811462, 1.813777, + 1.816088, 1.818397, 1.820702, 1.823004, 1.825303, + 1.827600, 1.829893, 1.832182, 1.834469, 1.836753, + 1.839033, 1.841311, 1.843585, 1.845856, 1.848124, + 1.850388, 1.852650, 1.854908, 1.857163, 1.859415, + 1.861664, 1.863909, 1.866152, 1.868391, 1.870627, + 1.872859, 1.875088, 1.877315, 1.879537, 1.881757, + 1.883973, 1.886186, 1.888396, 1.890603, 1.892806, + 1.895006 } }, { - 69, 60.000000, 400.000000, + 481, 40.000000, 1000.000000, 1.0, { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, @@ -5043,80 +6009,1366 @@ static xspect illoc_Daylight_CIE_1931_2[3] = { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, - 1.000000, 1.000000, 1.000000, 1.000000 - } - }, - { - 69, 60.000000, 400.000000, - 1.0, - { - 1.787622, 1.747661, 1.707659, 1.667701, 1.627864, - 1.588223, 1.548842, 1.509780, 1.471093, 1.432827, - 1.395026, 1.357727, 1.320965, 1.284767, 1.249158, - 1.214160, 1.179790, 1.146125, 1.113225, 1.081024, - 1.049542, 1.018793, 0.988790, 0.959541, 0.931050, - 0.903320, 0.876351, 0.850140, 0.824684, 0.799977, - 0.776012, 0.752780, 0.730272, 0.708479, 0.687390, - 0.666992, 0.647275, 0.628227, 0.609834, 0.592085, - 0.574967, 0.558466, 0.542572, 0.527270, 0.512549, - 0.498396, 0.484799, 0.471746, 0.459226, 0.447227, - 0.435739, 0.424749, 0.414250, 0.404229, 0.394677, - 0.385586, 0.376946, 0.368749, 0.360986, 0.353651, - 0.346735, 0.340234, 0.334139, 0.328447, 0.323151, - 0.318248, 0.313734, 0.309607, 0.305862 - } + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000 + } + }, + { + 481, 40.000000, 1000.000000, + 1.0, + { + 1.963589, 1.948210, 1.932763, 1.917253, 1.901688, + 1.886072, 1.870411, 1.854712, 1.838981, 1.823223, + 1.807443, 1.791649, 1.775844, 1.760035, 1.744226, + 1.728424, 1.712632, 1.696857, 1.681103, 1.665375, + 1.649677, 1.634014, 1.618391, 1.602811, 1.587278, + 1.571797, 1.556372, 1.541005, 1.525701, 1.510463, + 1.495294, 1.480197, 1.465176, 1.450233, 1.435370, + 1.420591, 1.405897, 1.391292, 1.376777, 1.362354, + 1.348026, 1.333793, 1.319659, 1.305623, 1.291689, + 1.277856, 1.264128, 1.250503, 1.236985, 1.223573, + 1.210269, 1.197073, 1.183986, 1.171008, 1.158141, + 1.145385, 1.132739, 1.120205, 1.107783, 1.095472, + 1.083273, 1.071187, 1.059212, 1.047349, 1.035599, + 1.023960, 1.012432, 1.001016, 0.989711, 0.978517, + 0.967433, 0.956459, 0.945595, 0.934840, 0.924194, + 0.913655, 0.903225, 0.892901, 0.882684, 0.872572, + 0.862566, 0.852664, 0.842867, 0.833172, 0.823580, + 0.814090, 0.804701, 0.795412, 0.786223, 0.777133, + 0.768140, 0.759245, 0.750447, 0.741744, 0.733136, + 0.724623, 0.716202, 0.707875, 0.699638, 0.691493, + 0.683438, 0.675472, 0.667595, 0.659805, 0.652102, + 0.644486, 0.636954, 0.629507, 0.622143, 0.614862, + 0.607663, 0.600545, 0.593508, 0.586550, 0.579671, + 0.572870, 0.566146, 0.559498, 0.552926, 0.546429, + 0.540006, 0.533656, 0.527379, 0.521173, 0.515039, + 0.508975, 0.502980, 0.497055, 0.491197, 0.485407, + 0.479683, 0.474025, 0.468433, 0.462905, 0.457441, + 0.452040, 0.446701, 0.441424, 0.436208, 0.431053, + 0.425958, 0.420921, 0.415943, 0.411023, 0.406160, + 0.401354, 0.396604, 0.391908, 0.387268, 0.382682, + 0.378149, 0.373669, 0.369241, 0.364865, 0.360540, + 0.356266, 0.352042, 0.347867, 0.343741, 0.339663, + 0.335634, 0.331651, 0.327715, 0.323825, 0.319981, + 0.316182, 0.312428, 0.308718, 0.305051, 0.301428, + 0.297847, 0.294308, 0.290811, 0.287356, 0.283941, + 0.280566, 0.277231, 0.273935, 0.270678, 0.267460, + 0.264279, 0.261137, 0.258031, 0.254962, 0.251929, + 0.248932, 0.245971, 0.243045, 0.240153, 0.237295, + 0.234472, 0.231682, 0.228924, 0.226200, 0.223508, + 0.220848, 0.218219, 0.215621, 0.213055, 0.210519, + 0.208013, 0.205536, 0.203089, 0.200672, 0.198282, + 0.195922, 0.193589, 0.191284, 0.189007, 0.186756, + 0.184533, 0.182336, 0.180165, 0.178020, 0.175900, + 0.173806, 0.171737, 0.169692, 0.167672, 0.165676, + 0.163703, 0.161754, 0.159829, 0.157926, 0.156046, + 0.154189, 0.152353, 0.150540, 0.148748, 0.146978, + 0.145229, 0.143501, 0.141793, 0.140106, 0.138439, + 0.136792, 0.135164, 0.133556, 0.131968, 0.130398, + 0.128847, 0.127315, 0.125801, 0.124305, 0.122827, + 0.121366, 0.119924, 0.118498, 0.117090, 0.115698, + 0.114323, 0.112965, 0.111623, 0.110297, 0.108987, + 0.107692, 0.106413, 0.105150, 0.103901, 0.102668, + 0.101449, 0.100245, 0.099055, 0.097880, 0.096719, + 0.095571, 0.094438, 0.093318, 0.092212, 0.091118, + 0.090038, 0.088971, 0.087917, 0.086875, 0.085846, + 0.084829, 0.083825, 0.082832, 0.081852, 0.080883, + 0.079926, 0.078980, 0.078046, 0.077123, 0.076211, + 0.075310, 0.074419, 0.073540, 0.072671, 0.071812, + 0.070964, 0.070126, 0.069298, 0.068480, 0.067672, + 0.066874, 0.066085, 0.065306, 0.064536, 0.063775, + 0.063023, 0.062281, 0.061547, 0.060822, 0.060106, + 0.059399, 0.058700, 0.058009, 0.057327, 0.056653, + 0.055987, 0.055329, 0.054679, 0.054036, 0.053402, + 0.052775, 0.052156, 0.051544, 0.050939, 0.050342, + 0.049752, 0.049169, 0.048593, 0.048023, 0.047461, + 0.046906, 0.046357, 0.045814, 0.045279, 0.044749, + 0.044226, 0.043710, 0.043199, 0.042695, 0.042197, + 0.041704, 0.041218, 0.040737, 0.040262, 0.039793, + 0.039330, 0.038872, 0.038420, 0.037973, 0.037531, + 0.037095, 0.036664, 0.036238, 0.035817, 0.035401, + 0.034990, 0.034584, 0.034183, 0.033787, 0.033396, + 0.033009, 0.032627, 0.032249, 0.031876, 0.031508, + 0.031144, 0.030784, 0.030428, 0.030077, 0.029730, + 0.029387, 0.029049, 0.028714, 0.028383, 0.028056, + 0.027734, 0.027415, 0.027100, 0.026788, 0.026480, + 0.026177, 0.025876, 0.025579, 0.025286, 0.024996, + 0.024710, 0.024427, 0.024148, 0.023872, 0.023599, + 0.023329, 0.023063, 0.022800, 0.022540, 0.022283, + 0.022029, 0.021778, 0.021530, 0.021285, 0.021043, + 0.020804, 0.020568, 0.020334, 0.020104, 0.019876, + 0.019651, 0.019428, 0.019208, 0.018991, 0.018776, + 0.018564, 0.018354, 0.018147, 0.017942, 0.017740, + 0.017540, 0.017343, 0.017148, 0.016955, 0.016764, + 0.016576, 0.016390, 0.016206, 0.016024, 0.015845, + 0.015668, 0.015492, 0.015319, 0.015148, 0.014979, + 0.014811, 0.014646, 0.014483, 0.014322, 0.014162, + 0.014005, 0.013849, 0.013695, 0.013543, 0.013393, + 0.013245, 0.013098, 0.012953, 0.012810, 0.012668, + 0.012528, 0.012390, 0.012253, 0.012118, 0.011985, + 0.011853, 0.011723, 0.011594, 0.011467, 0.011341, + 0.011217, 0.011094, 0.010972, 0.010852, 0.010734, + 0.010617, 0.010501, 0.010386, 0.010273, 0.010161, + 0.010051, 0.009942, 0.009834, 0.009727, 0.009621, + 0.009517, 0.009414, 0.009312, 0.009212, 0.009112, + 0.009014, 0.008917, 0.008821, 0.008726, 0.008632, + 0.008540, 0.008448, 0.008357, 0.008268, 0.008180, + 0.008092 + } } }; -static xspect illoc_Plankian_CIE_1931_2[3] = { +static xspect illoc_Daylight_CIE_1931_2[3] = { { - 189, 60.000000, 1000.000000, + 181, 40.000000, 400.000000, 1.0, { - 0.990017, 0.987458, 0.985018, 0.982708, 0.980540, - 0.978522, 0.976663, 0.974970, 0.973449, 0.972105, - 0.970942, 0.969965, 0.969174, 0.968572, 0.968159, - 0.967936, 0.967902, 0.968056, 0.968396, 0.968922, - 0.969629, 0.970517, 0.971581, 0.972819, 0.974227, - 0.975803, 0.977542, 0.979441, 0.981495, 0.983702, - 0.986058, 0.988559, 0.991200, 0.993979, 0.996891, - 0.999934, 1.003102, 1.006394, 1.009804, 1.013331, - 1.016970, 1.020718, 1.024572, 1.028529, 1.032586, - 1.036739, 1.040986, 1.045325, 1.049751, 1.054263, - 1.058857, 1.063532, 1.068285, 1.073113, 1.078013, - 1.082985, 1.088024, 1.093130, 1.098299, 1.103530, - 1.108822, 1.114170, 1.119575, 1.125034, 1.130544, - 1.136105, 1.141715, 1.147371, 1.153072, 1.158817, - 1.164604, 1.170431, 1.176297, 1.182201, 1.188140, - 1.194115, 1.200122, 1.206161, 1.212231, 1.218329, - 1.224456, 1.230610, 1.236790, 1.242994, 1.249221, - 1.255470, 1.261741, 1.268032, 1.274342, 1.280670, - 1.287015, 1.293376, 1.299753, 1.306144, 1.312548, - 1.318965, 1.325393, 1.331833, 1.338282, 1.344741, - 1.351208, 1.357683, 1.364165, 1.370653, 1.377146, - 1.383645, 1.390147, 1.396654, 1.403162, 1.409674, - 1.416186, 1.422700, 1.429214, 1.435728, 1.442241, - 1.448753, 1.455263, 1.461771, 1.468275, 1.474777, - 1.481274, 1.487767, 1.494255, 1.500738, 1.507215, - 1.513686, 1.520150, 1.526607, 1.533057, 1.539498, - 1.545932, 1.552356, 1.558772, 1.565178, 1.571574, - 1.577960, 1.584336, 1.590701, 1.597054, 1.603397, - 1.609727, 1.616045, 1.622351, 1.628644, 1.634924, - 1.641190, 1.647444, 1.653683, 1.659908, 1.666119, - 1.672315, 1.678497, 1.684663, 1.690814, 1.696949, - 1.703069, 1.709173, 1.715260, 1.721331, 1.727386, - 1.733423, 1.739444, 1.745447, 1.751433, 1.757402, - 1.763353, 1.769286, 1.775201, 1.781098, 1.786976, - 1.792836, 1.798677, 1.804500, 1.810304, 1.816088, - 1.821853, 1.827600, 1.833326, 1.839033, 1.844721, - 1.850388, 1.856036, 1.861664, 1.867272, 1.872859, - 1.878426, 1.883973, 1.889500, 1.895006 + 0.980513, 0.979463, 0.978420, 0.977383, 0.976353, + 0.975333, 0.974322, 0.973321, 0.972332, 0.971354, + 0.970390, 0.969439, 0.968503, 0.967582, 0.966676, + 0.965787, 0.964916, 0.964062, 0.963227, 0.962412, + 0.961616, 0.960840, 0.960086, 0.959353, 0.958642, + 0.957953, 0.957288, 0.956646, 0.956029, 0.955436, + 0.954867, 0.954325, 0.953808, 0.953317, 0.952852, + 0.952415, 0.952005, 0.951622, 0.951268, 0.950941, + 0.950643, 0.950374, 0.950135, 0.949924, 0.949743, + 0.949592, 0.949471, 0.949381, 0.949321, 0.949292, + 0.949293, 0.949326, 0.949391, 0.949486, 0.949613, + 0.949771, 0.949961, 0.950182, 0.950435, 0.950720, + 0.951037, 0.951386, 0.951766, 0.952178, 0.952622, + 0.953098, 0.953606, 0.954145, 0.954716, 0.955318, + 0.955951, 0.956616, 0.957312, 0.958039, 0.958797, + 0.959585, 0.960405, 0.961254, 0.962134, 0.963043, + 0.963982, 0.964951, 0.965949, 0.966977, 0.968033, + 0.969117, 0.970230, 0.971371, 0.972540, 0.973736, + 0.974959, 0.976209, 0.977486, 0.978788, 0.980117, + 0.981471, 0.982850, 0.984254, 0.985682, 0.987134, + 0.988610, 0.990109, 0.991631, 0.993175, 0.994740, + 0.996328, 0.997936, 0.999565, 1.001214, 1.002882, + 1.004570, 1.006276, 1.008000, 1.009741, 1.011500, + 1.013275, 1.015066, 1.016872, 1.018693, 1.020528, + 1.022376, 1.024238, 1.026112, 1.027997, 1.029894, + 1.031800, 1.033717, 1.035642, 1.037576, 1.039518, + 1.041466, 1.043421, 1.045381, 1.047345, 1.049314, + 1.051286, 1.053260, 1.055236, 1.057212, 1.059189, + 1.061165, 1.063139, 1.065110, 1.067079, 1.069042, + 1.071001, 1.072954, 1.074900, 1.076838, 1.078767, + 1.080687, 1.082596, 1.084493, 1.086378, 1.088250, + 1.090107, 1.091949, 1.093774, 1.095582, 1.097372, + 1.099142, 1.100892, 1.102620, 1.104327, 1.106009, + 1.107668, 1.109300, 1.110907, 1.112485, 1.114036, + 1.115556, 1.117047, 1.118505, 1.119931, 1.121323, + 1.122681, 1.124003, 1.125288, 1.126535, 1.127744, + 1.128913 } }, { - 189, 60.000000, 1000.000000, + 181, 40.000000, 400.000000, 1.0, { + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000 + } + }, + { + 181, 40.000000, 400.000000, + 1.0, + { + 1.943602, 1.928150, 1.912613, 1.897001, 1.881321, + 1.865580, 1.849784, 1.833942, 1.818059, 1.802142, + 1.786198, 1.770233, 1.754253, 1.738263, 1.722270, + 1.706279, 1.690295, 1.674323, 1.658369, 1.642436, + 1.626531, 1.610657, 1.594819, 1.579020, 1.563266, + 1.547559, 1.531903, 1.516302, 1.500760, 1.485279, + 1.469863, 1.454514, 1.439236, 1.424031, 1.408902, + 1.393851, 1.378881, 1.363993, 1.349191, 1.334475, + 1.319847, 1.305310, 1.290866, 1.276515, 1.262259, + 1.248099, 1.234037, 1.220075, 1.206212, 1.192450, + 1.178790, 1.165233, 1.151811, 1.138526, 1.125350, + 1.112284, 1.099330, 1.086490, 1.073764, 1.061153, + 1.048660, 1.036283, 1.024025, 1.011886, 0.999866, + 0.987966, 0.976187, 0.964529, 0.952992, 0.941577, + 0.930283, 0.919111, 0.908061, 0.897132, 0.886325, + 0.875640, 0.865075, 0.854632, 0.844310, 0.834108, + 0.824027, 0.814065, 0.804222, 0.794499, 0.784893, + 0.775406, 0.766036, 0.756782, 0.747645, 0.738623, + 0.729716, 0.720923, 0.712244, 0.703678, 0.695223, + 0.686881, 0.678648, 0.670526, 0.662513, 0.654608, + 0.646811, 0.639121, 0.631537, 0.624058, 0.616683, + 0.609412, 0.602244, 0.595178, 0.588213, 0.581349, + 0.574584, 0.567919, 0.561351, 0.554880, 0.548506, + 0.542227, 0.536043, 0.529953, 0.523956, 0.518051, + 0.512238, 0.506516, 0.500884, 0.495341, 0.489887, + 0.484521, 0.479241, 0.474048, 0.468940, 0.463917, + 0.458978, 0.454122, 0.449349, 0.444657, 0.440047, + 0.435518, 0.431068, 0.426697, 0.422405, 0.418191, + 0.414054, 0.409993, 0.406009, 0.402099, 0.398265, + 0.394504, 0.390817, 0.387203, 0.383662, 0.380192, + 0.376793, 0.373466, 0.370208, 0.367020, 0.363902, + 0.360852, 0.357870, 0.354957, 0.352110, 0.349331, + 0.346618, 0.343971, 0.341389, 0.338873, 0.336422, + 0.334036, 0.331714, 0.329455, 0.327260, 0.325129, + 0.323060, 0.321055, 0.319111, 0.317230, 0.315412, + 0.313654, 0.311959, 0.310325, 0.308753, 0.307241, + 0.305791 + } + } +}; + +static xspect illoc_OPlankian_CIE_1931_2[3] = { + { + 481, 40.000000, 1000.000000, + 1.0, + { + 1.001252, 1.000085, 0.998928, 0.997780, 0.996643, + 0.995518, 0.994406, 0.993307, 0.992222, 0.991153, + 0.990100, 0.989064, 0.988046, 0.987046, 0.986066, + 0.985106, 0.984166, 0.983248, 0.982352, 0.981479, + 0.980629, 0.979803, 0.979001, 0.978224, 0.977473, + 0.976748, 0.976049, 0.975377, 0.974732, 0.974114, + 0.973525, 0.972963, 0.972430, 0.971926, 0.971451, + 0.971005, 0.970588, 0.970201, 0.969844, 0.969516, + 0.969218, 0.968951, 0.968713, 0.968506, 0.968328, + 0.968181, 0.968064, 0.967978, 0.967921, 0.967894, + 0.967898, 0.967931, 0.967995, 0.968088, 0.968210, + 0.968363, 0.968544, 0.968755, 0.968995, 0.969265, + 0.969562, 0.969889, 0.970244, 0.970627, 0.971039, + 0.971478, 0.971945, 0.972440, 0.972962, 0.973510, + 0.974086, 0.974689, 0.975317, 0.975972, 0.976653, + 0.977360, 0.978092, 0.978850, 0.979632, 0.980439, + 0.981271, 0.982127, 0.983007, 0.983911, 0.984839, + 0.985790, 0.986764, 0.987761, 0.988780, 0.989822, + 0.990886, 0.991972, 0.993080, 0.994209, 0.995359, + 0.996531, 0.997723, 0.998935, 1.000168, 1.001421, + 1.002694, 1.003986, 1.005298, 1.006629, 1.007979, + 1.009347, 1.010734, 1.012140, 1.013563, 1.015004, + 1.016463, 1.017940, 1.019434, 1.020944, 1.022472, + 1.024016, 1.025577, 1.027153, 1.028746, 1.030355, + 1.031979, 1.033619, 1.035274, 1.036945, 1.038630, + 1.040330, 1.042044, 1.043773, 1.045516, 1.047273, + 1.049044, 1.050828, 1.052626, 1.054437, 1.056262, + 1.058099, 1.059950, 1.061813, 1.063688, 1.065576, + 1.067476, 1.069388, 1.071312, 1.073248, 1.075195, + 1.077154, 1.079124, 1.081105, 1.083097, 1.085100, + 1.087114, 1.089138, 1.091173, 1.093218, 1.095274, + 1.097339, 1.099414, 1.101499, 1.103593, 1.105697, + 1.107811, 1.109934, 1.112065, 1.114206, 1.116356, + 1.118514, 1.120682, 1.122857, 1.125041, 1.127233, + 1.129434, 1.131643, 1.133859, 1.136083, 1.138315, + 1.140555, 1.142802, 1.145057, 1.147319, 1.149588, + 1.151864, 1.154147, 1.156437, 1.158734, 1.161037, + 1.163347, 1.165664, 1.167987, 1.170316, 1.172651, + 1.174993, 1.177340, 1.179694, 1.182053, 1.184418, + 1.186788, 1.189164, 1.191546, 1.193933, 1.196325, + 1.198723, 1.201125, 1.203533, 1.205945, 1.208363, + 1.210785, 1.213212, 1.215644, 1.218080, 1.220520, + 1.222965, 1.225414, 1.227868, 1.230326, 1.232787, + 1.235253, 1.237723, 1.240197, 1.242674, 1.245155, + 1.247640, 1.250128, 1.252620, 1.255115, 1.257614, + 1.260116, 1.262621, 1.265130, 1.267641, 1.270156, + 1.272674, 1.275194, 1.277717, 1.280244, 1.282773, + 1.285304, 1.287838, 1.290375, 1.292914, 1.295456, + 1.298000, 1.300546, 1.303095, 1.305646, 1.308199, + 1.310754, 1.313311, 1.315870, 1.318431, 1.320994, + 1.323559, 1.326125, 1.328693, 1.331263, 1.333835, + 1.336408, 1.338982, 1.341558, 1.344135, 1.346714, + 1.349294, 1.351876, 1.354458, 1.357042, 1.359627, + 1.362212, 1.364799, 1.367387, 1.369976, 1.372566, + 1.375156, 1.377748, 1.380340, 1.382933, 1.385526, + 1.388120, 1.390715, 1.393311, 1.395906, 1.398503, + 1.401099, 1.403696, 1.406294, 1.408892, 1.411490, + 1.414088, 1.416686, 1.419285, 1.421883, 1.424482, + 1.427081, 1.429680, 1.432278, 1.434877, 1.437476, + 1.440074, 1.442672, 1.445270, 1.447868, 1.450465, + 1.453063, 1.455659, 1.458256, 1.460852, 1.463447, + 1.466042, 1.468637, 1.471231, 1.473824, 1.476417, + 1.479009, 1.481601, 1.484192, 1.486782, 1.489371, + 1.491960, 1.494547, 1.497134, 1.499720, 1.502305, + 1.504889, 1.507473, 1.510055, 1.512636, 1.515216, + 1.517795, 1.520373, 1.522950, 1.525525, 1.528100, + 1.530673, 1.533245, 1.535816, 1.538385, 1.540953, + 1.543520, 1.546085, 1.548649, 1.551212, 1.553773, + 1.556333, 1.558891, 1.561448, 1.564003, 1.566557, + 1.569109, 1.571660, 1.574208, 1.576756, 1.579301, + 1.581845, 1.584387, 1.586928, 1.589467, 1.592004, + 1.594539, 1.597072, 1.599604, 1.602133, 1.604661, + 1.607187, 1.609711, 1.612233, 1.614753, 1.617271, + 1.619788, 1.622302, 1.624814, 1.627324, 1.629832, + 1.632338, 1.634842, 1.637344, 1.639843, 1.642341, + 1.644836, 1.647329, 1.649820, 1.652309, 1.654795, + 1.657279, 1.659761, 1.662241, 1.664718, 1.667193, + 1.669666, 1.672136, 1.674604, 1.677070, 1.679533, + 1.681994, 1.684452, 1.686908, 1.689362, 1.691813, + 1.694261, 1.696707, 1.699151, 1.701592, 1.704030, + 1.706466, 1.708900, 1.711331, 1.713759, 1.716184, + 1.718607, 1.721028, 1.723445, 1.725860, 1.728273, + 1.730683, 1.733090, 1.735494, 1.737896, 1.740294, + 1.742691, 1.745084, 1.747475, 1.749862, 1.752248, + 1.754630, 1.757009, 1.759386, 1.761760, 1.764131, + 1.766499, 1.768864, 1.771227, 1.773586, 1.775943, + 1.778297, 1.780648, 1.782995, 1.785340, 1.787683, + 1.790022, 1.792358, 1.794691, 1.797021, 1.799349, + 1.801673, 1.803994, 1.806312, 1.808627, 1.810940, + 1.813249, 1.815555, 1.817858, 1.820158, 1.822455, + 1.824749, 1.827040, 1.829327, 1.831612, 1.833893, + 1.836172, 1.838447, 1.840719, 1.842988, 1.845254, + 1.847517, 1.849776, 1.852033, 1.854286, 1.856536, + 1.858783, 1.861027, 1.863267, 1.865504, 1.867738, + 1.869969, 1.872197, 1.874421, 1.876643, 1.878860, + 1.881075, 1.883287, 1.885495, 1.887700, 1.889901, + 1.892100 + } + }, + { + 481, 40.000000, 1000.000000, + 1.0, + { + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000 + } + }, + { + 481, 40.000000, 1000.000000, + 1.0, + { + 1.964399, 1.949065, 1.933662, 1.918197, 1.902676, + 1.887104, 1.871488, 1.855833, 1.840145, 1.824431, + 1.808694, 1.792942, 1.777180, 1.761413, 1.745646, + 1.729884, 1.714133, 1.698398, 1.682683, 1.666994, + 1.651334, 1.635709, 1.620122, 1.604578, 1.589081, + 1.573634, 1.558243, 1.542909, 1.527638, 1.512431, + 1.497293, 1.482226, 1.467234, 1.452320, 1.437485, + 1.422732, 1.408065, 1.393485, 1.378994, 1.364595, + 1.350290, 1.336080, 1.321966, 1.307952, 1.294037, + 1.280224, 1.266513, 1.252907, 1.239405, 1.226009, + 1.212720, 1.199539, 1.186466, 1.173502, 1.160647, + 1.147903, 1.135268, 1.122745, 1.110333, 1.098031, + 1.085841, 1.073763, 1.061796, 1.049940, 1.038196, + 1.026563, 1.015041, 1.003630, 0.992329, 0.981138, + 0.970058, 0.959087, 0.948225, 0.937472, 0.926827, + 0.916289, 0.905859, 0.895535, 0.885318, 0.875206, + 0.865199, 0.855295, 0.845496, 0.835799, 0.826205, + 0.816712, 0.807319, 0.798027, 0.788834, 0.779739, + 0.770743, 0.761843, 0.753039, 0.744331, 0.735718, + 0.727199, 0.718772, 0.710438, 0.702195, 0.694043, + 0.685981, 0.678008, 0.670124, 0.662326, 0.654616, + 0.646991, 0.639451, 0.631995, 0.624623, 0.617333, + 0.610126, 0.602999, 0.595952, 0.588985, 0.582096, + 0.575286, 0.568552, 0.561895, 0.555313, 0.548805, + 0.542372, 0.536012, 0.529725, 0.523509, 0.517364, + 0.511289, 0.505284, 0.499347, 0.493478, 0.487677, + 0.481943, 0.476274, 0.470670, 0.465131, 0.459655, + 0.454243, 0.448893, 0.443605, 0.438378, 0.433211, + 0.428104, 0.423056, 0.418066, 0.413134, 0.408260, + 0.403442, 0.398679, 0.393972, 0.389320, 0.384722, + 0.380177, 0.375686, 0.371246, 0.366858, 0.362522, + 0.358235, 0.353999, 0.349812, 0.345675, 0.341585, + 0.337543, 0.333549, 0.329601, 0.325700, 0.321844, + 0.318033, 0.314267, 0.310545, 0.306866, 0.303231, + 0.299639, 0.296088, 0.292580, 0.289112, 0.285685, + 0.282299, 0.278952, 0.275645, 0.272376, 0.269147, + 0.265955, 0.262800, 0.259683, 0.256603, 0.253559, + 0.250551, 0.247578, 0.244640, 0.241737, 0.238869, + 0.236034, 0.233232, 0.230464, 0.227729, 0.225026, + 0.222354, 0.219715, 0.217106, 0.214529, 0.211982, + 0.209465, 0.206978, 0.204520, 0.202092, 0.199692, + 0.197321, 0.194978, 0.192663, 0.190375, 0.188114, + 0.185880, 0.183673, 0.181492, 0.179337, 0.177207, + 0.175103, 0.173024, 0.170969, 0.168939, 0.166933, + 0.164951, 0.162992, 0.161057, 0.159145, 0.157255, + 0.155388, 0.153543, 0.151720, 0.149919, 0.148140, + 0.146381, 0.144644, 0.142927, 0.141231, 0.139555, + 0.137899, 0.136262, 0.134646, 0.133048, 0.131470, + 0.129910, 0.128369, 0.126846, 0.125342, 0.123855, + 0.122387, 0.120935, 0.119502, 0.118085, 0.116685, + 0.115302, 0.113935, 0.112585, 0.111251, 0.109933, + 0.108631, 0.107344, 0.106072, 0.104816, 0.103575, + 0.102349, 0.101137, 0.099940, 0.098757, 0.097588, + 0.096434, 0.095293, 0.094166, 0.093052, 0.091952, + 0.090864, 0.089790, 0.088729, 0.087680, 0.086644, + 0.085620, 0.084609, 0.083610, 0.082622, 0.081647, + 0.080683, 0.079731, 0.078790, 0.077860, 0.076942, + 0.076035, 0.075138, 0.074252, 0.073377, 0.072512, + 0.071658, 0.070814, 0.069980, 0.069156, 0.068342, + 0.067537, 0.066743, 0.065958, 0.065182, 0.064415, + 0.063658, 0.062910, 0.062171, 0.061440, 0.060718, + 0.060006, 0.059301, 0.058605, 0.057917, 0.057238, + 0.056567, 0.055904, 0.055248, 0.054601, 0.053961, + 0.053329, 0.052705, 0.052088, 0.051478, 0.050876, + 0.050281, 0.049693, 0.049113, 0.048539, 0.047972, + 0.047411, 0.046858, 0.046311, 0.045771, 0.045237, + 0.044710, 0.044188, 0.043674, 0.043165, 0.042662, + 0.042166, 0.041675, 0.041190, 0.040711, 0.040238, + 0.039770, 0.039308, 0.038852, 0.038401, 0.037955, + 0.037515, 0.037080, 0.036650, 0.036226, 0.035806, + 0.035392, 0.034982, 0.034577, 0.034177, 0.033782, + 0.033392, 0.033006, 0.032625, 0.032249, 0.031877, + 0.031509, 0.031146, 0.030787, 0.030432, 0.030082, + 0.029736, 0.029394, 0.029056, 0.028722, 0.028392, + 0.028066, 0.027744, 0.027426, 0.027111, 0.026801, + 0.026494, 0.026190, 0.025891, 0.025594, 0.025302, + 0.025013, 0.024727, 0.024445, 0.024166, 0.023890, + 0.023618, 0.023349, 0.023083, 0.022820, 0.022560, + 0.022304, 0.022050, 0.021800, 0.021553, 0.021308, + 0.021066, 0.020828, 0.020592, 0.020359, 0.020128, + 0.019901, 0.019676, 0.019453, 0.019234, 0.019017, + 0.018802, 0.018590, 0.018381, 0.018174, 0.017970, + 0.017767, 0.017568, 0.017371, 0.017176, 0.016983, + 0.016793, 0.016604, 0.016418, 0.016235, 0.016053, + 0.015874, 0.015697, 0.015521, 0.015348, 0.015177, + 0.015008, 0.014841, 0.014676, 0.014513, 0.014352, + 0.014192, 0.014035, 0.013879, 0.013725, 0.013574, + 0.013423, 0.013275, 0.013128, 0.012983, 0.012840, + 0.012699, 0.012559, 0.012420, 0.012284, 0.012149, + 0.012015, 0.011883, 0.011753, 0.011624, 0.011497, + 0.011371, 0.011247, 0.011124, 0.011002, 0.010882, + 0.010764, 0.010647, 0.010531, 0.010416, 0.010303, + 0.010191, 0.010081, 0.009971, 0.009863, 0.009756, + 0.009651, 0.009547, 0.009444, 0.009342, 0.009241, + 0.009142, 0.009043, 0.008946, 0.008850, 0.008755, + 0.008661, 0.008568, 0.008477, 0.008386, 0.008296, + 0.008208 + } + } +}; + +static xspect illoc_ODaylight_CIE_1931_2[3] = { + { + 181, 40.000000, 400.000000, + 1.0, + { + 0.980733, 0.979686, 0.978644, 0.977610, 0.976584, + 0.975566, 0.974557, 0.973559, 0.972572, 0.971597, + 0.970635, 0.969687, 0.968753, 0.967834, 0.966931, + 0.966045, 0.965176, 0.964324, 0.963492, 0.962678, + 0.961884, 0.961111, 0.960358, 0.959627, 0.958918, + 0.958232, 0.957568, 0.956929, 0.956313, 0.955721, + 0.955155, 0.954614, 0.954098, 0.953609, 0.953146, + 0.952710, 0.952302, 0.951920, 0.951567, 0.951242, + 0.950945, 0.950677, 0.950439, 0.950229, 0.950049, + 0.949899, 0.949779, 0.949690, 0.949630, 0.949602, + 0.949604, 0.949638, 0.949703, 0.949799, 0.949926, + 0.950085, 0.950275, 0.950497, 0.950750, 0.951035, + 0.951352, 0.951701, 0.952081, 0.952493, 0.952937, + 0.953413, 0.953920, 0.954459, 0.955030, 0.955632, + 0.956265, 0.956929, 0.957625, 0.958351, 0.959108, + 0.959896, 0.960715, 0.961563, 0.962442, 0.963351, + 0.964289, 0.965257, 0.966254, 0.967281, 0.968336, + 0.969419, 0.970531, 0.971670, 0.972838, 0.974033, + 0.975254, 0.976503, 0.977778, 0.979079, 0.980406, + 0.981759, 0.983136, 0.984538, 0.985965, 0.987415, + 0.988889, 0.990386, 0.991906, 0.993448, 0.995012, + 0.996597, 0.998203, 0.999830, 1.001477, 1.003143, + 1.004828, 1.006532, 1.008254, 1.009993, 1.011749, + 1.013522, 1.015310, 1.017114, 1.018932, 1.020765, + 1.022611, 1.024470, 1.026341, 1.028223, 1.030117, + 1.032021, 1.033935, 1.035858, 1.037789, 1.039727, + 1.041673, 1.043625, 1.045582, 1.047543, 1.049509, + 1.051478, 1.053449, 1.055422, 1.057396, 1.059369, + 1.061342, 1.063313, 1.065282, 1.067247, 1.069208, + 1.071163, 1.073113, 1.075056, 1.076991, 1.078917, + 1.080834, 1.082740, 1.084634, 1.086516, 1.088385, + 1.090239, 1.092078, 1.093900, 1.095705, 1.097492, + 1.099259, 1.101006, 1.102732, 1.104435, 1.106115, + 1.107771, 1.109401, 1.111004, 1.112581, 1.114128, + 1.115647, 1.117134, 1.118590, 1.120014, 1.121404, + 1.122759, 1.124078, 1.125361, 1.126607, 1.127813, + 1.128981 + } + }, + { + 181, 40.000000, 400.000000, + 1.0, + { + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000 + } + }, + { + 181, 40.000000, 400.000000, + 1.0, + { + 1.945100, 1.929640, 1.914098, 1.898479, 1.882791, + 1.867042, 1.851240, 1.835389, 1.819499, 1.803574, + 1.787622, 1.771648, 1.755660, 1.739661, 1.723659, + 1.707659, 1.691666, 1.675685, 1.659721, 1.643779, + 1.627864, 1.611981, 1.596132, 1.580324, 1.564559, + 1.548842, 1.533176, 1.517564, 1.502011, 1.486520, + 1.471093, 1.455733, 1.440444, 1.425228, 1.410088, + 1.395026, 1.380044, 1.365145, 1.350331, 1.335604, + 1.320965, 1.306416, 1.291960, 1.277597, 1.263330, + 1.249158, 1.235085, 1.221110, 1.207236, 1.193462, + 1.179790, 1.166222, 1.152787, 1.139490, 1.126302, + 1.113225, 1.100260, 1.087407, 1.074669, 1.062047, + 1.049542, 1.037153, 1.024884, 1.012733, 1.000701, + 0.988790, 0.977000, 0.965330, 0.953782, 0.942355, + 0.931050, 0.919867, 0.908805, 0.897866, 0.887048, + 0.876351, 0.865776, 0.855322, 0.844989, 0.834777, + 0.824684, 0.814712, 0.804859, 0.795125, 0.785509, + 0.776012, 0.766631, 0.757368, 0.748221, 0.739189, + 0.730272, 0.721470, 0.712781, 0.704205, 0.695742, + 0.687390, 0.679148, 0.671017, 0.662995, 0.655081, + 0.647275, 0.639576, 0.631984, 0.624496, 0.617113, + 0.609834, 0.602658, 0.595584, 0.588611, 0.581739, + 0.574967, 0.568293, 0.561718, 0.555239, 0.548858, + 0.542572, 0.536381, 0.530283, 0.524280, 0.518368, + 0.512549, 0.506820, 0.501181, 0.495632, 0.490171, + 0.484799, 0.479513, 0.474313, 0.469200, 0.464171, + 0.459226, 0.454364, 0.449586, 0.444889, 0.440273, + 0.435739, 0.431284, 0.426908, 0.422611, 0.418392, + 0.414250, 0.410184, 0.406195, 0.402281, 0.398442, + 0.394677, 0.390986, 0.387368, 0.383822, 0.380348, + 0.376946, 0.373614, 0.370353, 0.367162, 0.364039, + 0.360986, 0.358001, 0.355084, 0.352234, 0.349451, + 0.346735, 0.344085, 0.341501, 0.338982, 0.336528, + 0.334139, 0.331814, 0.329553, 0.327356, 0.325222, + 0.323151, 0.321143, 0.319198, 0.317315, 0.315494, + 0.313734, 0.312037, 0.310401, 0.308827, 0.307314, + 0.305862 + } + } +}; + +static xspect illoc_Plankian_CIE_1964_10[3] = { + { + 481, 40.000000, 1000.000000, + 1.0, + { + 0.981980, 0.981153, 0.980335, 0.979528, 0.978732, + 0.977948, 0.977178, 0.976421, 0.975679, 0.974952, + 0.974241, 0.973547, 0.972870, 0.972212, 0.971572, + 0.970952, 0.970352, 0.969772, 0.969214, 0.968677, + 0.968163, 0.967671, 0.967202, 0.966758, 0.966337, + 0.965941, 0.965570, 0.965224, 0.964903, 0.964609, + 0.964340, 0.964098, 0.963883, 0.963694, 0.963532, + 0.963398, 0.963291, 0.963212, 0.963160, 0.963136, + 0.963140, 0.963172, 0.963231, 0.963319, 0.963434, + 0.963578, 0.963749, 0.963948, 0.964175, 0.964430, + 0.964713, 0.965023, 0.965361, 0.965726, 0.966119, + 0.966539, 0.966986, 0.967460, 0.967960, 0.968487, + 0.969041, 0.969621, 0.970227, 0.970859, 0.971517, + 0.972201, 0.972910, 0.973644, 0.974402, 0.975186, + 0.975994, 0.976827, 0.977683, 0.978564, 0.979468, + 0.980396, 0.981347, 0.982320, 0.983317, 0.984336, + 0.985378, 0.986441, 0.987526, 0.988633, 0.989762, + 0.990911, 0.992081, 0.993272, 0.994484, 0.995715, + 0.996967, 0.998238, 0.999529, 1.000840, 1.002169, + 1.003517, 1.004884, 1.006269, 1.007672, 1.009094, + 1.010533, 1.011989, 1.013463, 1.014954, 1.016462, + 1.017986, 1.019527, 1.021084, 1.022657, 1.024246, + 1.025851, 1.027470, 1.029106, 1.030756, 1.032421, + 1.034101, 1.035795, 1.037503, 1.039225, 1.040961, + 1.042711, 1.044475, 1.046251, 1.048041, 1.049844, + 1.051659, 1.053487, 1.055327, 1.057180, 1.059045, + 1.060921, 1.062809, 1.064709, 1.066621, 1.068543, + 1.070476, 1.072421, 1.074376, 1.076342, 1.078318, + 1.080304, 1.082300, 1.084307, 1.086323, 1.088349, + 1.090384, 1.092429, 1.094483, 1.096546, 1.098618, + 1.100699, 1.102789, 1.104887, 1.106993, 1.109108, + 1.111231, 1.113362, 1.115500, 1.117647, 1.119801, + 1.121962, 1.124131, 1.126307, 1.128491, 1.130681, + 1.132878, 1.135082, 1.137292, 1.139509, 1.141733, + 1.143962, 1.146198, 1.148440, 1.150688, 1.152942, + 1.155202, 1.157467, 1.159737, 1.162013, 1.164295, + 1.166582, 1.168873, 1.171170, 1.173472, 1.175778, + 1.178090, 1.180405, 1.182726, 1.185051, 1.187380, + 1.189713, 1.192051, 1.194392, 1.196738, 1.199088, + 1.201441, 1.203798, 1.206159, 1.208523, 1.210891, + 1.213262, 1.215636, 1.218014, 1.220394, 1.222778, + 1.225165, 1.227554, 1.229947, 1.232342, 1.234740, + 1.237140, 1.239543, 1.241949, 1.244357, 1.246767, + 1.249179, 1.251594, 1.254010, 1.256429, 1.258849, + 1.261272, 1.263696, 1.266122, 1.268550, 1.270979, + 1.273410, 1.275843, 1.278276, 1.280712, 1.283148, + 1.285586, 1.288025, 1.290465, 1.292906, 1.295348, + 1.297792, 1.300236, 1.302681, 1.305126, 1.307573, + 1.310020, 1.312468, 1.314916, 1.317365, 1.319814, + 1.322264, 1.324714, 1.327165, 1.329615, 1.332066, + 1.334517, 1.336969, 1.339420, 1.341871, 1.344323, + 1.346774, 1.349225, 1.351676, 1.354127, 1.356578, + 1.359028, 1.361478, 1.363927, 1.366377, 1.368825, + 1.371274, 1.373721, 1.376168, 1.378615, 1.381061, + 1.383506, 1.385950, 1.388394, 1.390837, 1.393279, + 1.395720, 1.398160, 1.400599, 1.403038, 1.405475, + 1.407911, 1.410346, 1.412780, 1.415213, 1.417644, + 1.420075, 1.422504, 1.424931, 1.427358, 1.429783, + 1.432207, 1.434629, 1.437050, 1.439469, 1.441887, + 1.444304, 1.446718, 1.449131, 1.451543, 1.453953, + 1.456361, 1.458768, 1.461173, 1.463576, 1.465977, + 1.468376, 1.470774, 1.473170, 1.475564, 1.477956, + 1.480346, 1.482734, 1.485120, 1.487504, 1.489886, + 1.492266, 1.494644, 1.497020, 1.499393, 1.501765, + 1.504134, 1.506501, 1.508867, 1.511229, 1.513590, + 1.515948, 1.518304, 1.520658, 1.523009, 1.525358, + 1.527705, 1.530049, 1.532391, 1.534730, 1.537067, + 1.539402, 1.541734, 1.544064, 1.546391, 1.548715, + 1.551037, 1.553357, 1.555674, 1.557988, 1.560300, + 1.562609, 1.564915, 1.567219, 1.569520, 1.571818, + 1.574114, 1.576407, 1.578698, 1.580985, 1.583270, + 1.585552, 1.587831, 1.590108, 1.592381, 1.594652, + 1.596920, 1.599185, 1.601448, 1.603707, 1.605964, + 1.608217, 1.610468, 1.612716, 1.614961, 1.617203, + 1.619442, 1.621678, 1.623911, 1.626141, 1.628368, + 1.630592, 1.632813, 1.635031, 1.637247, 1.639459, + 1.641668, 1.643873, 1.646076, 1.648276, 1.650473, + 1.652666, 1.654857, 1.657044, 1.659228, 1.661409, + 1.663587, 1.665762, 1.667934, 1.670103, 1.672268, + 1.674430, 1.676589, 1.678745, 1.680897, 1.683047, + 1.685193, 1.687336, 1.689476, 1.691612, 1.693746, + 1.695876, 1.698003, 1.700126, 1.702246, 1.704363, + 1.706477, 1.708588, 1.710695, 1.712799, 1.714899, + 1.716997, 1.719091, 1.721182, 1.723269, 1.725353, + 1.727434, 1.729511, 1.731586, 1.733656, 1.735724, + 1.737788, 1.739849, 1.741906, 1.743960, 1.746011, + 1.748058, 1.750102, 1.752143, 1.754180, 1.756214, + 1.758245, 1.760272, 1.762296, 1.764316, 1.766333, + 1.768347, 1.770357, 1.772364, 1.774367, 1.776367, + 1.778364, 1.780357, 1.782347, 1.784334, 1.786317, + 1.788296, 1.790272, 1.792245, 1.794214, 1.796180, + 1.798143, 1.800102, 1.802058, 1.804010, 1.805959, + 1.807904, 1.809846, 1.811785, 1.813720, 1.815652, + 1.817580, 1.819505, 1.821426, 1.823344, 1.825259, + 1.827170, 1.829078, 1.830982, 1.832883, 1.834780, + 1.836674, 1.838565, 1.840452, 1.842335, 1.844216, + 1.846092 + } + }, + { + 481, 40.000000, 1000.000000, + 1.0, + { + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000 + } + }, + { + 481, 40.000000, 1000.000000, + 1.0, + { + 1.923654, 1.909157, 1.894584, 1.879941, 1.865235, + 1.850470, 1.835651, 1.820786, 1.805878, 1.790933, + 1.775958, 1.760956, 1.745934, 1.730896, 1.715848, + 1.700795, 1.685741, 1.670691, 1.655651, 1.640624, + 1.625615, 1.610629, 1.595669, 1.580741, 1.565847, + 1.550992, 1.536180, 1.521413, 1.506697, 1.492034, + 1.477427, 1.462880, 1.448395, 1.433975, 1.419624, + 1.405344, 1.391137, 1.377005, 1.362952, 1.348979, + 1.335088, 1.321281, 1.307560, 1.293927, 1.280383, + 1.266930, 1.253569, 1.240302, 1.227130, 1.214053, + 1.201074, 1.188192, 1.175410, 1.162727, 1.150144, + 1.137662, 1.125282, 1.113004, 1.100828, 1.088756, + 1.076786, 1.064920, 1.053158, 1.041499, 1.029944, + 1.018493, 1.007146, 0.995903, 0.984764, 0.973728, + 0.962796, 0.951967, 0.941240, 0.930617, 0.920096, + 0.909677, 0.899359, 0.889143, 0.879028, 0.869013, + 0.859098, 0.849282, 0.839565, 0.829947, 0.820426, + 0.811003, 0.801676, 0.792445, 0.783310, 0.774269, + 0.765323, 0.756470, 0.747710, 0.739042, 0.730466, + 0.721980, 0.713585, 0.705279, 0.697062, 0.688933, + 0.680891, 0.672936, 0.665067, 0.657283, 0.649583, + 0.641968, 0.634435, 0.626984, 0.619616, 0.612328, + 0.605120, 0.597991, 0.590942, 0.583970, 0.577075, + 0.570257, 0.563515, 0.556848, 0.550255, 0.543736, + 0.537290, 0.530916, 0.524614, 0.518382, 0.512221, + 0.506129, 0.500106, 0.494151, 0.488264, 0.482443, + 0.476688, 0.470999, 0.465374, 0.459814, 0.454317, + 0.448883, 0.443510, 0.438200, 0.432950, 0.427760, + 0.422630, 0.417559, 0.412547, 0.407592, 0.402694, + 0.397852, 0.393067, 0.388337, 0.383662, 0.379041, + 0.374473, 0.369959, 0.365497, 0.361086, 0.356728, + 0.352420, 0.348162, 0.343953, 0.339794, 0.335684, + 0.331622, 0.327607, 0.323639, 0.319718, 0.315842, + 0.312013, 0.308228, 0.304487, 0.300791, 0.297138, + 0.293529, 0.289961, 0.286436, 0.282953, 0.279511, + 0.276109, 0.272748, 0.269426, 0.266144, 0.262900, + 0.259696, 0.256529, 0.253400, 0.250308, 0.247252, + 0.244234, 0.241251, 0.238303, 0.235391, 0.232513, + 0.229670, 0.226861, 0.224085, 0.221343, 0.218633, + 0.215956, 0.213311, 0.210697, 0.208115, 0.205564, + 0.203043, 0.200553, 0.198092, 0.195661, 0.193260, + 0.190887, 0.188543, 0.186227, 0.183939, 0.181678, + 0.179445, 0.177238, 0.175059, 0.172905, 0.170778, + 0.168676, 0.166600, 0.164549, 0.162523, 0.160521, + 0.158544, 0.156590, 0.154660, 0.152754, 0.150871, + 0.149010, 0.147172, 0.145357, 0.143563, 0.141792, + 0.140042, 0.138313, 0.136605, 0.134918, 0.133252, + 0.131606, 0.129980, 0.128373, 0.126787, 0.125220, + 0.123672, 0.122142, 0.120632, 0.119140, 0.117666, + 0.116210, 0.114772, 0.113352, 0.111949, 0.110563, + 0.109194, 0.107842, 0.106507, 0.105188, 0.103885, + 0.102598, 0.101327, 0.100071, 0.098831, 0.097606, + 0.096397, 0.095202, 0.094021, 0.092856, 0.091704, + 0.090567, 0.089444, 0.088335, 0.087239, 0.086157, + 0.085088, 0.084032, 0.082989, 0.081960, 0.080942, + 0.079938, 0.078946, 0.077966, 0.076998, 0.076042, + 0.075098, 0.074166, 0.073245, 0.072335, 0.071437, + 0.070550, 0.069674, 0.068808, 0.067954, 0.067110, + 0.066276, 0.065453, 0.064640, 0.063837, 0.063044, + 0.062260, 0.061487, 0.060723, 0.059969, 0.059223, + 0.058488, 0.057761, 0.057043, 0.056334, 0.055634, + 0.054943, 0.054260, 0.053586, 0.052920, 0.052263, + 0.051613, 0.050972, 0.050338, 0.049713, 0.049095, + 0.048485, 0.047883, 0.047288, 0.046700, 0.046120, + 0.045547, 0.044981, 0.044422, 0.043870, 0.043325, + 0.042787, 0.042255, 0.041730, 0.041212, 0.040700, + 0.040194, 0.039695, 0.039202, 0.038715, 0.038234, + 0.037760, 0.037291, 0.036828, 0.036370, 0.035919, + 0.035473, 0.035032, 0.034597, 0.034168, 0.033744, + 0.033325, 0.032911, 0.032503, 0.032099, 0.031701, + 0.031308, 0.030919, 0.030536, 0.030157, 0.029783, + 0.029413, 0.029048, 0.028688, 0.028332, 0.027981, + 0.027634, 0.027291, 0.026953, 0.026619, 0.026289, + 0.025963, 0.025642, 0.025324, 0.025010, 0.024700, + 0.024394, 0.024092, 0.023794, 0.023499, 0.023208, + 0.022921, 0.022637, 0.022357, 0.022080, 0.021807, + 0.021537, 0.021270, 0.021007, 0.020747, 0.020491, + 0.020237, 0.019987, 0.019740, 0.019496, 0.019255, + 0.019017, 0.018782, 0.018550, 0.018321, 0.018094, + 0.017871, 0.017650, 0.017432, 0.017217, 0.017004, + 0.016795, 0.016587, 0.016383, 0.016181, 0.015981, + 0.015784, 0.015589, 0.015397, 0.015207, 0.015020, + 0.014835, 0.014652, 0.014471, 0.014293, 0.014117, + 0.013943, 0.013771, 0.013602, 0.013434, 0.013269, + 0.013106, 0.012944, 0.012785, 0.012628, 0.012473, + 0.012319, 0.012168, 0.012018, 0.011871, 0.011725, + 0.011581, 0.011438, 0.011298, 0.011159, 0.011022, + 0.010887, 0.010753, 0.010621, 0.010491, 0.010363, + 0.010235, 0.010110, 0.009986, 0.009864, 0.009743, + 0.009623, 0.009506, 0.009389, 0.009274, 0.009161, + 0.009048, 0.008938, 0.008828, 0.008720, 0.008614, + 0.008508, 0.008404, 0.008302, 0.008200, 0.008100, + 0.008001, 0.007903, 0.007807, 0.007712, 0.007617, + 0.007524, 0.007433, 0.007342, 0.007252, 0.007164, + 0.007077, 0.006990, 0.006905, 0.006821, 0.006738, + 0.006656, 0.006575, 0.006495, 0.006416, 0.006338, + 0.006261 + } + } +}; + +static xspect illoc_Daylight_CIE_1964_10[3] = { + { + 181, 40.000000, 400.000000, + 1.0, + { + 0.954594, 0.954039, 0.953491, 0.952950, 0.952416, + 0.951891, 0.951374, 0.950867, 0.950370, 0.949884, + 0.949409, 0.948945, 0.948494, 0.948056, 0.947632, + 0.947221, 0.946825, 0.946444, 0.946078, 0.945729, + 0.945395, 0.945079, 0.944780, 0.944498, 0.944235, + 0.943990, 0.943765, 0.943558, 0.943372, 0.943205, + 0.943059, 0.942934, 0.942830, 0.942748, 0.942687, + 0.942649, 0.942633, 0.942639, 0.942669, 0.942722, + 0.942799, 0.942900, 0.943024, 0.943174, 0.943347, + 0.943546, 0.943770, 0.944019, 0.944293, 0.944594, + 0.944920, 0.945273, 0.945651, 0.946054, 0.946484, + 0.946940, 0.947423, 0.947932, 0.948468, 0.949031, + 0.949620, 0.950237, 0.950880, 0.951550, 0.952247, + 0.952971, 0.953722, 0.954499, 0.955304, 0.956135, + 0.956992, 0.957876, 0.958787, 0.959724, 0.960688, + 0.961677, 0.962693, 0.963735, 0.964802, 0.965895, + 0.967013, 0.968157, 0.969326, 0.970520, 0.971739, + 0.972982, 0.974249, 0.975541, 0.976856, 0.978195, + 0.979557, 0.980943, 0.982351, 0.983782, 0.985235, + 0.986710, 0.988207, 0.989725, 0.991264, 0.992823, + 0.994403, 0.996003, 0.997623, 0.999262, 1.000920, + 1.002596, 1.004290, 1.006002, 1.007731, 1.009477, + 1.011239, 1.013018, 1.014811, 1.016620, 1.018443, + 1.020280, 1.022130, 1.023993, 1.025869, 1.027757, + 1.029655, 1.031565, 1.033485, 1.035414, 1.037353, + 1.039299, 1.041254, 1.043215, 1.045183, 1.047157, + 1.049136, 1.051120, 1.053107, 1.055098, 1.057090, + 1.059085, 1.061080, 1.063076, 1.065071, 1.067064, + 1.069055, 1.071044, 1.073028, 1.075009, 1.076983, + 1.078952, 1.080913, 1.082866, 1.084811, 1.086746, + 1.088670, 1.090583, 1.092484, 1.094371, 1.096244, + 1.098102, 1.099944, 1.101768, 1.103575, 1.105363, + 1.107131, 1.108878, 1.110603, 1.112305, 1.113984, + 1.115638, 1.117266, 1.118867, 1.120440, 1.121985, + 1.123500, 1.124984, 1.126436, 1.127856, 1.129241, + 1.130592, 1.131908, 1.133186, 1.134427, 1.135629, + 1.136792 + } + }, + { + 181, 40.000000, 400.000000, + 1.0, + { + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000 + } + }, + { + 181, 40.000000, 400.000000, + 1.0, + { + 1.879446, 1.865348, 1.851156, 1.836877, 1.822518, + 1.808084, 1.793581, 1.779017, 1.764398, 1.749728, + 1.735014, 1.720261, 1.705476, 1.690662, 1.675827, + 1.660974, 1.646108, 1.631236, 1.616360, 1.601486, + 1.586618, 1.571761, 1.556919, 1.542095, 1.527294, + 1.512519, 1.497775, 1.483064, 1.468390, 1.453756, + 1.439166, 1.424623, 1.410129, 1.395688, 1.381302, + 1.366973, 1.352705, 1.338499, 1.324359, 1.310286, + 1.296282, 1.282349, 1.268490, 1.254705, 1.240998, + 1.227369, 1.213820, 1.200353, 1.186968, 1.173668, + 1.160454, 1.147326, 1.134316, 1.121427, 1.108633, + 1.095933, 1.083332, 1.070830, 1.058428, 1.046129, + 1.033933, 1.021842, 1.009857, 0.997979, 0.986209, + 0.974548, 0.962996, 0.951555, 0.940225, 0.929007, + 0.917901, 0.906907, 0.896026, 0.885259, 0.874605, + 0.864065, 0.853639, 0.843326, 0.833128, 0.823044, + 0.813073, 0.803217, 0.793474, 0.783845, 0.774329, + 0.764926, 0.755636, 0.746458, 0.737392, 0.728439, + 0.719596, 0.710865, 0.702244, 0.693733, 0.685332, + 0.677040, 0.668856, 0.660780, 0.652812, 0.644950, + 0.637194, 0.629545, 0.622000, 0.614559, 0.607222, + 0.599989, 0.592857, 0.585828, 0.578899, 0.572071, + 0.565342, 0.558713, 0.552181, 0.545747, 0.539410, + 0.533170, 0.527024, 0.520973, 0.515017, 0.509153, + 0.503382, 0.497703, 0.492115, 0.486617, 0.481209, + 0.475890, 0.470659, 0.465515, 0.460458, 0.455487, + 0.450602, 0.445801, 0.441084, 0.436451, 0.431899, + 0.427430, 0.423042, 0.418734, 0.414506, 0.410357, + 0.406287, 0.402294, 0.398378, 0.394539, 0.390776, + 0.387087, 0.383474, 0.379934, 0.376467, 0.373074, + 0.369752, 0.366502, 0.363322, 0.360213, 0.357174, + 0.354204, 0.351303, 0.348469, 0.345704, 0.343005, + 0.340373, 0.337807, 0.335306, 0.332871, 0.330501, + 0.328194, 0.325951, 0.323772, 0.321656, 0.319602, + 0.317611, 0.315681, 0.313813, 0.312005, 0.310259, + 0.308574, 0.306948, 0.305383, 0.303877, 0.302431, + 0.301045 + } + } +}; + +static xspect illoc_OPlankian_CIE_1964_10[3] = { + { + 481, 40.000000, 1000.000000, + 1.0, + { + 0.982024, 0.981198, 0.980382, 0.979576, 0.978782, + 0.978000, 0.977230, 0.976474, 0.975733, 0.975007, + 0.974297, 0.973603, 0.972927, 0.972268, 0.971629, + 0.971008, 0.970408, 0.969828, 0.969269, 0.968731, + 0.968216, 0.967723, 0.967253, 0.966807, 0.966385, + 0.965987, 0.965613, 0.965265, 0.964942, 0.964645, + 0.964374, 0.964129, 0.963911, 0.963719, 0.963554, + 0.963416, 0.963305, 0.963222, 0.963166, 0.963138, + 0.963138, 0.963165, 0.963220, 0.963302, 0.963413, + 0.963551, 0.963717, 0.963911, 0.964133, 0.964382, + 0.964659, 0.964963, 0.965295, 0.965654, 0.966040, + 0.966453, 0.966894, 0.967361, 0.967855, 0.968375, + 0.968922, 0.969495, 0.970094, 0.970719, 0.971369, + 0.972045, 0.972746, 0.973473, 0.974224, 0.975000, + 0.975800, 0.976625, 0.977473, 0.978346, 0.979242, + 0.980161, 0.981103, 0.982069, 0.983057, 0.984068, + 0.985100, 0.986155, 0.987232, 0.988330, 0.989450, + 0.990590, 0.991752, 0.992934, 0.994136, 0.995359, + 0.996601, 0.997864, 0.999146, 1.000447, 1.001767, + 1.003106, 1.004463, 1.005839, 1.007233, 1.008645, + 1.010075, 1.011522, 1.012986, 1.014468, 1.015966, + 1.017481, 1.019012, 1.020560, 1.022123, 1.023703, + 1.025298, 1.026908, 1.028534, 1.030175, 1.031830, + 1.033500, 1.035184, 1.036883, 1.038596, 1.040322, + 1.042063, 1.043816, 1.045583, 1.047363, 1.049156, + 1.050962, 1.052781, 1.054611, 1.056454, 1.058309, + 1.060176, 1.062055, 1.063945, 1.065847, 1.067760, + 1.069684, 1.071618, 1.073564, 1.075520, 1.077487, + 1.079463, 1.081450, 1.083447, 1.085454, 1.087470, + 1.089496, 1.091532, 1.093576, 1.095630, 1.097692, + 1.099764, 1.101844, 1.103933, 1.106030, 1.108135, + 1.110249, 1.112370, 1.114500, 1.116637, 1.118782, + 1.120934, 1.123094, 1.125260, 1.127435, 1.129616, + 1.131804, 1.133998, 1.136200, 1.138408, 1.140622, + 1.142843, 1.145070, 1.147303, 1.149542, 1.151787, + 1.154037, 1.156293, 1.158555, 1.160823, 1.163095, + 1.165373, 1.167656, 1.169944, 1.172237, 1.174535, + 1.176838, 1.179145, 1.181457, 1.183773, 1.186094, + 1.188419, 1.190748, 1.193081, 1.195418, 1.197759, + 1.200104, 1.202453, 1.204805, 1.207161, 1.209521, + 1.211884, 1.214250, 1.216619, 1.218992, 1.221367, + 1.223746, 1.226128, 1.228512, 1.230899, 1.233289, + 1.235682, 1.238077, 1.240475, 1.242875, 1.245277, + 1.247682, 1.250088, 1.252497, 1.254908, 1.257321, + 1.259736, 1.262153, 1.264571, 1.266992, 1.269414, + 1.271837, 1.274262, 1.276689, 1.279116, 1.281546, + 1.283976, 1.286408, 1.288841, 1.291275, 1.293710, + 1.296146, 1.298583, 1.301021, 1.303460, 1.305899, + 1.308340, 1.310780, 1.313222, 1.315664, 1.318106, + 1.320549, 1.322993, 1.325437, 1.327881, 1.330325, + 1.332770, 1.335214, 1.337659, 1.340104, 1.342549, + 1.344994, 1.347438, 1.349883, 1.352328, 1.354772, + 1.357216, 1.359660, 1.362103, 1.364546, 1.366989, + 1.369431, 1.371872, 1.374314, 1.376754, 1.379194, + 1.381633, 1.384072, 1.386509, 1.388946, 1.391383, + 1.393818, 1.396252, 1.398686, 1.401119, 1.403550, + 1.405981, 1.408410, 1.410839, 1.413266, 1.415692, + 1.418117, 1.420541, 1.422963, 1.425384, 1.427804, + 1.430222, 1.432640, 1.435055, 1.437469, 1.439882, + 1.442293, 1.444703, 1.447111, 1.449518, 1.451923, + 1.454326, 1.456728, 1.459128, 1.461526, 1.463922, + 1.466317, 1.468710, 1.471101, 1.473490, 1.475877, + 1.478263, 1.480646, 1.483028, 1.485407, 1.487785, + 1.490160, 1.492534, 1.494905, 1.497274, 1.499642, + 1.502007, 1.504370, 1.506730, 1.509089, 1.511445, + 1.513799, 1.516151, 1.518501, 1.520848, 1.523193, + 1.525536, 1.527876, 1.530214, 1.532549, 1.534883, + 1.537213, 1.539541, 1.541867, 1.544191, 1.546511, + 1.548830, 1.551145, 1.553459, 1.555769, 1.558077, + 1.560383, 1.562686, 1.564986, 1.567284, 1.569579, + 1.571871, 1.574160, 1.576447, 1.578732, 1.581013, + 1.583292, 1.585568, 1.587841, 1.590111, 1.592379, + 1.594644, 1.596906, 1.599165, 1.601422, 1.603675, + 1.605926, 1.608173, 1.610418, 1.612660, 1.614899, + 1.617135, 1.619369, 1.621599, 1.623826, 1.626051, + 1.628272, 1.630490, 1.632706, 1.634918, 1.637127, + 1.639334, 1.641537, 1.643737, 1.645935, 1.648129, + 1.650320, 1.652508, 1.654693, 1.656875, 1.659053, + 1.661229, 1.663401, 1.665571, 1.667737, 1.669900, + 1.672060, 1.674217, 1.676370, 1.678521, 1.680668, + 1.682812, 1.684953, 1.687091, 1.689225, 1.691357, + 1.693485, 1.695609, 1.697731, 1.699849, 1.701965, + 1.704076, 1.706185, 1.708290, 1.710393, 1.712491, + 1.714587, 1.716679, 1.718768, 1.720854, 1.722936, + 1.725016, 1.727091, 1.729164, 1.731233, 1.733299, + 1.735362, 1.737421, 1.739477, 1.741530, 1.743579, + 1.745625, 1.747667, 1.749707, 1.751743, 1.753775, + 1.755804, 1.757830, 1.759853, 1.761872, 1.763888, + 1.765900, 1.767909, 1.769915, 1.771917, 1.773916, + 1.775911, 1.777904, 1.779892, 1.781878, 1.783860, + 1.785838, 1.787814, 1.789785, 1.791754, 1.793719, + 1.795680, 1.797639, 1.799593, 1.801545, 1.803493, + 1.805437, 1.807379, 1.809316, 1.811251, 1.813182, + 1.815109, 1.817034, 1.818954, 1.820872, 1.822786, + 1.824696, 1.826603, 1.828507, 1.830407, 1.832304, + 1.834197, 1.836087, 1.837974, 1.839857, 1.841737, + 1.843613 + } + }, + { + 481, 40.000000, 1000.000000, + 1.0, + { + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, @@ -5154,80 +7406,6 @@ static xspect illoc_Plankian_CIE_1931_2[3] = { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, - 1.000000, 1.000000, 1.000000, 1.000000 - } - }, - { - 189, 60.000000, 1000.000000, - 1.0, - { - 1.807443, 1.767939, 1.728424, 1.688977, 1.649677, - 1.610595, 1.571797, 1.533345, 1.495294, 1.457694, - 1.420591, 1.384023, 1.348026, 1.312628, 1.277856, - 1.243731, 1.210269, 1.177483, 1.145385, 1.113980, - 1.083273, 1.053267, 1.023960, 0.995350, 0.967433, - 0.940204, 0.913655, 0.887779, 0.862566, 0.838007, - 0.814090, 0.790805, 0.768140, 0.746084, 0.724623, - 0.703745, 0.683438, 0.663689, 0.644486, 0.625814, - 0.607663, 0.590019, 0.572870, 0.556203, 0.540006, - 0.524267, 0.508975, 0.494117, 0.479683, 0.465661, - 0.452040, 0.438809, 0.425958, 0.413476, 0.401354, - 0.389581, 0.378149, 0.367047, 0.356266, 0.345798, - 0.335634, 0.325764, 0.316182, 0.306879, 0.297847, - 0.289078, 0.280566, 0.272302, 0.264279, 0.256492, - 0.248932, 0.241594, 0.234472, 0.227558, 0.220848, - 0.214334, 0.208013, 0.201877, 0.195922, 0.190142, - 0.184533, 0.179089, 0.173806, 0.168679, 0.163703, - 0.158875, 0.154189, 0.149641, 0.145229, 0.140947, - 0.136792, 0.132760, 0.128847, 0.125050, 0.121366, - 0.117792, 0.114323, 0.110958, 0.107692, 0.104523, - 0.101449, 0.098466, 0.095571, 0.092763, 0.090038, - 0.087394, 0.084829, 0.082340, 0.079926, 0.077583, - 0.075310, 0.073104, 0.070964, 0.068888, 0.066874, - 0.064919, 0.063023, 0.061184, 0.059399, 0.057667, - 0.055987, 0.054357, 0.052775, 0.051240, 0.049752, - 0.048307, 0.046906, 0.045546, 0.044226, 0.042946, - 0.041704, 0.040499, 0.039330, 0.038195, 0.037095, - 0.036027, 0.034990, 0.033985, 0.033009, 0.032062, - 0.031144, 0.030252, 0.029387, 0.028548, 0.027734, - 0.026943, 0.026177, 0.025432, 0.024710, 0.024009, - 0.023329, 0.022669, 0.022029, 0.021407, 0.020804, - 0.020219, 0.019651, 0.019099, 0.018564, 0.018044, - 0.017540, 0.017051, 0.016576, 0.016115, 0.015668, - 0.015233, 0.014811, 0.014402, 0.014005, 0.013619, - 0.013245, 0.012881, 0.012528, 0.012186, 0.011853, - 0.011530, 0.011217, 0.010912, 0.010617, 0.010329, - 0.010051, 0.009780, 0.009517, 0.009262, 0.009014, - 0.008773, 0.008540, 0.008313, 0.008092 - } - } -}; - -static xspect illoc_Daylight_CIE_1964_10[3] = { - { - 69, 60.000000, 400.000000, - 1.0, - { - 0.949535, 0.948408, 0.947363, 0.946408, 0.945551, - 0.944800, 0.944161, 0.943639, 0.943243, 0.942976, - 0.942844, 0.942853, 0.943006, 0.943308, 0.943763, - 0.944374, 0.945146, 0.946079, 0.947174, 0.948434, - 0.949861, 0.951455, 0.953217, 0.955146, 0.957242, - 0.959504, 0.961930, 0.964519, 0.967268, 0.970175, - 0.973237, 0.976450, 0.979812, 0.983317, 0.986963, - 0.990743, 0.994653, 0.998688, 1.002842, 1.007108, - 1.011480, 1.015951, 1.020514, 1.025161, 1.029883, - 1.034672, 1.039519, 1.044415, 1.049348, 1.054309, - 1.059288, 1.064271, 1.069249, 1.074207, 1.079135, - 1.084018, 1.088844, 1.093597, 1.098265, 1.102832, - 1.107284, 1.111605, 1.115781, 1.119796, 1.123634, - 1.127280, 1.130718, 1.133933, 1.136910 - } - }, - { - 69, 60.000000, 400.000000, - 1.0, - { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, @@ -5241,78 +7419,165 @@ static xspect illoc_Daylight_CIE_1964_10[3] = { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, - 1.000000, 1.000000, 1.000000, 1.000000 + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, + 1.000000 } }, { - 69, 60.000000, 400.000000, + 481, 40.000000, 1000.000000, 1.0, { - 1.736104, 1.699156, 1.662051, 1.624867, 1.587679, - 1.550555, 1.513559, 1.476750, 1.440182, 1.403904, - 1.367961, 1.332394, 1.297239, 1.262528, 1.228292, - 1.194555, 1.161341, 1.128728, 1.096782, 1.065445, - 1.034742, 1.004693, 0.975315, 0.946623, 0.918626, - 0.891332, 0.864747, 0.838873, 0.813712, 0.789262, - 0.765521, 0.742485, 0.720149, 0.698506, 0.677549, - 0.657271, 0.637662, 0.618713, 0.600415, 0.582756, - 0.565728, 0.549318, 0.533516, 0.518310, 0.503690, - 0.489644, 0.476161, 0.463230, 0.450839, 0.438977, - 0.427633, 0.416797, 0.406457, 0.396605, 0.387228, - 0.378318, 0.369864, 0.361858, 0.354290, 0.347151, - 0.340434, 0.334131, 0.328233, 0.322735, 0.317629, - 0.312911, 0.308575, 0.304616, 0.301031 + 1.924417, 1.909963, 1.895433, 1.880833, 1.866169, + 1.851446, 1.836670, 1.821847, 1.806982, 1.792079, + 1.777145, 1.762185, 1.747204, 1.732207, 1.717200, + 1.702186, 1.687172, 1.672162, 1.657160, 1.642171, + 1.627200, 1.612250, 1.597327, 1.582434, 1.567576, + 1.552755, 1.537977, 1.523244, 1.508560, 1.493928, + 1.479353, 1.464836, 1.450380, 1.435990, 1.421667, + 1.407414, 1.393233, 1.379128, 1.365099, 1.351151, + 1.337283, 1.323499, 1.309801, 1.296189, 1.282666, + 1.269233, 1.255891, 1.242643, 1.229488, 1.216429, + 1.203466, 1.190600, 1.177833, 1.165164, 1.152595, + 1.140127, 1.127759, 1.115493, 1.103328, 1.091266, + 1.079307, 1.067450, 1.055696, 1.044046, 1.032499, + 1.021055, 1.009714, 0.998477, 0.987344, 0.976313, + 0.965385, 0.954560, 0.943837, 0.933217, 0.922698, + 0.912282, 0.901966, 0.891751, 0.881636, 0.871622, + 0.861707, 0.851891, 0.842173, 0.832554, 0.823032, + 0.813606, 0.804277, 0.795044, 0.785906, 0.776862, + 0.767912, 0.759056, 0.750292, 0.741619, 0.733038, + 0.724548, 0.716148, 0.707836, 0.699613, 0.691478, + 0.683430, 0.675469, 0.667593, 0.659802, 0.652096, + 0.644473, 0.636932, 0.629474, 0.622098, 0.614802, + 0.607586, 0.600449, 0.593390, 0.586410, 0.579507, + 0.572679, 0.565928, 0.559252, 0.552649, 0.546121, + 0.539665, 0.533281, 0.526969, 0.520728, 0.514556, + 0.508454, 0.502421, 0.496455, 0.490557, 0.484726, + 0.478960, 0.473260, 0.467625, 0.462053, 0.456545, + 0.451100, 0.445716, 0.440394, 0.435133, 0.429932, + 0.424791, 0.419708, 0.414684, 0.409718, 0.404808, + 0.399955, 0.395158, 0.390417, 0.385730, 0.381097, + 0.376517, 0.371991, 0.367517, 0.363095, 0.358724, + 0.354404, 0.350135, 0.345915, 0.341744, 0.337621, + 0.333547, 0.329520, 0.325540, 0.321607, 0.317720, + 0.313878, 0.310081, 0.306329, 0.302621, 0.298956, + 0.295335, 0.291756, 0.288219, 0.284723, 0.281269, + 0.277856, 0.274483, 0.271149, 0.267855, 0.264600, + 0.261384, 0.258205, 0.255064, 0.251961, 0.248894, + 0.245864, 0.242869, 0.239910, 0.236986, 0.234097, + 0.231243, 0.228422, 0.225635, 0.222881, 0.220161, + 0.217472, 0.214816, 0.212191, 0.209598, 0.207035, + 0.204504, 0.202002, 0.199531, 0.197089, 0.194677, + 0.192293, 0.189938, 0.187612, 0.185313, 0.183042, + 0.180798, 0.178581, 0.176391, 0.174227, 0.172090, + 0.169978, 0.167891, 0.165830, 0.163794, 0.161782, + 0.159794, 0.157831, 0.155891, 0.153975, 0.152082, + 0.150211, 0.148364, 0.146539, 0.144736, 0.142954, + 0.141195, 0.139457, 0.137739, 0.136043, 0.134367, + 0.132712, 0.131077, 0.129462, 0.127866, 0.126290, + 0.124733, 0.123194, 0.121675, 0.120174, 0.118692, + 0.117227, 0.115781, 0.114352, 0.112940, 0.111546, + 0.110169, 0.108808, 0.107465, 0.106137, 0.104826, + 0.103531, 0.102252, 0.100988, 0.099740, 0.098508, + 0.097290, 0.096087, 0.094899, 0.093726, 0.092567, + 0.091422, 0.090291, 0.089174, 0.088071, 0.086981, + 0.085905, 0.084842, 0.083792, 0.082755, 0.081731, + 0.080719, 0.079720, 0.078733, 0.077759, 0.076796, + 0.075845, 0.074906, 0.073978, 0.073062, 0.072157, + 0.071264, 0.070381, 0.069509, 0.068648, 0.067798, + 0.066958, 0.066128, 0.065309, 0.064500, 0.063701, + 0.062911, 0.062132, 0.061362, 0.060602, 0.059851, + 0.059109, 0.058376, 0.057653, 0.056938, 0.056233, + 0.055536, 0.054848, 0.054168, 0.053497, 0.052834, + 0.052179, 0.051532, 0.050893, 0.050263, 0.049640, + 0.049025, 0.048417, 0.047817, 0.047224, 0.046639, + 0.046061, 0.045490, 0.044927, 0.044370, 0.043820, + 0.043277, 0.042741, 0.042211, 0.041688, 0.041172, + 0.040662, 0.040158, 0.039660, 0.039169, 0.038684, + 0.038205, 0.037731, 0.037264, 0.036802, 0.036347, + 0.035897, 0.035452, 0.035013, 0.034579, 0.034151, + 0.033728, 0.033311, 0.032899, 0.032491, 0.032089, + 0.031692, 0.031300, 0.030912, 0.030530, 0.030152, + 0.029779, 0.029411, 0.029047, 0.028688, 0.028333, + 0.027982, 0.027636, 0.027295, 0.026957, 0.026624, + 0.026295, 0.025970, 0.025649, 0.025332, 0.025019, + 0.024709, 0.024404, 0.024103, 0.023805, 0.023511, + 0.023221, 0.022934, 0.022651, 0.022371, 0.022095, + 0.021822, 0.021553, 0.021287, 0.021024, 0.020765, + 0.020509, 0.020256, 0.020006, 0.019759, 0.019515, + 0.019275, 0.019037, 0.018803, 0.018571, 0.018342, + 0.018116, 0.017893, 0.017672, 0.017455, 0.017240, + 0.017028, 0.016818, 0.016611, 0.016406, 0.016205, + 0.016005, 0.015808, 0.015614, 0.015422, 0.015232, + 0.015045, 0.014860, 0.014677, 0.014497, 0.014319, + 0.014143, 0.013969, 0.013798, 0.013628, 0.013461, + 0.013296, 0.013132, 0.012971, 0.012812, 0.012655, + 0.012500, 0.012346, 0.012195, 0.012046, 0.011898, + 0.011752, 0.011608, 0.011466, 0.011325, 0.011187, + 0.011050, 0.010915, 0.010781, 0.010649, 0.010519, + 0.010390, 0.010263, 0.010137, 0.010013, 0.009891, + 0.009770, 0.009651, 0.009533, 0.009416, 0.009301, + 0.009188, 0.009076, 0.008965, 0.008856, 0.008747, + 0.008641, 0.008535, 0.008431, 0.008328, 0.008227, + 0.008127, 0.008028, 0.007930, 0.007833, 0.007738, + 0.007644, 0.007551, 0.007459, 0.007368, 0.007278, + 0.007190, 0.007102, 0.007016, 0.006931, 0.006847, + 0.006763, 0.006681, 0.006600, 0.006520, 0.006441, + 0.006363 } } }; -static xspect illoc_Plankian_CIE_1964_10[3] = { +static xspect illoc_ODaylight_CIE_1964_10[3] = { { - 189, 60.000000, 1000.000000, + 181, 40.000000, 400.000000, 1.0, { - 0.974241, 0.972539, 0.970952, 0.969490, 0.968163, - 0.966977, 0.965941, 0.965060, 0.964340, 0.963785, - 0.963398, 0.963183, 0.963140, 0.963272, 0.963578, - 0.964058, 0.964713, 0.965540, 0.966539, 0.967707, - 0.969041, 0.970540, 0.972201, 0.974020, 0.975994, - 0.978121, 0.980396, 0.982816, 0.985378, 0.988077, - 0.990911, 0.993876, 0.996967, 1.000182, 1.003517, - 1.006968, 1.010533, 1.014206, 1.017986, 1.021868, - 1.025851, 1.029929, 1.034101, 1.038362, 1.042711, - 1.047144, 1.051659, 1.056252, 1.060921, 1.065663, - 1.070476, 1.075357, 1.080304, 1.085314, 1.090384, - 1.095514, 1.100699, 1.105939, 1.111231, 1.116573, - 1.121962, 1.127398, 1.132878, 1.138400, 1.143962, - 1.149564, 1.155202, 1.160875, 1.166582, 1.172320, - 1.178090, 1.183888, 1.189713, 1.195565, 1.201441, - 1.207340, 1.213262, 1.219204, 1.225165, 1.231144, - 1.237140, 1.243152, 1.249179, 1.255219, 1.261272, - 1.267336, 1.273410, 1.279494, 1.285586, 1.291686, - 1.297792, 1.303903, 1.310020, 1.316140, 1.322264, - 1.328390, 1.334517, 1.340646, 1.346774, 1.352902, - 1.359028, 1.365152, 1.371274, 1.377392, 1.383506, - 1.389615, 1.395720, 1.401819, 1.407911, 1.413996, - 1.420075, 1.426145, 1.432207, 1.438260, 1.444304, - 1.450337, 1.456361, 1.462374, 1.468376, 1.474367, - 1.480346, 1.486312, 1.492266, 1.498207, 1.504134, - 1.510048, 1.515948, 1.521834, 1.527705, 1.533561, - 1.539402, 1.545228, 1.551037, 1.556831, 1.562609, - 1.568370, 1.574114, 1.579842, 1.585552, 1.591245, - 1.596920, 1.602578, 1.608217, 1.613839, 1.619442, - 1.625026, 1.630592, 1.636139, 1.641668, 1.647177, - 1.652666, 1.658137, 1.663587, 1.669019, 1.674430, - 1.679822, 1.685193, 1.690544, 1.695876, 1.701187, - 1.706477, 1.711747, 1.716997, 1.722226, 1.727434, - 1.732621, 1.737788, 1.742934, 1.748058, 1.753162, - 1.758245, 1.763306, 1.768347, 1.773366, 1.778364, - 1.783341, 1.788296, 1.793230, 1.798143, 1.803034, - 1.807904, 1.812753, 1.817580, 1.822386, 1.827170, - 1.831933, 1.836674, 1.841394, 1.846092 + 0.954689, 0.954137, 0.953592, 0.953054, 0.952523, + 0.952001, 0.951488, 0.950984, 0.950490, 0.950007, + 0.949535, 0.949074, 0.948627, 0.948192, 0.947770, + 0.947363, 0.946970, 0.946591, 0.946229, 0.945882, + 0.945551, 0.945238, 0.944942, 0.944663, 0.944402, + 0.944161, 0.943938, 0.943734, 0.943550, 0.943386, + 0.943243, 0.943120, 0.943019, 0.942939, 0.942880, + 0.942844, 0.942831, 0.942840, 0.942872, 0.942927, + 0.943006, 0.943109, 0.943235, 0.943387, 0.943562, + 0.943763, 0.943988, 0.944239, 0.944516, 0.944818, + 0.945146, 0.945500, 0.945880, 0.946285, 0.946716, + 0.947174, 0.947658, 0.948168, 0.948706, 0.949270, + 0.949861, 0.950478, 0.951123, 0.951794, 0.952492, + 0.953217, 0.953969, 0.954747, 0.955552, 0.956384, + 0.957242, 0.958127, 0.959039, 0.959976, 0.960940, + 0.961930, 0.962946, 0.963988, 0.965056, 0.966149, + 0.967268, 0.968412, 0.969581, 0.970775, 0.971994, + 0.973237, 0.974504, 0.975796, 0.977111, 0.978450, + 0.979812, 0.981197, 0.982605, 0.984035, 0.985488, + 0.986963, 0.988459, 0.989976, 0.991515, 0.993074, + 0.994653, 0.996252, 0.997871, 0.999509, 1.001166, + 1.002842, 1.004535, 1.006246, 1.007974, 1.009719, + 1.011480, 1.013257, 1.015050, 1.016857, 1.018679, + 1.020514, 1.022363, 1.024225, 1.026100, 1.027986, + 1.029883, 1.031791, 1.033710, 1.035637, 1.037574, + 1.039519, 1.041472, 1.043432, 1.045399, 1.047371, + 1.049348, 1.051330, 1.053315, 1.055304, 1.057295, + 1.059288, 1.061281, 1.063275, 1.065268, 1.067259, + 1.069249, 1.071235, 1.073218, 1.075196, 1.077168, + 1.079135, 1.081094, 1.083046, 1.084988, 1.086921, + 1.088844, 1.090754, 1.092653, 1.094538, 1.096409, + 1.098265, 1.100105, 1.101927, 1.103732, 1.105518, + 1.107284, 1.109029, 1.110752, 1.112453, 1.114129, + 1.115781, 1.117407, 1.119007, 1.120578, 1.122121, + 1.123634, 1.125116, 1.126567, 1.127985, 1.129369, + 1.130718, 1.132032, 1.133309, 1.134548, 1.135749, + 1.136910 } }, { - 189, 60.000000, 1000.000000, + 181, 40.000000, 400.000000, 1.0, { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, @@ -5351,52 +7616,50 @@ static xspect illoc_Plankian_CIE_1964_10[3] = { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, - 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, - 1.000000, 1.000000, 1.000000, 1.000000 + 1.000000 } }, { - 189, 60.000000, 1000.000000, + 181, 40.000000, 400.000000, 1.0, { - 1.775958, 1.738417, 1.700795, 1.663169, 1.625615, - 1.588201, 1.550992, 1.514049, 1.477427, 1.441177, - 1.405344, 1.369969, 1.335088, 1.300732, 1.266930, - 1.233704, 1.201074, 1.169056, 1.137662, 1.106903, - 1.076786, 1.047315, 1.018493, 0.990321, 0.962796, - 0.935916, 0.909677, 0.884073, 0.859098, 0.834744, - 0.811003, 0.787866, 0.765323, 0.743365, 0.721980, - 0.701159, 0.680891, 0.661164, 0.641968, 0.623290, - 0.605120, 0.587446, 0.570257, 0.553542, 0.537290, - 0.521489, 0.506129, 0.491199, 0.476688, 0.462586, - 0.448883, 0.435567, 0.422630, 0.410062, 0.397852, - 0.385993, 0.374473, 0.363285, 0.352420, 0.341868, - 0.331622, 0.321672, 0.312013, 0.302634, 0.293529, - 0.284689, 0.276109, 0.267780, 0.259696, 0.251849, - 0.244234, 0.236843, 0.229670, 0.222710, 0.215956, - 0.209402, 0.203043, 0.196873, 0.190887, 0.185079, - 0.179445, 0.173979, 0.168676, 0.163533, 0.158544, - 0.153704, 0.149010, 0.144457, 0.140042, 0.135759, - 0.131606, 0.127578, 0.123672, 0.119884, 0.116210, - 0.112648, 0.109194, 0.105845, 0.102598, 0.099449, - 0.096397, 0.093437, 0.090567, 0.087785, 0.085088, - 0.082473, 0.079938, 0.077480, 0.075098, 0.072788, - 0.070550, 0.068380, 0.066276, 0.064237, 0.062260, - 0.060345, 0.058488, 0.056688, 0.054943, 0.053252, - 0.051613, 0.050025, 0.048485, 0.046993, 0.045547, - 0.044145, 0.042787, 0.041470, 0.040194, 0.038958, - 0.037760, 0.036598, 0.035473, 0.034382, 0.033325, - 0.032300, 0.031308, 0.030346, 0.029413, 0.028510, - 0.027634, 0.026786, 0.025963, 0.025166, 0.024394, - 0.023646, 0.022921, 0.022218, 0.021537, 0.020877, - 0.020237, 0.019618, 0.019017, 0.018435, 0.017871, - 0.017324, 0.016795, 0.016281, 0.015784, 0.015302, - 0.014835, 0.014382, 0.013943, 0.013518, 0.013106, - 0.012706, 0.012319, 0.011944, 0.011581, 0.011228, - 0.010887, 0.010556, 0.010235, 0.009925, 0.009623, - 0.009331, 0.009048, 0.008774, 0.008508, 0.008251, - 0.008001, 0.007759, 0.007524, 0.007297, 0.007077, - 0.006863, 0.006656, 0.006455, 0.006261 + 1.880550, 1.866451, 1.852259, 1.837979, 1.823618, + 1.809182, 1.794679, 1.780113, 1.765491, 1.750820, + 1.736104, 1.721349, 1.706561, 1.691745, 1.676907, + 1.662051, 1.647182, 1.632306, 1.617427, 1.602550, + 1.587679, 1.572818, 1.557971, 1.543143, 1.528338, + 1.513559, 1.498810, 1.484094, 1.469415, 1.454777, + 1.440182, 1.425633, 1.411134, 1.396687, 1.382295, + 1.367961, 1.353687, 1.339475, 1.325329, 1.311249, + 1.297239, 1.283299, 1.269433, 1.255642, 1.241928, + 1.228292, 1.214736, 1.201262, 1.187870, 1.174563, + 1.161341, 1.148206, 1.135188, 1.122292, 1.109489, + 1.096782, 1.084173, 1.071663, 1.059253, 1.046946, + 1.034742, 1.022643, 1.010649, 0.998763, 0.986985, + 0.975315, 0.963755, 0.952306, 0.940967, 0.929740, + 0.918626, 0.907623, 0.896734, 0.885958, 0.875296, + 0.864747, 0.854312, 0.843991, 0.833784, 0.823691, + 0.813712, 0.803847, 0.794095, 0.784457, 0.774933, + 0.765521, 0.756222, 0.747036, 0.737962, 0.729000, + 0.720149, 0.711409, 0.702779, 0.694260, 0.685850, + 0.677549, 0.669357, 0.661272, 0.653296, 0.645425, + 0.637662, 0.630004, 0.622450, 0.615002, 0.607657, + 0.600415, 0.593275, 0.586237, 0.579301, 0.572464, + 0.565728, 0.559090, 0.552551, 0.546109, 0.539764, + 0.533516, 0.527363, 0.521304, 0.515340, 0.509469, + 0.503690, 0.498004, 0.492408, 0.486903, 0.481488, + 0.476161, 0.470923, 0.465772, 0.460709, 0.455731, + 0.450839, 0.446031, 0.441307, 0.436667, 0.432109, + 0.427633, 0.423238, 0.418924, 0.414689, 0.410534, + 0.406457, 0.402459, 0.398537, 0.394691, 0.390922, + 0.387228, 0.383608, 0.380063, 0.376591, 0.373191, + 0.369864, 0.366608, 0.363424, 0.360309, 0.357265, + 0.354290, 0.351383, 0.348545, 0.345774, 0.343071, + 0.340434, 0.337863, 0.335359, 0.332919, 0.330544, + 0.328233, 0.325986, 0.323803, 0.321683, 0.319625, + 0.317629, 0.315696, 0.313824, 0.312014, 0.310264, + 0.308575, 0.306946, 0.305378, 0.303869, 0.302420, + 0.301031 } } }; @@ -5453,16 +7716,13 @@ static double cct2_func(void *fdata, double tp[]) { } -/* Given a choice of temperature dependent illuminant (icxIT_Dtemp or icxIT_Ptemp), */ -/* return the closest correlated color temperature to the XYZ. */ -/* An observer type can be chosen for interpretting the spectrum of the input and */ -/* the illuminant. */ +/* Given a particular locus indexed in Mired, */ +/* return the closest color temperature to the XYZ. */ /* Return -1.0 on erorr */ -double icx_XYZ2ill_ct2( +static double icx_XYZ2ill_ct3( double txyz[3], /* If not NULL, return the XYZ of the locus temperature */ -icxIllumeType ilType, /* Type of illuminant, icxIT_Dtemp or icxIT_Ptemp */ -icxObserverType obType, /* Observer, CIE_1931_2 or CIE_1964_10 */ -double xyz[3], /* Input XYZ value */ +xspect *iloc, /* Locus to match to */ +double xyz[3], /* Input XYZ value in given observer space. */ int viscct /* nz to use visual CIEDE2000, 0 to use CCT CIE 1960 UCS. */ ) { cct2ctx x; /* Context for callback */ @@ -5472,27 +7732,7 @@ int viscct /* nz to use visual CIEDE2000, 0 to use CCT CIE 1960 UCS. */ double tc, ber, bct = 0.0; x.viscct = viscct; - - if (ilType != icxIT_Dtemp && ilType != icxIT_Ptemp) - return -1.0; - if (obType != icxOT_CIE_1931_2 && obType != icxOT_CIE_1964_10) - return -1.0; - - /* Locus to use */ - if (obType == icxOT_CIE_1931_2) { - if (ilType == icxIT_Dtemp) { - x.iloc = illoc_Daylight_CIE_1931_2; - } else { - x.iloc = illoc_Plankian_CIE_1931_2; - } - } else { - if (ilType == icxIT_Dtemp) { - x.iloc = illoc_Daylight_CIE_1964_10; - } else { - x.iloc = illoc_Plankian_CIE_1964_10; - } - } - + x.iloc = iloc; icmAry2Ary(x.xyz, xyz); /* Normalise target */ @@ -5536,14 +7776,61 @@ int viscct /* nz to use visual CIEDE2000, 0 to use CCT CIE 1960 UCS. */ return 1e6/cp[0]; } -/* Given a choice of temperature dependent illuminant (icxIT_Dtemp or icxIT_Ptemp), */ +/* Given a choice of temperature dependent illuminant (icxIT_[O]Dtemp or icxIT_[O]Ptemp), */ +/* return the closest correlated color temperature to the XYZ. */ +/* An observer type can be chosen for interpretting the spectrum of the input and */ +/* the illuminant. */ +/* Return -1.0 on erorr */ +double icx_XYZ2ill_ct2( +double txyz[3], /* If not NULL, return the XYZ of the locus temperature */ +icxIllumeType ilType, /* Type of illuminant, icxIT_[O]Dtemp or icxIT_[O]Ptemp */ +icxObserverType obType, /* Observer, CIE_1931_2 or CIE_1964_10 */ +double xyz[3], /* Input XYZ value in given observer space. */ +int viscct /* nz to use visual CIEDE2000, 0 to use CCT CIE 1960 UCS. */ +) { + xspect *iloc = NULL; + + if (ilType != icxIT_Dtemp && ilType != icxIT_Ptemp + && ilType != icxIT_ODtemp && ilType != icxIT_OPtemp) + return -1.0; + if (obType != icxOT_CIE_1931_2 && obType != icxOT_CIE_1964_10) + return -1.0; + + /* Locus to use */ + if (obType == icxOT_CIE_1931_2) { + if (ilType == icxIT_Dtemp) { + iloc = illoc_Daylight_CIE_1931_2; + } else if (ilType == icxIT_Ptemp) { + iloc = illoc_Plankian_CIE_1931_2; + } else if (ilType == icxIT_ODtemp) { + iloc = illoc_ODaylight_CIE_1931_2; + } else if (ilType == icxIT_OPtemp) { + iloc = illoc_OPlankian_CIE_1931_2; + } + } else { + if (ilType == icxIT_Dtemp) { + iloc = illoc_Daylight_CIE_1964_10; + } else if (ilType == icxIT_Ptemp) { + iloc = illoc_Plankian_CIE_1964_10; + } else if (ilType == icxIT_ODtemp) { + iloc = illoc_ODaylight_CIE_1964_10; + } else if (ilType == icxIT_OPtemp) { + iloc = illoc_OPlankian_CIE_1964_10; + } + } + + /* Let icx_XYZ2ill_ct3() do all the hard work */ + return icx_XYZ2ill_ct3(txyz, iloc, xyz, viscct); +} + +/* Given a choice of temperature dependent illuminant (icxIT_[O]Dtemp or icxIT_[O]Ptemp), */ /* a color temperature and a Y value, return the corresponding XYZ */ /* An observer type can be chosen for interpretting the spectrum of the input and */ /* the illuminant. */ /* Return xyz[0] = -1.0 on erorr */ void icx_ill_ct2XYZ( double xyz[3], /* Return the XYZ value */ -icxIllumeType ilType, /* Type of illuminant, icxIT_Dtemp or icxIT_Ptemp */ +icxIllumeType ilType, /* Type of illuminant, icxIT_[O]Dtemp or icxIT_[O]Ptemp */ icxObserverType obType, /* Observer, CIE_1931_2 or CIE_1964_10 */ int viscct, /* nz to use visual CIEDE2000, 0 to use CCT CIE 1960 UCS. */ double tin, /* Input temperature */ @@ -5553,7 +7840,8 @@ double Yin /* Input Y value */ double cp[1], s[1]; - if (ilType != icxIT_Dtemp && ilType != icxIT_Ptemp) { + if (ilType != icxIT_Dtemp && ilType != icxIT_Ptemp + && ilType != icxIT_ODtemp && ilType != icxIT_OPtemp) { xyz[0] = -1.0; return; } @@ -5566,14 +7854,22 @@ double Yin /* Input Y value */ if (obType == icxOT_CIE_1931_2) { if (ilType == icxIT_Dtemp) { iloc = illoc_Daylight_CIE_1931_2; - } else { + } else if (ilType == icxIT_Ptemp) { iloc = illoc_Plankian_CIE_1931_2; + } else if (ilType == icxIT_ODtemp) { + iloc = illoc_ODaylight_CIE_1931_2; + } else if (ilType == icxIT_OPtemp) { + iloc = illoc_OPlankian_CIE_1931_2; } } else { if (ilType == icxIT_Dtemp) { iloc = illoc_Daylight_CIE_1964_10; - } else { + } else if (ilType == icxIT_Ptemp) { iloc = illoc_Plankian_CIE_1964_10; + } else if (ilType == icxIT_ODtemp) { + iloc = illoc_ODaylight_CIE_1964_10; + } else if (ilType == icxIT_OPtemp) { + iloc = illoc_OPlankian_CIE_1964_10; } } @@ -6491,7 +8787,7 @@ int icx_ill_sp2XYZ( double xyz[3], /* Return XYZ value with Y == 1 */ icxObserverType obType, /* Observer */ xspect custObserver[3], /* Optional custom observer */ -icxIllumeType ilType, /* Type of illuminant, icxIT_Dtemp or icxIT_Ptemp */ +icxIllumeType ilType, /* Type of illuminant, icxIT_[O]Dtemp or icxIT_[O]Ptemp */ double ct, /* Input temperature in degrees K */ xspect *custIllum /* Optional custom illuminant */ ) { @@ -6519,10 +8815,48 @@ xspect *custIllum /* Optional custom illuminant */ } /* - - - - - - - - - - - - - - - - - - - - - - - - - - */ +/* Aproximate CCT using polinomial. No good < 3000K */ +/* Use this for sanity check */ +#ifdef NEVER +static double aprox_CCT(double xyz[3]) { + double xe = 0.3366; + double ye = 0.1735; + double A0 = -949.86315; + double A1 = 6253.80338; + double t1 = 0.92159; + double A2 = 28.70599; + double t2 = 0.20039; + double A3 = 0.00004; + double t3 = 0.07125; + double Yxy[3]; + double n; + double cct; + + icmXYZ2Yxy(Yxy, xyz); + n = (Yxy[1] - xe)/(Yxy[2] - ye); + cct = A0 + A1 * exp(-n/t1) + A2 * exp(-n/t2) + A3 * exp(-n/t3); + + return cct; +} +#else +static double aprox_CCT(double xyz[3]) { + double Yxy[3]; + double n; + double cct; + + icmXYZ2Yxy(Yxy, xyz); + n = (Yxy[1] - 0.3320)/(Yxy[2] - 0.1858); + cct = -449.0 * n * n * n + 3525.0 * n * n - 6823.3 * n + 5520.33; + return cct; +} +#endif + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - */ +/* Full precision CCT */ /* Context for optimiser callback */ typedef struct { - icxIllumeType ilType; /* Type of illuminant, icxIT_Dtemp or icxIT_Ptemp */ + icxIllumeType ilType; /* Type of illuminant, icxIT_[O]Dtemp or icx[O]IT_Ptemp */ double xyz[3]; /* Target XYZ */ icmXYZNumber XYZ; /* Target as XYZ number */ xsp2cie *conv; /* Means of converting spectrum to XYZ */ @@ -6541,9 +8875,15 @@ static double cct_func(void *fdata, double tp[]) { if (x->ilType == icxIT_Dtemp) { if (daylight_il(&sp, tp[0]) != 0) rv = 1e6; - } else { + } else if (x->ilType == icxIT_Ptemp) { if (planckian_il(&sp, tp[0]) != 0) rv = 1e6; + } else if (x->ilType == icxIT_ODtemp) { + if (daylight_old_il(&sp, tp[0]) != 0) + rv = 1e6; + } else if (x->ilType == icxIT_OPtemp) { + if (planckian_old_il(&sp, tp[0]) != 0) + rv = 1e6; } if (rv == 0.0) { @@ -6570,14 +8910,14 @@ static double cct_func(void *fdata, double tp[]) { } -/* Given a choice of temperature dependent illuminant (icxIT_Dtemp or icxIT_Ptemp), */ +/* Given a choice of temperature dependent illuminant (icxIT_[O]Dtemp or icxIT_[O]Ptemp), */ /* return the closest correlated color temperature to the given spectrum or XYZ. */ /* An observer type can be chosen for interpretting the spectrum of the input and */ /* the illuminant. */ /* Return -1 on erorr */ double icx_XYZ2ill_ct( double txyz[3], /* If not NULL, return the XYZ of the locus temperature */ -icxIllumeType ilType, /* Type of illuminant, icxIT_Dtemp or icxIT_Ptemp */ +icxIllumeType ilType, /* Type of illuminant, icxIT_[O]Dtemp or icx[O]IT_Ptemp */ icxObserverType obType, /* Observer */ xspect custObserver[3], /* Optional custom observer */ double xyz[3], /* Input XYZ value, NULL if spectrum intead */ @@ -6592,7 +8932,8 @@ int viscct /* nz to use visual CIEDE2000, 0 to use CCT CIE 1960 UCS. */ x.viscct = viscct; - if (ilType != icxIT_Dtemp && ilType != icxIT_Ptemp) + if (ilType != icxIT_Dtemp && ilType != icxIT_Ptemp + && ilType != icxIT_ODtemp && ilType != icxIT_OPtemp) return -1.0; x.ilType = ilType; @@ -6606,6 +8947,7 @@ int viscct /* nz to use visual CIEDE2000, 0 to use CCT CIE 1960 UCS. */ } else { icmAry2Ary(x.xyz, xyz); } +//printf("~1 aprox CCT = %f\n",aprox_CCT(x.xyz)); /* Normalise target */ x.xyz[0] /= x.xyz[1]; @@ -6640,12 +8982,24 @@ int viscct /* nz to use visual CIEDE2000, 0 to use CCT CIE 1960 UCS. */ txyz[0] = txyz[2] = txyz[1] = cp[0] = 0.0; return cp[0]; } - } else { + } else if (x.ilType == icxIT_Ptemp) { if (planckian_il(&sp, cp[0]) != 0) { x.conv->del(x.conv); txyz[0] = txyz[2] = txyz[1] = cp[0] = 0.0; return cp[0]; } + } else if (x.ilType == icxIT_ODtemp) { + if (daylight_old_il(&sp, cp[0]) != 0) { + x.conv->del(x.conv); + txyz[0] = txyz[2] = txyz[1] = cp[0] = 0.0; + return cp[0]; + } + } else if (x.ilType == icxIT_OPtemp) { + if (planckian_old_il(&sp, cp[0]) != 0) { + x.conv->del(x.conv); + txyz[0] = txyz[2] = txyz[1] = cp[0] = 0.0; + return cp[0]; + } } x.conv->convert(x.conv, txyz, &sp); /* Make sure locus XYZ is Normalised */ @@ -6655,7 +9009,7 @@ int viscct /* nz to use visual CIEDE2000, 0 to use CCT CIE 1960 UCS. */ } x.conv->del(x.conv); -//DBGF((DBGA,"returning %f with error %f delta E94 %f\n",cp[0],sqrt(rv))); +//DBGF((DBGA,"returning CT %f with error %f\n",cp[0],sqrt(rv))); return cp[0]; } @@ -6671,14 +9025,13 @@ static void UCSYuv2Ycd(double *out, double *in) { out[2] = (1.708 * v - 1.481 * u + 0.404)/v; } - - /* Compute the CIE1995 CRI: Ra */ /* Return < 0.0 on error */ /* If invalid is not NULL, set it to nz if CRI */ /* is invalid because the sample is not white enough. */ double icx_CIE1995_CRI( int *invalid, /* if not NULL, set to nz if invalid */ +double cris[14], /* If not NULL, return the TCS01-14 CRI's */ xspect *sample /* Illuminant sample to compute CRI of */ ) { int i; @@ -6691,15 +9044,21 @@ xspect *sample /* Illuminant sample to compute CRI of */ double sa[3]; /* Sample white in CIE 1960 UCS */ double sa_Ycd[3]; /* Ycd sample white */ double dc; /* delta of sample to reference white in 1960 UCS */ - double ref[8][3]; /* reference XYZ/1964 color space */ - double sam[8][3]; /* sample XYZ/1964 color space */ + double ref[14][3]; /* reference XYZ/1964 color space */ + double sam[14][3]; /* sample XYZ/1964 color space */ double c_ad, d_ad; /* Chromatic adaptation scaling factors */ double cri = 0.0; + double sampnorm; /* Original sample norm value */ //DBGF((DBGA,"icx_CIE1995_CRI called\n")); - /* First find the standard 2 degree observer plankian CCT */ - if ((cct = icx_XYZ2ill_ct(NULL, icxIT_Ptemp, icxOT_CIE_1931_2, NULL, NULL, sample, 0)) < 0.0) + if ((tocie = new_xsp2cie(icxIT_none, NULL, icxOT_CIE_1931_2, NULL, icSigXYZData, 1)) == NULL) + return -1.0; + + /* Compute the XYZ of the sample */ + tocie->convert(tocie, sa, sample); + + if ((cct = icx_XYZ2ill_ct(NULL, icxIT_Ptemp, icxOT_CIE_1931_2, NULL, sa, NULL, 0)) < 0.0) return -1.0; //DBGF((DBGA,"CCT = %f\n", cct)); @@ -6713,19 +9072,16 @@ xspect *sample /* Illuminant sample to compute CRI of */ return -1.0; } - if ((tocie = new_xsp2cie(icxIT_none, NULL, icxOT_CIE_1931_2, NULL, icSigXYZData, 1)) == NULL) - return -1.0; - - /* Compute the XYZ of the reference white and sample */ + /* Compute the XYZ of the reference white */ tocie->convert(tocie, wt, &wts); - tocie->convert(tocie, sa, sample); //DBGF((DBGA,"XYZ white = %f %f %f\n",wt[0],wt[1],wt[2])); //DBGF((DBGA,"XYZ sampl = %f %f %f\n",sa[0],sa[1],sa[2])); /* Normalize the spectra so as to create a normalized white */ wts.norm *= wt[1]; - sample->norm *= sa[1]; /* ~~~ shouldn't change sample!!!! ~~~~ */ + sampnorm = sample->norm; /* Save this so we can restore it */ + sample->norm *= sa[1]; tocie->convert(tocie, wt, &wts); tocie->convert(tocie, sa, sample); tocie->del(tocie); @@ -6761,18 +9117,25 @@ xspect *sample /* Illuminant sample to compute CRI of */ } /* Check out the delta E for each reflective sample */ - if ((tocie = new_xsp2cie(icxIT_custom, &wts, icxOT_CIE_1931_2, NULL, icSigXYZData, 1)) == NULL) + if ((tocie = new_xsp2cie(icxIT_custom, &wts, icxOT_CIE_1931_2, NULL, icSigXYZData, 1)) == NULL) { + sample->norm = sampnorm; /* Restore this */ return -1.0; - for (i = 0; i < 8; i++) { + } + + /* We compute the CRI of each of the 14 samples, */ + /* even though only the first 8 are used to compute Ra */ + for (i = 0; i < 14; i++) { tocie->convert(tocie, ref[i], &CIE1995_TCS[i]); icmXYZ21964WUV(&wtn, ref[i], ref[i]); //DBGF((DBGA,"ref samp %d = WUV %f %f %f\n", i,ref[i][0],ref[i][1],ref[i][2])); } tocie->del(tocie); - if ((tocie = new_xsp2cie(icxIT_custom, sample, icxOT_CIE_1931_2, NULL, icSigXYZData, 1)) == NULL) + if ((tocie = new_xsp2cie(icxIT_custom, sample, icxOT_CIE_1931_2, NULL, icSigXYZData, 1)) == NULL) { + sample->norm = sampnorm; /* Restore this */ return -1.0; - for (i = 0; i < 8; i++) { + } + for (i = 0; i < 14; i++) { double c, d; tocie->convert(tocie, sam[i], &CIE1995_TCS[i]); @@ -6794,24 +9157,315 @@ xspect *sample /* Illuminant sample to compute CRI of */ } tocie->del(tocie); - /* Compute the CRI */ - for (i = 0; i < 8; i++) { + /* Compute the CRI of all 14, but only average the first 8. */ + for (i = 0; i < 14; i++) { double de, tcri; de = icmLabDE(ref[i], sam[i]); tcri = 100.0 - 4.6 * de; //DBGF((DBGA,"sample %d: de = %f, CRI = %f\n",i,de,tcri)); - cri += tcri; + if (cris != NULL) { + /* Should we clip -ve values ? */ + cris[i] = tcri; + } + if (i < 8) + cri += tcri; } cri /= 8.0; -//DBGF((DBGA,"average CRI = %f\n",cri)); +//DBGF((DBGA,"average CRI of first 8 = %f\n",cri)); if (cri < 0.0) cri = -1.0; //DBGF((DBGA,"returning CRI = %f\n",cri)); + sample->norm = sampnorm; /* Restore this */ return cri; } + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - */ + +/* EBU TLCI-2012 - used for the assessment of light sources for use in television lighting */ + +/* Camera and display model. Converts camera RGB into XYZ */ +static void TLCI_camdisp(double *out, double *in, double *wb) { + double cam[3][3] = { + { 1.182, -0.209, 0.027 }, + { 0.107, 0.890, 0.003 }, + { 0.040, -0.134, 1.094 } + }; + double a = (1.0 - 90.0/100)/3.0; + double aa = 1.0 - 2.0 * a; + double sat[3][3] = { + { aa, a, a }, + { a, aa, a }, + { a, a, aa } + }; + double disp[3][3] = { + { 0.412391, 0.357584, 0.180481 }, + { 0.212639, 0.715169, 0.072192 }, + { 0.019331, 0.119195, 0.950532 } + }; + int i; + +//DBGF((DBGA,"raw camera RGB %f %f %f\n",in[0],in[1],in[2])); + icmMul3(out, wb, in); /* Apply white balance */ +//DBGF((DBGA,"white balanced camera RGB %f %f %f\n",out[0],out[1],out[2])); + icmMulBy3x3(out, cam, out); /* Camera matrix RGB->RGB*/ +//DBGF((DBGA,"Rec709 optimized camera RGB %f %f %f\n",out[0],out[1],out[2])); + icmMulBy3x3(out, sat, out); /* Saturation matrix */ +//DBGF((DBGA,"Sat adjusted Rec709 camera RGB %f %f %f\n",out[0],out[1],out[2])); + + for (i = 0; i < 3; i++) { /* Camera OETF */ + if (out[i] < 0.018) + out[i] = 4.5 * out[i]; + else + out[i] = 1.099 * pow(out[i], 0.45) - 0.099; + } +//DBGF((DBGA,"Gamma encoded Rec709 camera RGB %f %f %f\n",out[0],out[1],out[2])); + for (i = 0; i < 3; i++) { /* Display OETF */ + if (out[i] < 0.0) + out[i] = 0.0; + else + out[i] = pow(out[i], 2.4); + } +//DBGF((DBGA,"Display RGB %f %f %f\n",out[0],out[1],out[2])); + icmMulBy3x3(out, disp, out); /* Display matrix RGB->XYZ */ + { + double lab[3]; + icmXYZ2Lab(&icmD65, lab, out); +//DBGF((DBGA,"Lab %f %f %f\n", lab[0], lab[1], lab[2])); + } +} + +/* Compute the EBU Television Lighting Consistency Index TLCI-2012 Qa (R 137) */ +/* Return < 0.0 on error */ +/* If invalid is not NULL, set it to nz if TLCI is invalid because the sample is */ +/* not white enough. */ +/* While it is not clear from the specification itself, it appears that it is expected */ +/* that the accuracy of this computation be deliberately crippled to 5nm integration, */ +/* resulting in agreement with TLCI-2012.exe is within 0.01 Qa. */ +/* When computed to higher 1nm accuracy, the resulting Qa values are typically 0.6-0.8 greater. */ +double icx_EBU2012_TLCI( +int *invalid, /* if not NULL, set to nz if invalid */ +xspect *sample /* Illuminant sample to compute TLCI of */ +) { + int i; + double cct; + + xsp2cie *tocie; /* spectral to XYZ conversion */ + + xspect wts; /* Reference white spectrum */ + double wt[3]; /* Reference white in CIE 1960 UCS */ + xsp2cie *reftoRGB; /* Spectrum to reference camera RGB */ + double refwb[3]; /* Reference camera RGB white balance scale */ + icmXYZNumber wtn; /* Lab reference white XYZ */ + + double sa[3]; /* Sample white in CIE 1960 UCS */ + xsp2cie *satoRGB; /* Spectrum to sample camera RGB */ + double sawb[3]; /* Sample camera RGB white balance scale */ + + double dc; /* delta of sample to reference white in 1960 UCS */ + double ref[24][3]; /* reference XYZ/1964 color space */ + double sam[24][3]; /* sample XYZ/1964 color space */ + double c_ad, d_ad; /* Chromatic adaptation scaling factors */ + double tlci = 0.0; + double sampnorm; /* Original sample norm value */ + + int dolowres = 1; /* [1] Use 5nm integration for better match with TLCI-2012.exe */ + +//DBGF((DBGA,"icx_EBU2012_TLCI called\n")); + + /* Create spectral to XYZ for UCS space delta */ + if ((tocie = new_xsp2cie(icxIT_none, NULL, icxOT_CIE_1931_2, NULL, icSigXYZData, 1)) == NULL) { +//DBGF((DBGA,"Ref new_xsp2cie failed\n")); + return -1.0; + } + + /* Compute the XYZ of the sample */ + tocie->convert(tocie, sa, sample); + + /* Find the standard 2 degree observer (Old) Plankian CCT */ + /* (This is a few degrees lower than the current Plankian CCT) */ + if ((cct = icx_XYZ2ill_ct(NULL, icxIT_OPtemp, icxOT_CIE_1931_2, NULL, sa, NULL, 0)) < 0.0) + { +//DBGF((DBGA,"Ref icx_XYZ2ill_ct failed\n")); + return -1.0; + } +//DBGF((DBGA,"CCT = %f\n", cct)); + + /* If it is 5000 or over, use the CDT instead, */ + if (cct > 5000.0) { + if ((cct = icx_XYZ2ill_ct(NULL, icxIT_Dtemp, icxOT_CIE_1931_2, NULL, sa, NULL, 0)) < 0.0) + { +//DBGF((DBGA,"Ref icx_XYZ2ill_ct failed\n")); + return -1.0; + } +//DBGF((DBGA,"CDT = %f\n", cct)); + } + + /* Create a reference white spectrum with the same CCT. */ + if (cct < 3400.0) { + if (planckian_old_il(&wts, cct)) { +//DBGF((DBGA,"planckian_old_il failed\n")); + return -1.0; + } + } else if (cct > 5000.0) { + if (daylight_il(&wts, cct)) { +//DBGF((DBGA,"daylight_il failed\n")); + return -1.0; + } + /* It's a blend between plankian(3400) and daylight(5000) */ + } else { + double dwt; /* Blend weight */ + xspect dwts; + if (planckian_old_il(&wts, 3400.0)) { +//DBGF((DBGA,"planckian_il failed\n")); + return -1.0; + } + if (daylight_il(&dwts, 5000.0)) { +//DBGF((DBGA,"daylight_il failed\n")); + return -1.0; + } + + dwt = (cct - 3400)/(5000.0 - 3400.0); +//DBGF((DBGA,"creating hybrid spectrum with %f Plankian & %f Daylight\n",(1.0 - dwt),dwt)); + for (i = 0; i < wts.spec_n; i++) { + double wl = XSPECT_XWL(&wts, i); /* Wavelength in meters */ + wts.spec[i] = dwt * value_xspect(&dwts, wl) + (1.0 - dwt) * wts.spec[i]; + } + } + + /* Compute the XYZ of the reference white */ + tocie->convert(tocie, wt, &wts); + +//DBGF((DBGA,"XYZ white = %f %f %f\n",wt[0],wt[1],wt[2])); +//DBGF((DBGA,"XYZ sampl = %f %f %f\n",sa[0],sa[1],sa[2])); + + /* Normalize the spectra so as to create a normalized white */ + wts.norm *= wt[1]; + sampnorm = sample->norm; /* Save this so we can restore it */ + sample->norm *= sa[1]; + tocie->convert(tocie, wt, &wts); + tocie->convert(tocie, sa, sample); + tocie->del(tocie); + tocie = NULL; + +//DBGF((DBGA,"norm XYZ white = %f %f %f\n",wt[0],wt[1],wt[2])); +//DBGF((DBGA,"norm XYZ sampl = %f %f %f\n",sa[0],sa[1],sa[2])); + + /* Convert to perceptual CIE 1960 UCS */ + icmXYZ21960UCS(wt, wt); /* 1960 UCS Yuv reference white */ + icmXYZ21960UCS(sa, sa); /* 1960 UCS Yuv sample white */ + +//DBGF((DBGA,"UCS white = %f %f %f\n",wt[0],wt[1],wt[2])); +//DBGF((DBGA,"UCS sampl = %f %f %f\n",sa[0],sa[1],sa[2])); + + dc = sqrt((wt[1] - sa[1]) * (wt[1] - sa[1]) + (wt[2] - sa[2]) * (wt[2] - sa[2])); + +//DBGF((DBGA,"dc = %f (normalized dist %f)\n",dc,dc/0.0054)); +//if (dc > 0.0054) DBGF((DBGA,"TLCI is invalid\n")); + + /* If dc > 0.0054 we should abort computing the TLCI, */ + /* but this means we fail on lots of real world lighting. */ + if (invalid != NULL) { + if (dc > 0.0054) + *invalid = 1; + else + *invalid = 0; + } + + /* Create spectral to camera RGB conversion for reference and sample illuminants */ + /* Note that xsp2cie will normalise the values such that the "Y" value */ + /* (actually G here) to be 1.0 for the perfect diffusor for the given illuminant, */ + /* but that the white balancing scaling would do this anyway. */ + if ((reftoRGB = new_xsp2cie(icxIT_custom, &wts, icxOT_EBU_2012, NULL, icSigXYZData, 1)) == NULL) { +//DBGF((DBGA,"new_xsp2cie for ref failed\n")); + sample->norm = sampnorm; /* Restore this */ + return -1.0; + } + if ((satoRGB = new_xsp2cie(icxIT_custom, sample, icxOT_EBU_2012, NULL, icSigXYZData, 1)) == NULL) { +//DBGF((DBGA,"new_xsp2cie for samp failed\n")); + sample->norm = sampnorm; /* Restore this */ + reftoRGB->del(reftoRGB); + return -1.0; + } + + /* Emulate TLCI-2012.exe */ + if (dolowres) { + reftoRGB->set_int_steps(reftoRGB, 5.0, 380.0, 760.0); + satoRGB->set_int_steps(satoRGB, 5.0, 380.0, 760.0); + } + + /* Compute a white balance for the reference and sample illuminants */ + /* such that 90% spectral flat produce camera RGB = 1.0 for the perfect reflector */ + reftoRGB->convert(reftoRGB, refwb, &il_none); +//DBGF((DBGA,"Ref white RGB = %f %f %f\n",refwb[0],refwb[1],refwb[2])); + refwb[0] = 1.0/(0.9 * refwb[0]); /* White balance scale factors */ + refwb[1] = 1.0/(0.9 * refwb[1]); + refwb[2] = 1.0/(0.9 * refwb[2]); +//DBGF((DBGA,"Ref white balance scale = %f %f %f\n",refwb[0],refwb[1],refwb[2])); + + satoRGB->convert(satoRGB, sawb, &il_none); +//DBGF((DBGA,"Samp white RGB = %f %f %f\n",sawb[0],sawb[1],sawb[2])); + sawb[0] = 1.0/(0.9 * sawb[0]); /* White balance scale factors */ + sawb[1] = 1.0/(0.9 * sawb[1]); + sawb[2] = 1.0/(0.9 * sawb[2]); +//DBGF((DBGA,"Samp white balance scale = %f %f %f\n",sawb[0],sawb[1],sawb[2])); + + /* Compute the display reference white (should be D65) */ + { + double dispw[3] = { 1.0, 1.0, 1.0 }; + + TLCI_camdisp(dispw, dispw, dispw); /* Display white XYZ */ + icmAry2XYZ(wtn, dispw); /* Reference Lab white */ +//DBGF((DBGA,"display white XYZ %f %f %f\n", dispw[0], dispw[1], dispw[2])); + } + + /* Compute the XYZ and DE for all 24 samples, */ + /* but sum TLCI for only the first 18 samples */ + tlci = 0.0; + for (i = 0; i < 24; i++) { + double de; + +//DBGF((DBGA,"\npatch %d\n",i+1)); + reftoRGB->convert(reftoRGB, ref[i], &TLCI_2012_TCS[i]); + TLCI_camdisp(ref[i], ref[i], refwb); +//DBGF((DBGA,"Ref[%d] XYZ = %f %f %f\n\n",i,ref[i][0],ref[i][1],ref[i][2])); + + satoRGB->convert(satoRGB, sam[i], &TLCI_2012_TCS[i]); + TLCI_camdisp(sam[i], sam[i], sawb); +//DBGF((DBGA,"Samp[%d] XYZ = %f %f %f\n\n",i,sam[i][0],sam[i][1],sam[i][2])); + +#ifdef DEBUG +// { +// double lab[3]; +// icmXYZ2Lab(&wtn, lab, ref[i]); +// fprintf(stderr,"~1 ref Lab %f %f %f\n", lab[0], lab[1], lab[2]); +// icmXYZ2Lab(&wtn, lab, sam[i]); +// fprintf(stderr,"~1 sam Lab %f %f %f\n", lab[0], lab[1], lab[2]); +// } +#endif /* DEBUG */ + + de = icmXYZCIE2K(&wtn, ref[i], sam[i]); +//DBGF((DBGA,"%d: DE2K = %f\n",i+1,de)); +//DBGF((DBGA,"%d: Q = %f\n",i+1,100.0/(1.0 + pow(de/3.16, 2.4)))); + + if (i < 18) + tlci += pow(de, 4.0); + } + tlci = pow(tlci/18.0, 1.0/4.0); /* Power average */ +//DBGF((DBGA,"Power average = %f\n",tlci)); + + tlci = 100.0/(1.0 + pow(tlci/3.16, 2.4)); + + reftoRGB->del(reftoRGB); + satoRGB->del(satoRGB); + +//DBGF((DBGA,"returning TLCI = %f\n",tlci)); + sample->norm = sampnorm; /* Restore this */ + return tlci; +} + /* - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* Compute Australian Radiation Protection and Nuclear Safety Agency (ARPANSA) */ /* Exposure to Ultraviolet Radiation exposure limits from a spectrum in mw/m-2/nm. */ -- cgit v1.2.3