Source code for schrodinger.application.matsci.colorutils

"""
Contains utilities for color manipulation and conversion

Copyright Schrodinger, LLC. All rights reserved.
"""

import math

from scipy import constants
from scipy import interpolate

from schrodinger.math import mathutils


[docs]def get_distance(point_1, point_2): """ Get the distance between points 1 and 2. Accepts points as arbitrary-length lists or tuples and calculates the distance between them. :param point_1: The first point :type point_1: list or tuple :param point_2: The second point :type point_2: list or tuple :rtype: float :return: The distance between the two points """ squares = [(point_1[i] - point_2[i])**2 for i in range(len(point_1))] dist = math.sqrt(sum(squares)) return dist
[docs]def luminance_level(color_tuple): """ Returns the luminance level of an RGB color tuple. Grabbed from the web, it is supposedly used to convert color TV to B&W. Luminance runs from 0 to X, where X is the upper limit of a color_tuple value (typically 255 or 65535). One place this algorithm is found is in the W3C accessibility working draft for color contrast in webpages. :param tuple color_tuple: The color's RGB as a tuple :rtype: float :return: The luminance of the color """ luminance = color_tuple[0] * 0.30 + color_tuple[1] * 0.59 + color_tuple[ 2] * 0.11 return luminance
[docs]def color_distance(color1_rgb, color2_rgb): """ Calculates the distance in u'v' space between two colors :param tuple color1_rgb: The RGB tuple of color 1 :param tuple color2_rgb: The RGB tuple of color 2 :rtype: float :return: The distance between the two colors in u'v' space """ def get_upvp(color_rgb): ciexyz = web_cie_to_rgb(color_rgb, xyz_to_rgb=False) cie_sum = ciexyz[0] + ciexyz[1] + ciexyz[2] try: ciex = ciexyz[0] / cie_sum ciey = ciexyz[1] / cie_sum except ZeroDivisionError: ciex = ciey = 0 cieup, cievp = ciexy_to_upvp(ciex, ciey) return (cieup, cievp) upvp1 = get_upvp(color1_rgb) upvp2 = get_upvp(color2_rgb) distance = get_distance(upvp1, upvp2) return distance
[docs]def ciexy_to_upvp(ciex, ciey): """ Converts CIE(x,y) to CIE(u'v'), returns CIEu' and CIEv'. Note that u'v' are from the CIELUV color space (1976). :param float ciex: CIE's x component :param float ciey: CIE's y component :rtype: float, float :return: CIEu' and CIEv' """ denom = -2 * ciex + 12 * ciey + 3 try: cieup = 4 * ciex / denom cievp = 9 * ciey / denom except ArithmeticError: cieup = cievp = 0 return cieup, cievp
[docs]def web_cie_to_rgb(color_tuple, whitepoint=(0.333, 0.333), xyz_to_rgb=True): """ Converts CIEx,y,z data to RGB values if xyz_to_rgb is True. If false, the other way around. :param tuple color_tuple: CIEx,y,z or RGB tuple for the color :param tuple whitepoint: CIEx,y for white :param bool xyz_to_rgb: Whether CIEx,y,z should be converted to RGB or the other way around :rtype: tuple :return: Converted CIEx,y,z or RGB tuple for the color """ # NTSC Primaries CIE_x_r = 0.670 CIE_y_r = 0.330 CIE_x_g = 0.210 CIE_y_g = 0.710 CIE_x_b = 0.140 CIE_y_b = 0.080 # White point CIE_x_w = whitepoint[0] CIE_y_w = whitepoint[1] CIE_D = (CIE_x_r * (CIE_y_g - CIE_y_b) + CIE_x_g * (CIE_y_b - CIE_y_r) + CIE_x_b * (CIE_y_r - CIE_y_g)) CIE_C_rD = ((1.0 / CIE_y_w) * (CIE_x_w * (CIE_y_g - CIE_y_b) - CIE_y_w * (CIE_x_g - CIE_x_b) + CIE_x_g * CIE_y_b - CIE_x_b * CIE_y_g)) CIE_C_gD = ((1. / CIE_y_w) * (CIE_x_w * (CIE_y_b - CIE_y_r) - CIE_y_w * (CIE_x_b - CIE_x_r) - CIE_x_r * CIE_y_b + CIE_x_b * CIE_y_r)) CIE_C_bD = ((1. / CIE_y_w) * (CIE_x_w * (CIE_y_r - CIE_y_g) - CIE_y_w * (CIE_x_r - CIE_x_g) + CIE_x_r * CIE_y_g - CIE_x_g * CIE_y_r)) xyz2rgbmat = \ [[(CIE_y_g - CIE_y_b - CIE_x_b*CIE_y_g + CIE_y_b*CIE_x_g)/CIE_C_rD, (CIE_x_b - CIE_x_g - CIE_x_b*CIE_y_g + CIE_x_g*CIE_y_b)/CIE_C_rD, (CIE_x_g*CIE_y_b - CIE_x_b*CIE_y_g)/CIE_C_rD], [(CIE_y_b - CIE_y_r - CIE_y_b*CIE_x_r + CIE_y_r*CIE_x_b)/CIE_C_gD, (CIE_x_r - CIE_x_b - CIE_x_r*CIE_y_b + CIE_x_b*CIE_y_r)/CIE_C_gD, (CIE_x_b*CIE_y_r - CIE_x_r*CIE_y_b)/CIE_C_gD], [(CIE_y_r - CIE_y_g - CIE_y_r*CIE_x_g + CIE_y_g*CIE_x_r)/CIE_C_bD, (CIE_x_g - CIE_x_r - CIE_x_g*CIE_y_r + CIE_x_r*CIE_y_g)/CIE_C_bD, (CIE_x_r*CIE_y_g - CIE_x_g*CIE_y_r)/CIE_C_bD]] rgb2xyzmat = \ [[CIE_x_r*CIE_C_rD/CIE_D, CIE_x_g*CIE_C_gD/CIE_D, CIE_x_b*CIE_C_bD/CIE_D], [CIE_y_r*CIE_C_rD/CIE_D, CIE_y_g*CIE_C_gD/CIE_D, CIE_y_b*CIE_C_bD/CIE_D], [(1.-CIE_x_r-CIE_y_r)*CIE_C_rD/CIE_D, (1.-CIE_x_g-CIE_y_g)*CIE_C_gD/CIE_D, (1.-CIE_x_b-CIE_y_b)*CIE_C_bD/CIE_D]] color = [] if xyz_to_rgb: for i in range(0, 3): color.append(xyz2rgbmat[i][0] * color_tuple[0] + xyz2rgbmat[i][1] * color_tuple[1] + xyz2rgbmat[i][2] * color_tuple[2]) if color[-1] < 0.0: color[-1] = 0.0 else: for i in range(0, 3): color.append(rgb2xyzmat[i][0] * color_tuple[0] + rgb2xyzmat[i][1] * color_tuple[1] + rgb2xyzmat[i][2] * color_tuple[2]) return color
[docs]def calculate_ciexy(x_vals, y_vals): """ Calculates the CIE coordinates of the passed x and y data. :param list x_vals: X values of the spectrum :param list y_vals: Y values of the spectrum :rtype: tuple :return: Tuple containing CIEx, CIEy, CIEX, CIEY and CIEZ """ cie_bigx = 0 cie_bigy = 0 cie_bigz = 0 for x_val, y_val in zip(x_vals, y_vals): cie_bigx += y_val * CIEXY_FUNCTIONS[x_val][0] cie_bigy += y_val * CIEXY_FUNCTIONS[x_val][1] cie_bigz += y_val * CIEXY_FUNCTIONS[x_val][2] cie_sum = cie_bigx + cie_bigy + cie_bigz if cie_sum != 0: cie_x = cie_bigx / cie_sum cie_y = cie_bigy / cie_sum else: cie_x = cie_y = 0 return (cie_x, cie_y, cie_bigx, cie_bigy, cie_bigz)
[docs]def calculate_nits(x_vals, y_vals): """ Calculates and returns Candelas/m2 assuming x_vals is in nm and y_vals is in W-Light/Sr/m2 :param list x_vals: X values of the spectrum :param list y_vals: Y values of the spectrum :rtype: float :return: The nits of the spectrum """ sum = 0 for xval, yval in zip(x_vals, y_vals): # 1 W/sr = 683 candela at 555 nm, and multiplying by the photoptic # response curve accounts for the other wavelengths. sum += 683.002 * yval * PHOTOPIC_RESPONSE_CURVE[xval] return sum
[docs]def color_temperature(cie_x, cie_y): """ Calculates the correlated color temperature (CCT) from CIEx and CIEy values :param float cie_x: The CIEx value of the spectrum :param float cie_y: The CIEy value of the spectrum :rtype: float, bool :return: CCT and a boolean that tells whether CCT falls within the required tolerance (0.05 in CIE1960 uv space) for valid CCT """ # CCT(x,y) = A0 + A1exp( - n / t1) + A2exp( - n / t2) + A3exp( - n / t3) # n = (x - xe) / (y - ye) # from http://en.wikipedia.org/wiki/Color_temperature which gets it from # https://www.usna.edu/Users/oceano/raylee/papers/RLee_AO_CCTpaper.pdf def calc_cct(cct_range=1): if cie_x == 0 and cie_y == 0: return 0.0 try: n_val = (cie_x - x_e) / (cie_y - y_e) if cct_range == 1: cct = (A_0 + A_1 * math.exp(-n_val / t_1) + A_2 * math.exp(-n_val / t_2) + A_3 * math.exp(-n_val / t_3)) elif cct_range == 2: cct = (A_0 + A_1 * math.exp(-n_val / t_1) + A_2 * math.exp(-n_val / t_2)) elif cct_range == 0: cct = A_0 + A_1 * math.exp(-n_val / t_1) except ArithmeticError: cct = 0.0 return cct valid = False x_e = 0.3366 y_e = 0.1735 A_0 = -949.86315 A_1 = 6253.80338 t_1 = 0.92159 A_2 = 28.70599 t_2 = 0.20039 A_3 = 0.00004 t_3 = 0.07125 cct = calc_cct() if cct > 50000: x_e = 0.3356 y_e = 0.1691 A_0 = 36284.48953 A_1 = 0.00228 t_1 = 0.07861 A_2 = 5.4535e-36 t_2 = 0.01543 cct = calc_cct(cct_range=2) elif cct < 3000: # The extrapolation above is only valid for cct > 3000. # this part was added to extend the range to 1000-3000 x_e = 0.27656005 y_e = -0.238113052 A_0 = 285.811472 A_1 = 6227.771238 t_1 = 0.296185537 cct = calc_cct(cct_range=0) if cct: valid = distance_from_planckian(cie_x, cie_y, cct=cct) <= 0.05 return max(cct, 0), valid
[docs]def distance_from_planckian(cie_x, cie_y, cct=None): """ Determines the distance of the point (cie_x, cie_y) from the Planckian locus in CIE 1960 uv space. If the correlated color temperature of cie_x, cie_y is known, it can be supplied as cct, otherwise it is calculated. :param float cie_x: The CIEx value of the spectrum :param float cie_y: The CIEy value of the spectrum :type cct: float or None :param cct: Correlated color temperature of the spectrum :rtype: float :return: Distance from the Planckian locus """ if cct is None: cct, valid = color_temperature(cie_x, cie_y) if cct: cie_uv = ciexy_to_cie1960uv(cie_x, cie_y) plank_x, plank_y = planckian_locus(cct) plank_uv = ciexy_to_cie1960uv(plank_x, plank_y) dist = get_distance(cie_uv, plank_uv) else: dist = 1. return dist
[docs]def ciexy_to_cie1960uv(cie_x, cie_y): """ Converts cie(x,y) to cie(uv). :param float cie_x: The CIEx value of the spectrum :param float cie_y: The CIEy value of the spectrum :rtype: float, float :return: CIEu, CIEv of the spectrum. Note that u'v' are from the 1960 USC color space. """ denom = -2 * cie_x + 12 * cie_y + 3 try: cie_u = 4 * cie_x / denom cie_v = 6 * cie_y / denom except ArithmeticError: cie_u = cie_v = 0 return cie_u, cie_v
[docs]def planckian_locus(temperature=None, delta=50): """" If temperature is given, returns the CIEx and CIEy values of the Planckian locus at that temperature. If temperature is not given, returns a list of (color, (CIEx, CIEy)) tuples of the Planckian locus from 1000K to 25000K at every `delta` CCT degrees. :type temperature: float or None :param temperature: The temperature to get CIEx and CIEy values at :param int delta: The temperature step between each (CIEx, CIEy) tuple if temperature is not provided :rtype: tuple or list :return: CIEx and CIEy at the given temperature, or a list of (color, (CIEx, CIEy)) tuples """ # The original calculations are only valid from 1667K to 25000K, and come # from http://en.wikipedia.org/wiki/Planckian_locus and originally from J of # the Korean Physical Society 41 (6): 865-871. # The data from 1000 to 11000K have been refit, allowing for a much higher # accuracy in this temperature range. Data above 11000K use the fit from the # original paper. def planckian_point(temp): if temp >= 1000 and temp <= 25000: n_val = temp / 1000. n_2 = n_val**2 n_3 = n_2 * n_val if temp <= 3950: cie_x = 0.01701 * n_2 - 0.1736 * n_val + 0.8062 cie_y = 0.009607 * n_3 - 0.09589 * n_2 + 0.2896 * n_val + 0.1446 elif temp > 3950 and temp <= 11000: cie_x = (-0.0003308 * n_3 + 0.009664 * n_2 - 0.1001 * n_val + 0.6485) cie_y = (-0.0001414 * n_3 + 0.004805 * n_2 - 0.06058 * n_val + 0.5566) else: try: cie_x = (-3.0258469 / n_3 + 2.1070379 / n_2 + 0.2226347 / n_val + 0.24039) cie_y = (3.081758 * (cie_x**3) - 5.8733867 * (cie_x**2) + 3.75112997 * cie_x - 0.37001483) except ZeroDivisionError: cie_x = cie_y = 0 else: cie_x = cie_y = 0 return cie_x, cie_y # temperature might be 0, and then we want just the point at 0 if temperature is not None: return planckian_point(temperature) else: step = max(int(delta), 1) plank_list = [] for atemp in range(1000, 25000, step): plank_list.append((atemp, planckian_point(atemp))) return plank_list
[docs]def get_gamut_area(cie_pairs, xy_space=True): """ Calculates the area of the triangle formed by the provided CIEx,y pairs. :param tuple cie_pairs: Tuple of three (CIEx, CIEy) pairs :param bool xy_space: Whether the CIE is given and the gamut is returned in the x,y space, or the u'v' space :rtype: float :return: The area of triangle formed by the cie pairs """ # Area of triangle given a,b,c = sqrt([s(s-a)(s-b)(s-c)]) when s = (a+b+c)/2 a_val = get_distance(cie_pairs[0], cie_pairs[1]) b_val = get_distance(cie_pairs[1], cie_pairs[2]) c_val = get_distance(cie_pairs[2], cie_pairs[0]) s_val = (a_val + b_val + c_val) / 2 area = (s_val * (s_val - a_val) * (s_val - b_val) * (s_val - c_val))**0.5 if xy_space: gamut = 100 * area / 0.1582 else: gamut = 100 * area / 0.07407 return gamut
[docs]def calculate_cri(intensities, cct=None): """ Calculates the CIE Color Rendering Index of the spectrum. Calculates cct if it is not supplied. :param list intensities: Spectrum intensities from 400-700 nm in arbitrary units. :type cct: float or None :param cct: Correlated color temperature :rtype: int, bool :return: CRI and a boolean that tells whether CRI falls within the required tolerance """ # This procedure comes from CIE Technical Report CIE 13.3-1995. # Throughout this procedure, the following variable prefixes mean: # test = the input light spectrum to be tested # ref = the reference light spectrum: # Planckian (black body) radiator for test CCT < 5000 and # daylight (illuminant D) for CCT >= 5000 to 25000K # shifted = the reflection of a Munsell test patch under the test light # spectrum # refpatch = the reflection of a Munsell test patch under the reference # light spectrum def calc_c_and_d(cie_u, cie_v): # This is formula 5.4 try: c_val = (4.0 - cie_u - 10 * cie_v) / cie_v d_val = (1.708 * cie_v + 0.404 - 1.481 * cie_u) / cie_v except ZeroDivisionError: c_val = 0.0 d_val = 0.0 return c_val, d_val def calc_upki_vpki(ref_c, ref_d, test_c, test_d, shifted_c, shifted_d): # This is equation 5-3 c_constant = shifted_c * ref_c / test_c d_constant = shifted_d * ref_d / test_d denominator = (16.518 + 1.481 * c_constant - d_constant) try: upki = (10.872 + 0.404 * c_constant - 4.0 * d_constant) / denominator vpki = 5.520 / denominator except ArithmeticError: upki = vpki = 0 return upki, vpki def calc_wuv_star(y_norm, patch_cie_u, patch_cie_v, light_cie_u, light_cie_v): # Equation 5.5 w_star = 25.0 * (y_norm**(1.0 / 3.0)) - 17 u_star = 13.0 * w_star * (patch_cie_u - light_cie_u) v_star = 13.0 * w_star * (patch_cie_v - light_cie_v) return w_star, u_star, v_star def calc_cie_data(spec): # Calculates the necessary CIE data (and data derived from CIE data) for # a spectrum "spec" running from 400-700nm cie_x, cie_y, big_x, big_y, big_z = calculate_ciexy(xdata, spec) cie_u, cie_v = ciexy_to_cie1960uv(cie_x, cie_y) c_val, d_val = calc_c_and_d(cie_u, cie_v) try: y_norm = 100.0 / big_y except ZeroDivisionError: y_norm = 0.0 return cie_u, cie_v, c_val, d_val, big_y, y_norm, cie_x, cie_y if len(intensities) != 301: # print 'CRI calculation requires a spectrum from 400-700 nm' return 0.0, False valid = False cri = 0.0 xdata = [x for x in range(400, 701)] # Calculate some required data for the input (test) spectrum test_cie_u, test_cie_v, test_c, test_d, _, test_y_norm, test_cie_x, \ test_cie_y = calc_cie_data(intensities) if not cct: cct, cct_valid = color_temperature(test_cie_x, test_cie_y) if test_c != 0 and cct > 0.0 and cct <= 25000: if cct < 5000.: reference_radiator = planckian_radiator(cct) else: reference_radiator = daylight_radiator(cct) # Calculate some required data for the reference (black body or daylight) # spectrum ref_cie_u, ref_cie_v, ref_c, ref_d, _, ref_y_norm, _, _ = \ calc_cie_data(reference_radiator) # General CRI uses the first 8 Munsell color patches patches = [TCS01, TCS02, TCS03, TCS04, TCS05, TCS06, TCS07, TCS08] special_cri = [] for patch in patches: # We are interested in the reflection of the patch under the test # spectrum = test.dot.patch) shifted_patch = [ test_intensity * patch_dat for test_intensity, patch_dat in zip(intensities, patch) ] shifted_cie_u, shifted_cie_v, shifted_c, shifted_d, shifted_big_y, \ _, _, _ = calc_cie_data(shifted_patch) # CIE Y of the patch reflection is normalized by the CIE Y of the # light spectrum shifted_big_y_norm = shifted_big_y * test_y_norm # The line below accounts for the "adaptive colour shift" due to the # test spectrum using a von Kries chromatic transform. Regurgitated # from CIE 13.3 and Wikipedia upki, vpki = calc_upki_vpki(ref_c, ref_d, test_c, test_d, shifted_c, shifted_d) # Now we are interested in the reflection of the patch under the # reference spectrum = ref.dot.patch) refpatch_patch = [ test_intensity * patch_dat for test_intensity, patch_dat in zip(reference_radiator, patch) ] refpatch_cie_u, refpatch_cie_v, refpatch_c, refpatch_d, \ refpatch_big_y, _, _, _ = calc_cie_data(refpatch_patch) # CIE Y of the patch reflection is normalized by the CIE Y of the # light spectrum refpatch_big_y_norm = refpatch_big_y * ref_y_norm # Now calculate W*, U* and V* for the patch reflected under the test # and reference spectra ref_wstar, ref_ustar, ref_vstar = \ calc_wuv_star(refpatch_big_y_norm, refpatch_cie_u, refpatch_cie_v, ref_cie_u, ref_cie_v) # For the test spectrum, we use upki and vpki and the reference CIEu # and CIEv test_wstar, test_ustar, test_vstar = \ calc_wuv_star(shifted_big_y_norm, upki, vpki, ref_cie_u, ref_cie_v) # The total color shift is just this distance between the ref and # test W*, U* and V* data (Equation 5-5) delta = get_distance((ref_wstar, ref_ustar, ref_vstar), (test_wstar, test_ustar, test_vstar)) # Special CRI is defined in Equation 6-1 special_cri.append(100.0 - 4.6 * delta) cri = sum(special_cri) / 8.0 # Test for validity of CRI calculation, the tolerance specified by CIE # is 0.0054 distance between the test and reference CIEuv valid = get_distance((ref_cie_u, ref_cie_v), (test_cie_u, test_cie_v)) <= 0.0054 elif cct > 25000.0: pass #print 'CRI for CCT>25000 not implemented' return cri, valid
[docs]def planckian_radiator(temp, low=400, high=700, step=1): """ Returns the normalized spectrum of a Planckian (black body) radiator at the given color temperature. The spectrum is a list of intensities returned starting at low nm and ending at high nm every step nm. The intensities are normalized. intensity = 2*pi*h*(c^2) / (L^5 * (exp(hc/Lkt) - 1)) Where L is the wavelength in meters :param float temp: The color temperature for the Planckian radiator :param int low: The lower nm cutoff of the returned values :param int high: The higher nm cutoff of the returned values :param int step: The step between returned values :rtype: list :return: The normalized spectrum of a Planckian radiator """ radiator = [] planck = constants.h light_speed = constants.c boltzman = constants.k leading_constant = 2 * math.pi * planck * (light_speed**2) exp_constant = (planck * light_speed) / (boltzman * temp) for nm_val in range(low, high + 1, step): meters = float(nm_val) * 1.0e-9 try: radiator.append(leading_constant / ((meters**5) * (math.exp(exp_constant / meters) - 1))) except ArithmeticError: radiator.append(0.0) max_val = max(radiator) try: radiator = [x / max_val for x in radiator] except ArithmeticError: radiator = [] return radiator
[docs]def daylight_radiator(temp, low=400, high=700, step=1): """ Returns the normalized spectrum of a illuminant D (daylight) radiator at the given color temperature. The spectrum is a list of intensities returned starting at low nm and ending at high nm every step nm. The intensities are normalized. :param float temp: The color temperature for the radiator :param int low: The lower nm cutoff of the returned values :param int high: The higher nm cutoff of the returned values :param int step: The step in nm between returned values :rtype: list :return: The normalized spectrum of a illuminant D radiator """ # The calculation is taken from http://en.wikipedia.org/wiki/Standard_illuminant # and also from the spreadsheet found at: # http://www.rit-mcsl.org/UsefulData/DaylightSeries.xlsx # Both sources give the same calculation. This is valid from CCT of 4000-25000 # # The spectrum intensity of spectrum S at a given nm is given by: # S[nm] = s0[nm] + s1[nm]*m1 + s2[nm]*m2 radiator = [] cie_x, cie_y = daylight_locus(temp) denom = 0.0241 + 0.2562 * cie_x - 0.7341 * cie_y m_1 = (-1.3515 - 1.7703 * cie_x + 5.9114 * cie_y) / denom m_2 = (0.0300 - 31.4424 * cie_x + 30.0717 * cie_y) / denom for nm_val in range(low, high + 1, step): radiator.append(ILLUM_D_S0[nm_val] + ILLUM_D_S1[nm_val] * m_1 + ILLUM_D_S2[nm_val] * m_2) # Now to normalize it max_val = max(radiator) try: radiator = [x / max_val for x in radiator] except ArithmeticError: radiator = [] return radiator
[docs]def daylight_locus(temperature=None, delta=50): """ If temperature is given, returns the CIEx and CIEy values of the daylight locus at that temperature. If temperature is not given, returns a list of (color, (CIEx, CIEy)) tuples of the daylight locus from 4000K to 25000K at every `delta` CCT degrees :type temperature: float or None :param temperature: The temperature to get CIEx and CIEy values at :param int delta: The temperature step between each (CIEx, CIEy) tuple if temperature is not provided """ # The calculation is taken from http://en.wikipedia.org/wiki/Standard_illuminant # and also from the spreadsheet found at: # http://www.rit-mcsl.org/UsefulData/DaylightSeries.xlsx # Both sources give the same calculation. This is valid from CCT of 4000-25000 # The calculation is only valid from 4000K to 25000K def daylight_point(temp): if temp >= 4000 and temp <= 25000: temp = float(temp) n_val = temp / 1000. n_2 = n_val**2 n_3 = n_2 * n_val try: if temp < 7000: cie_x = (-4.6070 / n_3 + 2.9678 / n_2 + 0.09911 / n_val + 0.244063) else: cie_x = (-2.0064 / n_3 + 1.9018 / n_2 + 0.24748 / n_val + 0.23704) cie_y = -3.000 * (cie_x**2) + 2.870 * cie_x - 0.275 except ZeroDivisionError: cie_x = cie_y = 0 else: cie_x = cie_y = 0 return cie_x, cie_y # temperature might be 0, and then we want just the point at 0 if temperature != None: return daylight_point(temperature) else: step = max(int(delta), 1) daylist = [] for atemp in range(4000, 25000, step): daylist.append((atemp, daylight_point(atemp))) return daylist
[docs]def get_complete_spectrum(x_vals, y_vals, data_min, data_max): """ Fills in the missing values of a spectrum using a cubic interpolation, so that it has data for every nm. Makes sure all y values are > 0, all x values are between data_min and data_max, and no x value is repeated. :param list x_vals: X values of the spectrum :param list y_vals: Y values of the spectrum :param int data_min: The low cut-off for x values :param int data_max: The high cut-off for x values :rtype: list, list :return: The completed x and y values for the spectrum """ # Note - in testing cubic interpolation gave (essentially) identical results # to the previous method of solving exactly the parabola formed by the # nearest 3 points. deduped_x, deduped_y = mathutils.deduplicate_xy_data(x_vals, y_vals) fill_function = interpolate.interp1d(deduped_x, deduped_y, kind='cubic', fill_value=0.0, bounds_error=False) new_spectrum_x = list(range(data_min, data_max + 1)) new_spectrum_y = [max(0, fill_function(x)) for x in new_spectrum_x] return (new_spectrum_x, new_spectrum_y)
# CIE 1924 from http://cvision.ucsd.edu/database/data/lum/vl1924e_1.txt PHOTOPIC_RESPONSE_CURVE = { 360: 3.92E-06, 361: 4.39E-06, 362: 4.93E-06, 363: 5.53E-06, 364: 6.21E-06, 365: 6.97E-06, 366: 7.81E-06, 367: 8.77E-06, 368: 9.84E-06, 369: 1.10E-05, 370: 1.24E-05, 371: 1.39E-05, 372: 1.56E-05, 373: 1.74E-05, 374: 1.96E-05, 375: 2.20E-05, 376: 2.48E-05, 377: 2.80E-05, 378: 3.15E-05, 379: 3.52E-05, 380: 3.90E-05, 381: 4.28E-05, 382: 4.69E-05, 383: 5.16E-05, 384: 5.72E-05, 385: 6.40E-05, 386: 7.23E-05, 387: 8.22E-05, 388: 9.35E-05, 389: 1.06E-04, 390: 1.20E-04, 391: 1.35E-04, 392: 1.51E-04, 393: 1.70E-04, 394: 1.92E-04, 395: 2.17E-04, 396: 2.47E-04, 397: 2.81E-04, 398: 3.19E-04, 399: 3.57E-04, 400: 3.96E-04, 401: 4.34E-04, 402: 4.73E-04, 403: 5.18E-04, 404: 5.72E-04, 405: 6.40E-04, 406: 7.25E-04, 407: 8.26E-04, 408: 9.41E-04, 409: 1.07E-03, 410: 1.21E-03, 411: 1.36E-03, 412: 1.53E-03, 413: 1.72E-03, 414: 1.94E-03, 415: 2.18E-03, 416: 2.45E-03, 417: 2.76E-03, 418: 3.12E-03, 419: 3.53E-03, 420: 4.00E-03, 421: 4.55E-03, 422: 5.16E-03, 423: 5.83E-03, 424: 6.55E-03, 425: 7.30E-03, 426: 8.09E-03, 427: 8.91E-03, 428: 9.77E-03, 429: 1.07E-02, 430: 1.16E-02, 431: 1.26E-02, 432: 1.36E-02, 433: 1.46E-02, 434: 1.57E-02, 435: 1.68E-02, 436: 1.80E-02, 437: 1.92E-02, 438: 2.05E-02, 439: 2.17E-02, 440: 2.30E-02, 441: 2.43E-02, 442: 2.56E-02, 443: 2.70E-02, 444: 2.84E-02, 445: 2.98E-02, 446: 3.13E-02, 447: 3.29E-02, 448: 3.45E-02, 449: 3.62E-02, 450: 3.80E-02, 451: 3.98E-02, 452: 4.18E-02, 453: 4.38E-02, 454: 4.58E-02, 455: 4.80E-02, 456: 5.02E-02, 457: 5.26E-02, 458: 5.50E-02, 459: 5.75E-02, 460: 6.00E-02, 461: 6.26E-02, 462: 6.53E-02, 463: 6.80E-02, 464: 7.09E-02, 465: 7.39E-02, 466: 7.70E-02, 467: 8.03E-02, 468: 8.37E-02, 469: 8.72E-02, 470: 9.10E-02, 471: 9.49E-02, 472: 9.90E-02, 473: 1.03E-01, 474: 1.08E-01, 475: 1.13E-01, 476: 1.18E-01, 477: 1.23E-01, 478: 1.28E-01, 479: 1.33E-01, 480: 1.39E-01, 481: 1.45E-01, 482: 1.50E-01, 483: 1.56E-01, 484: 1.63E-01, 485: 1.69E-01, 486: 1.76E-01, 487: 1.84E-01, 488: 1.91E-01, 489: 1.99E-01, 490: 2.08E-01, 491: 2.17E-01, 492: 2.27E-01, 493: 2.37E-01, 494: 2.47E-01, 495: 2.59E-01, 496: 2.70E-01, 497: 2.82E-01, 498: 2.95E-01, 499: 3.09E-01, 500: 3.23E-01, 501: 3.38E-01, 502: 3.55E-01, 503: 3.72E-01, 504: 3.89E-01, 505: 4.07E-01, 506: 4.26E-01, 507: 4.44E-01, 508: 4.63E-01, 509: 4.83E-01, 510: 5.03E-01, 511: 5.24E-01, 512: 5.45E-01, 513: 5.66E-01, 514: 5.87E-01, 515: 6.08E-01, 516: 6.29E-01, 517: 6.50E-01, 518: 6.71E-01, 519: 6.91E-01, 520: 7.10E-01, 521: 7.28E-01, 522: 7.45E-01, 523: 7.62E-01, 524: 7.78E-01, 525: 7.93E-01, 526: 8.08E-01, 527: 8.22E-01, 528: 8.36E-01, 529: 8.49E-01, 530: 8.62E-01, 531: 8.74E-01, 532: 8.85E-01, 533: 8.95E-01, 534: 9.05E-01, 535: 9.15E-01, 536: 9.24E-01, 537: 9.32E-01, 538: 9.40E-01, 539: 9.47E-01, 540: 9.54E-01, 541: 9.60E-01, 542: 9.66E-01, 543: 9.71E-01, 544: 9.76E-01, 545: 9.80E-01, 546: 9.84E-01, 547: 9.87E-01, 548: 9.90E-01, 549: 9.93E-01, 550: 9.95E-01, 551: 9.97E-01, 552: 9.98E-01, 553: 9.99E-01, 554: 1.00E+00, 555: 1.00E+00, 556: 1.00E+00, 557: 9.99E-01, 558: 9.98E-01, 559: 9.97E-01, 560: 9.95E-01, 561: 9.93E-01, 562: 9.90E-01, 563: 9.86E-01, 564: 9.83E-01, 565: 9.79E-01, 566: 9.74E-01, 567: 9.69E-01, 568: 9.64E-01, 569: 9.58E-01, 570: 9.52E-01, 571: 9.45E-01, 572: 9.38E-01, 573: 9.31E-01, 574: 9.23E-01, 575: 9.15E-01, 576: 9.07E-01, 577: 8.98E-01, 578: 8.89E-01, 579: 8.80E-01, 580: 8.70E-01, 581: 8.60E-01, 582: 8.49E-01, 583: 8.39E-01, 584: 8.28E-01, 585: 8.16E-01, 586: 8.05E-01, 587: 7.93E-01, 588: 7.81E-01, 589: 7.69E-01, 590: 7.57E-01, 591: 7.45E-01, 592: 7.32E-01, 593: 7.20E-01, 594: 7.07E-01, 595: 6.95E-01, 596: 6.82E-01, 597: 6.69E-01, 598: 6.57E-01, 599: 6.44E-01, 600: 6.31E-01, 601: 6.18E-01, 602: 6.05E-01, 603: 5.92E-01, 604: 5.80E-01, 605: 5.67E-01, 606: 5.54E-01, 607: 5.41E-01, 608: 5.28E-01, 609: 5.16E-01, 610: 5.03E-01, 611: 4.90E-01, 612: 4.78E-01, 613: 4.66E-01, 614: 4.53E-01, 615: 4.41E-01, 616: 4.29E-01, 617: 4.17E-01, 618: 4.05E-01, 619: 3.93E-01, 620: 3.81E-01, 621: 3.69E-01, 622: 3.57E-01, 623: 3.45E-01, 624: 3.33E-01, 625: 3.21E-01, 626: 3.09E-01, 627: 2.98E-01, 628: 2.87E-01, 629: 2.76E-01, 630: 2.65E-01, 631: 2.55E-01, 632: 2.45E-01, 633: 2.35E-01, 634: 2.26E-01, 635: 2.17E-01, 636: 2.08E-01, 637: 2.00E-01, 638: 1.91E-01, 639: 1.83E-01, 640: 1.75E-01, 641: 1.67E-01, 642: 1.60E-01, 643: 1.52E-01, 644: 1.45E-01, 645: 1.38E-01, 646: 1.32E-01, 647: 1.25E-01, 648: 1.19E-01, 649: 1.13E-01, 650: 1.07E-01, 651: 1.01E-01, 652: 9.62E-02, 653: 9.11E-02, 654: 8.63E-02, 655: 8.16E-02, 656: 7.71E-02, 657: 7.28E-02, 658: 6.87E-02, 659: 6.48E-02, 660: 6.10E-02, 661: 5.74E-02, 662: 5.40E-02, 663: 5.07E-02, 664: 4.75E-02, 665: 4.46E-02, 666: 4.18E-02, 667: 3.91E-02, 668: 3.66E-02, 669: 3.42E-02, 670: 3.20E-02, 671: 3.00E-02, 672: 2.81E-02, 673: 2.63E-02, 674: 2.47E-02, 675: 2.32E-02, 676: 2.18E-02, 677: 2.05E-02, 678: 1.93E-02, 679: 1.81E-02, 680: 1.70E-02, 681: 1.59E-02, 682: 1.48E-02, 683: 1.38E-02, 684: 1.28E-02, 685: 1.19E-02, 686: 1.11E-02, 687: 1.03E-02, 688: 9.53E-03, 689: 8.85E-03, 690: 8.21E-03, 691: 7.62E-03, 692: 7.09E-03, 693: 6.59E-03, 694: 6.14E-03, 695: 5.72E-03, 696: 5.34E-03, 697: 5.00E-03, 698: 4.68E-03, 699: 4.38E-03, 700: 4.10E-03, 701: 3.84E-03, 702: 3.59E-03, 703: 3.35E-03, 704: 3.13E-03, 705: 2.93E-03, 706: 2.74E-03, 707: 2.56E-03, 708: 2.39E-03, 709: 2.24E-03, 710: 2.09E-03, 711: 1.95E-03, 712: 1.82E-03, 713: 1.70E-03, 714: 1.59E-03, 715: 1.48E-03, 716: 1.38E-03, 717: 1.29E-03, 718: 1.20E-03, 719: 1.12E-03, 720: 1.05E-03, 721: 9.77E-04, 722: 9.11E-04, 723: 8.50E-04, 724: 7.93E-04, 725: 7.40E-04, 726: 6.90E-04, 727: 6.43E-04, 728: 5.99E-04, 729: 5.58E-04, 730: 5.20E-04, 731: 4.84E-04, 732: 4.50E-04, 733: 4.18E-04, 734: 3.89E-04, 735: 3.61E-04, 736: 3.35E-04, 737: 3.11E-04, 738: 2.89E-04, 739: 2.68E-04, 740: 2.49E-04, 741: 2.31E-04, 742: 2.15E-04, 743: 1.99E-04, 744: 1.85E-04, 745: 1.72E-04, 746: 1.60E-04, 747: 1.49E-04, 748: 1.38E-04, 749: 1.29E-04, 750: 1.20E-04, 751: 1.12E-04, 752: 1.04E-04, 753: 9.73E-05, 754: 9.08E-05, 755: 8.48E-05, 756: 7.91E-05, 757: 7.39E-05, 758: 6.89E-05, 759: 6.43E-05, 760: 6.00E-05, 761: 5.60E-05, 762: 5.22E-05, 763: 4.87E-05, 764: 4.54E-05, 765: 4.24E-05, 766: 3.96E-05, 767: 3.69E-05, 768: 3.44E-05, 769: 3.21E-05, 770: 3.00E-05, 771: 2.80E-05, 772: 2.61E-05, 773: 2.44E-05, 774: 2.27E-05, 775: 2.12E-05, 776: 1.98E-05, 777: 1.85E-05, 778: 1.72E-05, 779: 1.61E-05, 780: 1.50E-05, 781: 1.40E-05, 782: 1.31E-05, 783: 1.22E-05, 784: 1.14E-05, 785: 1.06E-05, 786: 9.89E-06, 787: 9.22E-06, 788: 8.59E-06, 789: 8.01E-06, 790: 7.47E-06, 791: 6.96E-06, 792: 6.49E-06, 793: 6.05E-06, 794: 5.64E-06, 795: 5.26E-06, 796: 4.90E-06, 797: 4.57E-06, 798: 4.26E-06, 799: 3.97E-06, 800: 3.70E-06, 801: 3.45216E-06, 802: 3.2183E-06, 803: 3.0003E-06, 804: 2.79714E-06, 805: 2.6078E-06, 806: 2.43122E-06, 807: 2.26653E-06, 808: 2.11301E-06, 809: 1.96994E-06, 810: 1.8366E-06, 811: 1.71223E-06, 812: 1.59623E-06, 813: 1.48809E-06, 814: 1.38731E-06, 815: 1.2934E-06, 816: 1.20582E-06, 817: 1.12414E-06, 818: 1.04801E-06, 819: 9.77058E-07, 820: 9.1093E-07, 821: 8.49251E-07, 822: 7.91721E-07, 823: 7.3809E-07, 824: 6.8811E-07, 825: 6.4153E-07, 826: 5.9809E-07, 827: 5.57575E-07, 828: 5.19808E-07, 829: 4.84612E-07, 830: 4.5181E-07 } # The CIE color matching functions # From http://cvrl.ioo.ucl.ac.uk/database/data/cmfs/ciexyz31_1.txt # Each tuple is an R, G, B value for that wavelength CIEXY_FUNCTIONS = { 360: (0.0001299, 0.000003917, 0.0006061), 361: (0.000145847, 4.39358E-06, 0.000680879), 362: (0.000163802, 4.9296E-06, 0.000765146), 363: (0.000184004, 5.53214E-06, 0.000860012), 364: (0.00020669, 6.20825E-06, 0.000966593), 365: (0.0002321, 0.000006965, 0.001086), 366: (0.000260728, 7.81322E-06, 0.001220586), 367: (0.000293075, 8.76734E-06, 0.001372729), 368: (0.000329388, 9.83984E-06, 0.001543579), 369: (0.000369914, 1.10432E-05, 0.001734286), 370: (0.0004149, 0.00001239, 0.001946), 371: (0.000464159, 1.38864E-05, 0.002177777), 372: (0.000518986, 1.55573E-05, 0.002435809), 373: (0.000581854, 1.7443E-05, 0.002731953), 374: (0.000655235, 1.95838E-05, 0.003078064), 375: (0.0007416, 0.00002202, 0.003486), 376: (0.00084503, 2.48397E-05, 0.003975227), 377: (0.000964527, 2.80413E-05, 0.00454088), 378: (0.001094949, 3.1531E-05, 0.00515832), 379: (0.001231154, 3.52152E-05, 0.005802907), 380: (0.001368, 0.000039, 0.006450001), 381: (0.00150205, 4.28264E-05, 0.007083216), 382: (0.001642328, 4.69146E-05, 0.007745488), 383: (0.001802382, 5.15896E-05, 0.008501152), 384: (0.001995757, 5.71764E-05, 0.009414544), 385: (0.002236, 0.000064, 0.01054999), 386: (0.002535385, 7.23442E-05, 0.0119658), 387: (0.002892603, 8.22122E-05, 0.01365587), 388: (0.003300829, 9.35082E-05, 0.01558805), 389: (0.003753236, 0.000106136, 0.01773015), 390: (0.004243, 0.00012, 0.02005001), 391: (0.004762389, 0.000134984, 0.02251136), 392: (0.005330048, 0.000151492, 0.02520288), 393: (0.005978712, 0.000170208, 0.02827972), 394: (0.006741117, 0.000191816, 0.03189704), 395: (0.00765, 0.000217, 0.03621), 396: (0.008751373, 0.000246907, 0.04143771), 397: (0.01002888, 0.00028124, 0.04750372), 398: (0.0114217, 0.00031852, 0.05411988), 399: (0.01286901, 0.000357267, 0.06099803), 400: (0.01431, 0.000396, 0.06785001), 401: (0.01570443, 0.000433715, 0.07448632), 402: (0.01714744, 0.000473024, 0.08136156), 403: (0.01878122, 0.000517876, 0.08915364), 404: (0.02074801, 0.000572219, 0.09854048), 405: (0.02319, 0.00064, 0.1102), 406: (0.02620736, 0.00072456, 0.1246133), 407: (0.02978248, 0.0008255, 0.1417017), 408: (0.03388092, 0.00094116, 0.1613035), 409: (0.03846824, 0.00106988, 0.1832568), 410: (0.04351, 0.00121, 0.2074), 411: (0.0489956, 0.001362091, 0.2336921), 412: (0.0550226, 0.001530752, 0.2626114), 413: (0.0617188, 0.001720368, 0.2947746), 414: (0.069212, 0.001935323, 0.3307985), 415: (0.07763, 0.00218, 0.3713), 416: (0.08695811, 0.0024548, 0.4162091), 417: (0.09717672, 0.002764, 0.4654642), 418: (0.1084063, 0.0031178, 0.5196948), 419: (0.1207672, 0.0035264, 0.5795303), 420: (0.13438, 0.004, 0.6456), 421: (0.1493582, 0.00454624, 0.7184838), 422: (0.1653957, 0.00515932, 0.7967133), 423: (0.1819831, 0.00582928, 0.8778459), 424: (0.198611, 0.00654616, 0.959439), 425: (0.21477, 0.0073, 1.0390501), 426: (0.2301868, 0.008086507, 1.1153673), 427: (0.2448797, 0.00890872, 1.1884971), 428: (0.2587773, 0.00976768, 1.2581233), 429: (0.2718079, 0.01066443, 1.3239296), 430: (0.2839, 0.0116, 1.3856), 431: (0.2949438, 0.01257317, 1.4426352), 432: (0.3048965, 0.01358272, 1.4948035), 433: (0.3137873, 0.01462968, 1.5421903), 434: (0.3216454, 0.01571509, 1.5848807), 435: (0.3285, 0.01684, 1.62296), 436: (0.3343513, 0.01800736, 1.6564048), 437: (0.3392101, 0.01921448, 1.6852959), 438: (0.3431213, 0.02045392, 1.7098745), 439: (0.3461296, 0.02171824, 1.7303821), 440: (0.34828, 0.023, 1.74706), 441: (0.3495999, 0.02429461, 1.7600446), 442: (0.3501474, 0.02561024, 1.7696233), 443: (0.350013, 0.02695857, 1.7762637), 444: (0.349287, 0.02835125, 1.7804334), 445: (0.34806, 0.0298, 1.7826), 446: (0.3463733, 0.03131083, 1.7829682), 447: (0.3442624, 0.03288368, 1.7816998), 448: (0.3418088, 0.03452112, 1.7791982), 449: (0.3390941, 0.03622571, 1.7758671), 450: (0.3362, 0.038, 1.77211), 451: (0.3331977, 0.03984667, 1.7682589), 452: (0.3300411, 0.041768, 1.764039), 453: (0.3266357, 0.043766, 1.7589438), 454: (0.3228868, 0.04584267, 1.7524663), 455: (0.3187, 0.048, 1.7441), 456: (0.3140251, 0.05024368, 1.7335595), 457: (0.308884, 0.05257304, 1.7208581), 458: (0.3032904, 0.05498056, 1.7059369), 459: (0.2972579, 0.05745872, 1.6887372), 460: (0.2908, 0.06, 1.6692), 461: (0.2839701, 0.06260197, 1.6475287), 462: (0.2767214, 0.06527752, 1.6234127), 463: (0.2689178, 0.06804208, 1.5960223), 464: (0.2604227, 0.07091109, 1.564528), 465: (0.2511, 0.0739, 1.5281), 466: (0.2408475, 0.077016, 1.4861114), 467: (0.2298512, 0.0802664, 1.4395215), 468: (0.2184072, 0.0836668, 1.3898799), 469: (0.2068115, 0.0872328, 1.3387362), 470: (0.19536, 0.09098, 1.28764), 471: (0.1842136, 0.09491755, 1.2374223), 472: (0.1733273, 0.09904584, 1.1878243), 473: (0.1626881, 0.1033674, 1.1387611), 474: (0.1522833, 0.1078846, 1.090148), 475: (0.1421, 0.1126, 1.0419), 476: (0.1321786, 0.117532, 0.9941976), 477: (0.1225696, 0.1226744, 0.9473473), 478: (0.1132752, 0.1279928, 0.9014531), 479: (0.1042979, 0.1334528, 0.8566193), 480: (0.09564, 0.13902, 0.8129501), 481: (0.08729955, 0.1446764, 0.7705173), 482: (0.07930804, 0.1504693, 0.7294448), 483: (0.07171776, 0.1564619, 0.6899136), 484: (0.06458099, 0.1627177, 0.6521049), 485: (0.05795001, 0.1693, 0.6162), 486: (0.05186211, 0.1762431, 0.5823286), 487: (0.04628152, 0.1835581, 0.5504162), 488: (0.04115088, 0.1912735, 0.5203376), 489: (0.03641283, 0.199418, 0.4919673), 490: (0.03201, 0.20802, 0.46518), 491: (0.0279172, 0.2171199, 0.4399246), 492: (0.0241444, 0.2267345, 0.4161836), 493: (0.020687, 0.2368571, 0.3938822), 494: (0.0175404, 0.2474812, 0.3729459), 495: (0.0147, 0.2586, 0.3533), 496: (0.01216179, 0.2701849, 0.3348578), 497: (0.00991996, 0.2822939, 0.3175521), 498: (0.00796724, 0.2950505, 0.3013375), 499: (0.006296346, 0.308578, 0.2861686), 500: (0.0049, 0.323, 0.272), 501: (0.003777173, 0.3384021, 0.2588171), 502: (0.00294532, 0.3546858, 0.2464838), 503: (0.00242488, 0.3716986, 0.2347718), 504: (0.002236293, 0.3892875, 0.2234533), 505: (0.0024, 0.4073, 0.2123), 506: (0.00292552, 0.4256299, 0.2011692), 507: (0.00383656, 0.4443096, 0.1901196), 508: (0.00517484, 0.4633944, 0.1792254), 509: (0.00698208, 0.4829395, 0.1685608), 510: (0.0093, 0.503, 0.1582), 511: (0.01214949, 0.5235693, 0.1481383), 512: (0.01553588, 0.544512, 0.1383758), 513: (0.01947752, 0.56569, 0.1289942), 514: (0.02399277, 0.5869653, 0.1200751), 515: (0.0291, 0.6082, 0.1117), 516: (0.03481485, 0.6293456, 0.1039048), 517: (0.04112016, 0.6503068, 0.09666748), 518: (0.04798504, 0.6708752, 0.08998272), 519: (0.05537861, 0.6908424, 0.08384531), 520: (0.06327, 0.71, 0.07824999), 521: (0.07163501, 0.7281852, 0.07320899), 522: (0.08046224, 0.7454636, 0.06867816), 523: (0.08973996, 0.7619694, 0.06456784), 524: (0.09945645, 0.7778368, 0.06078835), 525: (0.1096, 0.7932, 0.05725001), 526: (0.1201674, 0.8081104, 0.05390435), 527: (0.1311145, 0.8224962, 0.05074664), 528: (0.1423679, 0.8363068, 0.04775276), 529: (0.1538542, 0.8494916, 0.04489859), 530: (0.1655, 0.862, 0.04216), 531: (0.1772571, 0.8738108, 0.03950728), 532: (0.18914, 0.8849624, 0.03693564), 533: (0.2011694, 0.8954936, 0.03445836), 534: (0.2133658, 0.9054432, 0.03208872), 535: (0.2257499, 0.9148501, 0.02984), 536: (0.2383209, 0.9237348, 0.02771181), 537: (0.2510668, 0.9320924, 0.02569444), 538: (0.2639922, 0.9399226, 0.02378716), 539: (0.2771017, 0.9472252, 0.02198925), 540: (0.2904, 0.954, 0.0203), 541: (0.3038912, 0.9602561, 0.01871805), 542: (0.3175726, 0.9660074, 0.01724036), 543: (0.3314384, 0.9712606, 0.01586364), 544: (0.3454828, 0.9760225, 0.01458461), 545: (0.3597, 0.9803, 0.0134), 546: (0.3740839, 0.9840924, 0.01230723), 547: (0.3886396, 0.9874182, 0.01130188), 548: (0.4033784, 0.9903128, 0.01037792), 549: (0.4183115, 0.9928116, 0.009529306), 550: (0.4334499, 0.9949501, 0.008749999), 551: (0.4487953, 0.9967108, 0.0080352), 552: (0.464336, 0.9980983, 0.0073816), 553: (0.480064, 0.999112, 0.0067854), 554: (0.4959713, 0.9997482, 0.0062428), 555: (0.5120501, 1, 0.005749999), 556: (0.5282959, 0.9998567, 0.0053036), 557: (0.5446916, 0.9993046, 0.0048998), 558: (0.5612094, 0.9983255, 0.0045342), 559: (0.5778215, 0.9968987, 0.0042024), 560: (0.5945, 0.995, 0.0039), 561: (0.6112209, 0.9926005, 0.0036232), 562: (0.6279758, 0.9897426, 0.0033706), 563: (0.6447602, 0.9864444, 0.0031414), 564: (0.6615697, 0.9827241, 0.0029348), 565: (0.6784, 0.9786, 0.002749999), 566: (0.6952392, 0.9740837, 0.0025852), 567: (0.7120586, 0.9691712, 0.0024386), 568: (0.7288284, 0.9638568, 0.0023094), 569: (0.7455188, 0.9581349, 0.0021968), 570: (0.7621, 0.952, 0.0021), 571: (0.7785432, 0.9454504, 0.002017733), 572: (0.7948256, 0.9384992, 0.0019482), 573: (0.8109264, 0.9311628, 0.0018898), 574: (0.8268248, 0.9234576, 0.001840933), 575: (0.8425, 0.9154, 0.0018), 576: (0.8579325, 0.9070064, 0.001766267), 577: (0.8730816, 0.8982772, 0.0017378), 578: (0.8878944, 0.8892048, 0.0017112), 579: (0.9023181, 0.8797816, 0.001683067), 580: (0.9163, 0.87, 0.001650001), 581: (0.9297995, 0.8598613, 0.001610133), 582: (0.9427984, 0.849392, 0.0015644), 583: (0.9552776, 0.838622, 0.0015136), 584: (0.9672179, 0.8275813, 0.001458533), 585: (0.9786, 0.8163, 0.0014), 586: (0.9893856, 0.8047947, 0.001336667), 587: (0.9995488, 0.793082, 0.00127), 588: (1.0090892, 0.781192, 0.001205), 589: (1.0180064, 0.7691547, 0.001146667), 590: (1.0263, 0.757, 0.0011), 591: (1.0339827, 0.7447541, 0.0010688), 592: (1.040986, 0.7324224, 0.0010494), 593: (1.047188, 0.7200036, 0.0010356), 594: (1.0524667, 0.7074965, 0.0010212), 595: (1.0567, 0.6949, 0.001), 596: (1.0597944, 0.6822192, 0.00096864), 597: (1.0617992, 0.6694716, 0.00092992), 598: (1.0628068, 0.6566744, 0.00088688), 599: (1.0629096, 0.6438448, 0.00084256), 600: (1.0622, 0.631, 0.0008), 601: (1.0607352, 0.6181555, 0.00076096), 602: (1.0584436, 0.6053144, 0.00072368), 603: (1.0552244, 0.5924756, 0.00068592), 604: (1.0509768, 0.5796379, 0.00064544), 605: (1.0456, 0.5668, 0.0006), 606: (1.0390369, 0.5539611, 0.000547867), 607: (1.0313608, 0.5411372, 0.0004916), 608: (1.0226662, 0.5283528, 0.0004354), 609: (1.0130477, 0.5156323, 0.000383467), 610: (1.0026, 0.503, 0.00034), 611: (0.9913675, 0.4904688, 0.000307253), 612: (0.9793314, 0.4780304, 0.00028316), 613: (0.9664916, 0.4656776, 0.00026544), 614: (0.9528479, 0.4534032, 0.000251813), 615: (0.9384, 0.4412, 0.00024), 616: (0.923194, 0.42908, 0.000229547), 617: (0.907244, 0.417036, 0.00022064), 618: (0.890502, 0.405032, 0.00021196), 619: (0.87292, 0.393032, 0.000202187), 620: (0.8544499, 0.381, 0.00019), 621: (0.835084, 0.3689184, 0.000174213), 622: (0.814946, 0.3568272, 0.00015564), 623: (0.794186, 0.3447768, 0.00013596), 624: (0.772954, 0.3328176, 0.000116853), 625: (0.7514, 0.321, 0.0001), 626: (0.7295836, 0.3093381, 8.61333E-05), 627: (0.7075888, 0.2978504, 0.0000746), 628: (0.6856022, 0.2865936, 0.000065), 629: (0.6638104, 0.2756245, 5.69333E-05), 630: (0.6424, 0.265, 5E-05), 631: (0.6215149, 0.2547632, 0.00004416), 632: (0.6011138, 0.2448896, 0.00003948), 633: (0.5811052, 0.2353344, 0.00003572), 634: (0.5613977, 0.2260528, 0.00003264), 635: (0.5419, 0.217, 0.00003), 636: (0.5225995, 0.2081616, 2.76533E-05), 637: (0.5035464, 0.1995488, 0.00002556), 638: (0.4847436, 0.1911552, 0.00002364), 639: (0.4661939, 0.1829744, 2.18133E-05), 640: (0.4479, 0.175, 0.00002), 641: (0.4298613, 0.1672235, 1.81333E-05), 642: (0.412098, 0.1596464, 0.0000162), 643: (0.394644, 0.1522776, 0.0000142), 644: (0.3775333, 0.1451259, 1.21333E-05), 645: (0.3608, 0.1382, 0.00001), 646: (0.3444563, 0.1315003, 7.73333E-06), 647: (0.3285168, 0.1250248, 0.0000054), 648: (0.3130192, 0.1187792, 0.0000032), 649: (0.2980011, 0.1127691, 1.33333E-06), 650: (0.2835, 0.107, 0), 651: (0.2695448, 0.1014762, 0), 652: (0.2561184, 0.09618864, 0), 653: (0.2431896, 0.09112296, 0), 654: (0.2307272, 0.08626485, 0), 655: (0.2187, 0.0816, 0), 656: (0.2070971, 0.07712064, 0), 657: (0.1959232, 0.07282552, 0), 658: (0.1851708, 0.06871008, 0), 659: (0.1748323, 0.06476976, 0), 660: (0.1649, 0.061, 0), 661: (0.1553667, 0.05739621, 0), 662: (0.14623, 0.05395504, 0), 663: (0.13749, 0.05067376, 0), 664: (0.1291467, 0.04754965, 0), 665: (0.1212, 0.04458, 0), 666: (0.1136397, 0.04175872, 0), 667: (0.106465, 0.03908496, 0), 668: (0.09969044, 0.03656384, 0), 669: (0.09333061, 0.03420048, 0), 670: (0.0874, 0.032, 0), 671: (0.08190096, 0.02996261, 0), 672: (0.07680428, 0.02807664, 0), 673: (0.07207712, 0.02632936, 0), 674: (0.06768664, 0.02470805, 0), 675: (0.0636, 0.0232, 0), 676: (0.05980685, 0.02180077, 0), 677: (0.05628216, 0.02050112, 0), 678: (0.05297104, 0.01928108, 0), 679: (0.04981861, 0.01812069, 0), 680: (0.04677, 0.017, 0), 681: (0.04378405, 0.01590379, 0), 682: (0.04087536, 0.01483718, 0), 683: (0.03807264, 0.01381068, 0), 684: (0.03540461, 0.01283478, 0), 685: (0.0329, 0.01192, 0), 686: (0.03056419, 0.01106831, 0), 687: (0.02838056, 0.01027339, 0), 688: (0.02634484, 0.009533311, 0), 689: (0.02445275, 0.008846157, 0), 690: (0.0227, 0.00821, 0), 691: (0.02108429, 0.007623781, 0), 692: (0.01959988, 0.007085424, 0), 693: (0.01823732, 0.006591476, 0), 694: (0.01698717, 0.006138485, 0), 695: (0.01584, 0.005723, 0), 696: (0.01479064, 0.005343059, 0), 697: (0.01383132, 0.004995796, 0), 698: (0.01294868, 0.004676404, 0), 699: (0.0121292, 0.004380075, 0), 700: (0.01135916, 0.004102, 0), 701: (0.01062935, 0.003838453, 0), 702: (0.009938846, 0.003589099, 0), 703: (0.009288422, 0.003354219, 0), 704: (0.008678854, 0.003134093, 0), 705: (0.008110916, 0.002929, 0), 706: (0.007582388, 0.002738139, 0), 707: (0.007088746, 0.002559876, 0), 708: (0.006627313, 0.002393244, 0), 709: (0.006195408, 0.002237275, 0), 710: (0.005790346, 0.002091, 0), 711: (0.005409826, 0.001953587, 0), 712: (0.005052583, 0.00182458, 0), 713: (0.004717512, 0.00170358, 0), 714: (0.004403507, 0.001590187, 0), 715: (0.004109457, 0.001484, 0), 716: (0.003833913, 0.001384496, 0), 717: (0.003575748, 0.001291268, 0), 718: (0.003334342, 0.001204092, 0), 719: (0.003109075, 0.001122744, 0), 720: (0.002899327, 0.001047, 0), 721: (0.002704348, 0.00097659, 0), 722: (0.00252302, 0.000911109, 0), 723: (0.002354168, 0.000850133, 0), 724: (0.002196616, 0.000793238, 0), 725: (0.00204919, 0.00074, 0), 726: (0.00191096, 0.000690083, 0), 727: (0.001781438, 0.00064331, 0), 728: (0.00166011, 0.000599496, 0), 729: (0.001546459, 0.000558455, 0), 730: (0.001439971, 0.00052, 0), 731: (0.001340042, 0.000483914, 0), 732: (0.001246275, 0.000450053, 0), 733: (0.001158471, 0.000418345, 0), 734: (0.00107643, 0.000388718, 0), 735: (0.000999949, 0.0003611, 0), 736: (0.000928736, 0.000335384, 0), 737: (0.000862433, 0.00031144, 0), 738: (0.00080075, 0.000289166, 0), 739: (0.000743396, 0.000268454, 0), 740: (0.000690079, 0.0002492, 0), 741: (0.000640516, 0.000231302, 0), 742: (0.000594502, 0.000214686, 0), 743: (0.000551865, 0.000199288, 0), 744: (0.000512429, 0.000185048, 0), 745: (0.000476021, 0.0001719, 0), 746: (0.000442454, 0.000159778, 0), 747: (0.000411512, 0.000148604, 0), 748: (0.000382981, 0.000138302, 0), 749: (0.000356649, 0.000128793, 0), 750: (0.000332301, 0.00012, 0), 751: (0.000309759, 0.00011186, 0), 752: (0.000288887, 0.000104322, 0), 753: (0.000269539, 9.73356E-05, 0), 754: (0.000251568, 9.08459E-05, 0), 755: (0.000234826, 0.0000848, 0), 756: (0.000219171, 7.91467E-05, 0), 757: (0.000204526, 0.000073858, 0), 758: (0.000190841, 0.000068916, 0), 759: (0.000178065, 6.43027E-05, 0), 760: (0.000166151, 0.00006, 0), 761: (0.000155024, 5.59819E-05, 0), 762: (0.000144622, 5.22256E-05, 0), 763: (0.00013491, 4.87184E-05, 0), 764: (0.000125852, 4.54475E-05, 0), 765: (0.000117413, 0.0000424, 0), 766: (0.000109552, 3.9561E-05, 0), 767: (0.000102225, 3.69151E-05, 0), 768: (9.53945E-05, 3.44487E-05, 0), 769: (8.90239E-05, 3.21482E-05, 0), 770: (8.30753E-05, 0.00003, 0), 771: (7.75127E-05, 2.79913E-05, 0), 772: (7.2313E-05, 2.61136E-05, 0), 773: (6.74578E-05, 2.43602E-05, 0), 774: (6.29284E-05, 2.27246E-05, 0), 775: (5.87065E-05, 0.0000212, 0), 776: (5.47703E-05, 1.97786E-05, 0), 777: (5.10992E-05, 1.84529E-05, 0), 778: (4.76765E-05, 1.72169E-05, 0), 779: (4.44857E-05, 1.60646E-05, 0), 780: (4.15099E-05, 0.00001499, 0), 781: (3.87332E-05, 1.39873E-05, 0), 782: (3.6142E-05, 1.30516E-05, 0), 783: (3.37235E-05, 1.21782E-05, 0), 784: (3.14649E-05, 1.13625E-05, 0), 785: (2.93533E-05, 0.0000106, 0), 786: (2.73757E-05, 9.88588E-06, 0), 787: (2.55243E-05, 9.2173E-06, 0), 788: (2.37938E-05, 8.59236E-06, 0), 789: (2.21787E-05, 8.00913E-06, 0), 790: (2.06738E-05, 7.4657E-06, 0), 791: (1.92723E-05, 6.95957E-06, 0), 792: (1.79664E-05, 6.488E-06, 0), 793: (1.67499E-05, 6.0487E-06, 0), 794: (1.56165E-05, 5.6394E-06, 0), 795: (1.45598E-05, 5.2578E-06, 0), 796: (1.35739E-05, 4.90177E-06, 0), 797: (1.26544E-05, 4.56972E-06, 0), 798: (1.17972E-05, 4.26019E-06, 0), 799: (1.09984E-05, 3.97174E-06, 0), 800: (1.0254E-05, 3.7029E-06, 0), 801: (9.55965E-06, 3.45216E-06, 0), 802: (8.91204E-06, 3.2183E-06, 0), 803: (8.30836E-06, 3.0003E-06, 0), 804: (7.74577E-06, 2.79714E-06, 0), 805: (7.22146E-06, 2.6078E-06, 0), 806: (6.73248E-06, 2.43122E-06, 0), 807: (6.27642E-06, 2.26653E-06, 0), 808: (5.8513E-06, 2.11301E-06, 0), 809: (5.45512E-06, 1.96994E-06, 0), 810: (5.08587E-06, 1.8366E-06, 0), 811: (4.74147E-06, 1.71223E-06, 0), 812: (4.42024E-06, 1.59623E-06, 0), 813: (4.12078E-06, 1.48809E-06, 0), 814: (3.84172E-06, 1.38731E-06, 0), 815: (3.58165E-06, 1.2934E-06, 0), 816: (3.33913E-06, 1.20582E-06, 0), 817: (3.11295E-06, 1.12414E-06, 0), 818: (2.90212E-06, 1.04801E-06, 0), 819: (2.70565E-06, 9.77058E-07, 0), 820: (2.52253E-06, 9.1093E-07, 0), 821: (2.35173E-06, 8.49251E-07, 0), 822: (2.19242E-06, 7.91721E-07, 0), 823: (2.0439E-06, 7.3809E-07, 0), 824: (1.9055E-06, 6.8811E-07, 0), 825: (1.77651E-06, 6.4153E-07, 0), 826: (1.65622E-06, 5.9809E-07, 0), 827: (1.54402E-06, 5.57575E-07, 0), 828: (1.43944E-06, 5.19808E-07, 0), 829: (1.34198E-06, 4.84612E-07, 0), 830: (1.25114E-06, 4.5181E-07, 0) } CIEXY_FUNCTIONS_MIN_NM = min(CIEXY_FUNCTIONS.keys()) CIEXY_FUNCTIONS_MAX_NM = max(CIEXY_FUNCTIONS.keys()) # DOE quadrangles in CIEx,y taken from American National Standard Lighting Group # found at http://ledart.ru/files/img/C78.377-2008.pdf DOE_QUADRANGLES = [ ((0.4813, 0.4319), (0.4562, 0.426), (0.4373, 0.3893), (0.4593, 0.3944)), ((0.4562, 0.426 ), (0.4299, 0.4165), (0.4147, 0.3814), (0.4373, 0.3893)), ((0.4299, 0.4165), (0.3996, 0.4015), (0.3889, 0.369), (0.4147, 0.3814)), ((0.4006, 0.4044), (0.3736, 0.3874), (0.367, 0.3578), (0.3898, 0.3716)), ((0.3736, 0.3874), (0.3548, 0.3736), (0.3512, 0.3465), (0.367, 0.3578)), ((0.3551, 0.376), (0.3376, 0.3616), (0.3366, 0.3369), (0.3515, 0.3487)), ((0.3376, 0.3616), (0.3207, 0.3462), (0.3222, 0.3243), (0.3366, 0.3369)), ((0.3205, 0.3481), (0.3028, 0.3304), (0.3068, 0.3113), (0.3221, 0.3261)) ] # yapf: disable # The labels for each DOE quadrangle and the CIEx,y coordinate of the label QUADRANGLE_LABELS = { '6500K': (0.285, 0.355), '5700K': (0.303, 0.37), '5000K': (0.320, 0.384), '4500K': (0.343, 0.399), '4000K': (0.367, 0.415), '3500K': (0.395, 0.427), '3000K': (0.423, 0.437), '2700K': (0.455, 0.445) } # Munsell patches for CRI calculation # These have been linearly interpolated from data every 5nm to data every 1 nm # and run from 400 to 700 nm by every 1 nm TCS01 = [ 0.256, 0.256, 0.255, 0.255, 0.254, 0.254, 0.254, 0.253, 0.253, 0.252, 0.252, 0.251, 0.250, 0.250, 0.249, 0.248, 0.247, 0.246, 0.246, 0.245, 0.244, 0.243, 0.242, 0.242, 0.241, 0.240, 0.239, 0.239, 0.238, 0.238, 0.237, 0.236, 0.235, 0.234, 0.233, 0.232, 0.232, 0.231, 0.231, 0.230, 0.230, 0.229, 0.228, 0.228, 0.227, 0.226, 0.226, 0.226, 0.225, 0.225, 0.225, 0.224, 0.224, 0.223, 0.223, 0.222, 0.222, 0.221, 0.221, 0.220, 0.220, 0.220, 0.219, 0.219, 0.218, 0.218, 0.218, 0.217, 0.217, 0.216, 0.216, 0.216, 0.215, 0.215, 0.214, 0.214, 0.214, 0.214, 0.214, 0.214, 0.214, 0.214, 0.214, 0.214, 0.214, 0.214, 0.214, 0.215, 0.215, 0.216, 0.216, 0.216, 0.217, 0.217, 0.218, 0.218, 0.219, 0.220, 0.221, 0.222, 0.223, 0.223, 0.224, 0.224, 0.225, 0.225, 0.225, 0.225, 0.226, 0.226, 0.226, 0.226, 0.226, 0.226, 0.226, 0.226, 0.226, 0.226, 0.225, 0.225, 0.225, 0.225, 0.225, 0.225, 0.225, 0.225, 0.225, 0.226, 0.226, 0.227, 0.227, 0.228, 0.228, 0.229, 0.229, 0.230, 0.231, 0.232, 0.234, 0.235, 0.236, 0.238, 0.240, 0.241, 0.243, 0.245, 0.247, 0.248, 0.250, 0.251, 0.253, 0.255, 0.257, 0.258, 0.260, 0.262, 0.264, 0.266, 0.268, 0.270, 0.272, 0.274, 0.276, 0.279, 0.281, 0.283, 0.286, 0.289, 0.292, 0.295, 0.298, 0.302, 0.306, 0.310, 0.314, 0.318, 0.323, 0.327, 0.332, 0.336, 0.341, 0.346, 0.351, 0.357, 0.362, 0.367, 0.372, 0.376, 0.381, 0.385, 0.390, 0.394, 0.398, 0.401, 0.405, 0.409, 0.412, 0.415, 0.418, 0.421, 0.424, 0.426, 0.428, 0.431, 0.433, 0.435, 0.436, 0.438, 0.439, 0.441, 0.442, 0.443, 0.444, 0.446, 0.447, 0.448, 0.448, 0.449, 0.449, 0.450, 0.450, 0.450, 0.450, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.450, 0.450, 0.450, 0.450, 0.450, 0.450, 0.450, 0.450, 0.450, 0.450, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.452, 0.452, 0.453, 0.453, 0.453, 0.453, 0.454, 0.454, 0.454, 0.454, 0.454, 0.455, 0.455, 0.455, 0.455, 0.456, 0.456, 0.457, 0.457, 0.457, 0.457, 0.458, 0.458, 0.458, 0.458, 0.459, 0.459, 0.460, 0.460, 0.460, 0.461, 0.461, 0.462, 0.462 ] TCS02 = [ 0.111, 0.112, 0.113, 0.114, 0.115, 0.116, 0.116, 0.117, 0.117, 0.118, 0.118, 0.118, 0.119, 0.119, 0.120, 0.120, 0.120, 0.120, 0.121, 0.121, 0.121, 0.121, 0.121, 0.122, 0.122, 0.122, 0.122, 0.122, 0.122, 0.122, 0.122, 0.122, 0.122, 0.122, 0.122, 0.122, 0.122, 0.122, 0.123, 0.123, 0.123, 0.123, 0.123, 0.124, 0.124, 0.124, 0.125, 0.125, 0.126, 0.126, 0.127, 0.127, 0.127, 0.128, 0.128, 0.128, 0.129, 0.129, 0.130, 0.130, 0.131, 0.132, 0.132, 0.133, 0.133, 0.134, 0.135, 0.136, 0.136, 0.137, 0.138, 0.139, 0.140, 0.141, 0.142, 0.143, 0.144, 0.146, 0.147, 0.149, 0.150, 0.152, 0.154, 0.155, 0.157, 0.159, 0.162, 0.165, 0.168, 0.171, 0.174, 0.177, 0.180, 0.184, 0.187, 0.190, 0.193, 0.197, 0.200, 0.204, 0.207, 0.211, 0.214, 0.218, 0.221, 0.225, 0.228, 0.232, 0.235, 0.239, 0.242, 0.244, 0.246, 0.249, 0.251, 0.253, 0.254, 0.256, 0.257, 0.259, 0.260, 0.261, 0.262, 0.262, 0.263, 0.264, 0.265, 0.265, 0.266, 0.266, 0.267, 0.267, 0.268, 0.268, 0.269, 0.269, 0.270, 0.270, 0.271, 0.271, 0.272, 0.273, 0.274, 0.274, 0.275, 0.276, 0.277, 0.278, 0.280, 0.281, 0.282, 0.283, 0.285, 0.286, 0.288, 0.289, 0.291, 0.293, 0.295, 0.297, 0.299, 0.301, 0.303, 0.305, 0.307, 0.309, 0.312, 0.314, 0.317, 0.319, 0.322, 0.323, 0.325, 0.326, 0.328, 0.329, 0.330, 0.331, 0.333, 0.334, 0.335, 0.336, 0.337, 0.337, 0.338, 0.339, 0.339, 0.340, 0.340, 0.341, 0.341, 0.341, 0.341, 0.341, 0.341, 0.341, 0.341, 0.341, 0.342, 0.342, 0.342, 0.342, 0.342, 0.342, 0.342, 0.342, 0.342, 0.342, 0.342, 0.342, 0.342, 0.342, 0.342, 0.341, 0.341, 0.341, 0.341, 0.341, 0.341, 0.341, 0.341, 0.341, 0.340, 0.340, 0.339, 0.339, 0.339, 0.339, 0.339, 0.339, 0.339, 0.339, 0.339, 0.338, 0.338, 0.338, 0.338, 0.338, 0.338, 0.338, 0.338, 0.338, 0.338, 0.337, 0.337, 0.337, 0.337, 0.337, 0.336, 0.336, 0.336, 0.336, 0.336, 0.335, 0.335, 0.335, 0.335, 0.335, 0.334, 0.334, 0.334, 0.334, 0.333, 0.333, 0.332, 0.332, 0.332, 0.332, 0.332, 0.332, 0.332, 0.332, 0.332, 0.331, 0.331, 0.331, 0.331, 0.331, 0.331, 0.331, 0.331, 0.331, 0.331, 0.330, 0.330, 0.330, 0.330, 0.330, 0.329, 0.329, 0.329, 0.329, 0.329, 0.328, 0.328, 0.328, 0.328, 0.328, 0.328, 0.328, 0.328 ] TCS03 = [ 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.074, 0.074, 0.074, 0.074, 0.074, 0.074, 0.074, 0.074, 0.074, 0.074, 0.074, 0.074, 0.074, 0.074, 0.074, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.074, 0.074, 0.074, 0.074, 0.074, 0.075, 0.075, 0.075, 0.075, 0.076, 0.076, 0.077, 0.077, 0.078, 0.078, 0.079, 0.079, 0.080, 0.081, 0.082, 0.083, 0.084, 0.085, 0.087, 0.089, 0.090, 0.092, 0.094, 0.097, 0.100, 0.103, 0.106, 0.109, 0.112, 0.116, 0.119, 0.123, 0.126, 0.130, 0.135, 0.139, 0.144, 0.148, 0.153, 0.158, 0.162, 0.167, 0.172, 0.177, 0.182, 0.188, 0.193, 0.198, 0.203, 0.207, 0.212, 0.216, 0.221, 0.225, 0.229, 0.233, 0.237, 0.241, 0.245, 0.249, 0.252, 0.256, 0.260, 0.264, 0.267, 0.271, 0.274, 0.278, 0.283, 0.288, 0.292, 0.297, 0.302, 0.309, 0.317, 0.324, 0.332, 0.339, 0.345, 0.351, 0.358, 0.364, 0.370, 0.374, 0.379, 0.383, 0.388, 0.392, 0.393, 0.395, 0.396, 0.398, 0.399, 0.399, 0.399, 0.400, 0.400, 0.400, 0.399, 0.397, 0.396, 0.394, 0.393, 0.390, 0.388, 0.385, 0.383, 0.380, 0.377, 0.374, 0.371, 0.368, 0.365, 0.362, 0.359, 0.355, 0.352, 0.349, 0.346, 0.342, 0.339, 0.335, 0.332, 0.329, 0.325, 0.322, 0.318, 0.315, 0.312, 0.309, 0.305, 0.302, 0.299, 0.296, 0.293, 0.291, 0.288, 0.285, 0.282, 0.280, 0.277, 0.275, 0.272, 0.270, 0.269, 0.267, 0.266, 0.264, 0.263, 0.261, 0.260, 0.258, 0.257, 0.256, 0.255, 0.254, 0.253, 0.252, 0.251, 0.250, 0.249, 0.248, 0.247, 0.246, 0.245, 0.243, 0.242, 0.241, 0.240, 0.239, 0.237, 0.236, 0.235, 0.234, 0.233, 0.231, 0.230, 0.229, 0.228, 0.227, 0.226, 0.225, 0.224, 0.223, 0.222, 0.222, 0.221, 0.220, 0.219, 0.219, 0.218, 0.218, 0.217, 0.217, 0.217, 0.216, 0.216, 0.216, 0.216, 0.216, 0.216, 0.216, 0.216, 0.217, 0.217, 0.218, 0.218, 0.219, 0.220, 0.221, 0.222, 0.223, 0.224, 0.225, 0.226, 0.228, 0.229, 0.230, 0.232, 0.233, 0.235, 0.236, 0.238, 0.241, 0.243, 0.246, 0.248, 0.251, 0.255, 0.258, 0.262, 0.265, 0.269, 0.273, 0.277, 0.280, 0.284, 0.288, 0.293, 0.298, 0.302, 0.307, 0.312, 0.318, 0.323, 0.329, 0.334, 0.340 ] TCS04 = [ 0.116, 0.117, 0.118, 0.119, 0.120, 0.121, 0.122, 0.122, 0.123, 0.123, 0.124, 0.124, 0.125, 0.125, 0.126, 0.126, 0.126, 0.127, 0.127, 0.128, 0.128, 0.129, 0.129, 0.130, 0.130, 0.131, 0.132, 0.133, 0.133, 0.134, 0.135, 0.136, 0.137, 0.137, 0.138, 0.139, 0.140, 0.141, 0.142, 0.143, 0.144, 0.145, 0.147, 0.148, 0.150, 0.151, 0.153, 0.155, 0.157, 0.159, 0.161, 0.163, 0.165, 0.168, 0.170, 0.172, 0.175, 0.178, 0.180, 0.183, 0.186, 0.190, 0.194, 0.197, 0.201, 0.205, 0.210, 0.215, 0.219, 0.224, 0.229, 0.234, 0.239, 0.244, 0.249, 0.254, 0.259, 0.265, 0.270, 0.276, 0.281, 0.286, 0.292, 0.297, 0.303, 0.308, 0.313, 0.318, 0.322, 0.327, 0.332, 0.336, 0.340, 0.344, 0.348, 0.352, 0.356, 0.359, 0.363, 0.366, 0.370, 0.373, 0.375, 0.378, 0.380, 0.383, 0.384, 0.386, 0.387, 0.389, 0.390, 0.391, 0.392, 0.392, 0.393, 0.394, 0.394, 0.394, 0.395, 0.395, 0.395, 0.394, 0.394, 0.393, 0.393, 0.392, 0.391, 0.389, 0.388, 0.386, 0.385, 0.383, 0.382, 0.380, 0.379, 0.377, 0.375, 0.373, 0.371, 0.369, 0.367, 0.364, 0.362, 0.359, 0.357, 0.354, 0.351, 0.349, 0.346, 0.344, 0.341, 0.338, 0.335, 0.333, 0.330, 0.327, 0.324, 0.321, 0.318, 0.315, 0.312, 0.309, 0.306, 0.302, 0.299, 0.296, 0.293, 0.290, 0.286, 0.283, 0.280, 0.277, 0.273, 0.270, 0.266, 0.263, 0.260, 0.257, 0.253, 0.250, 0.247, 0.243, 0.240, 0.236, 0.233, 0.229, 0.226, 0.223, 0.220, 0.217, 0.214, 0.211, 0.208, 0.204, 0.201, 0.198, 0.195, 0.193, 0.190, 0.188, 0.185, 0.183, 0.181, 0.179, 0.177, 0.175, 0.174, 0.173, 0.171, 0.170, 0.169, 0.168, 0.167, 0.166, 0.165, 0.164, 0.163, 0.162, 0.162, 0.161, 0.160, 0.159, 0.158, 0.158, 0.157, 0.156, 0.156, 0.155, 0.155, 0.154, 0.154, 0.154, 0.153, 0.153, 0.152, 0.152, 0.152, 0.152, 0.151, 0.151, 0.151, 0.151, 0.150, 0.150, 0.149, 0.149, 0.149, 0.149, 0.148, 0.148, 0.148, 0.148, 0.148, 0.148, 0.148, 0.148, 0.148, 0.148, 0.148, 0.148, 0.148, 0.148, 0.148, 0.149, 0.149, 0.149, 0.149, 0.150, 0.150, 0.151, 0.151, 0.152, 0.152, 0.153, 0.153, 0.154, 0.155, 0.156, 0.156, 0.157, 0.158, 0.159, 0.160, 0.160, 0.161, 0.162, 0.163, 0.163, 0.164, 0.164, 0.165, 0.166, 0.166, 0.167, 0.167, 0.168, 0.168, 0.169, 0.169, 0.170, 0.170 ] TCS05 = [ 0.313, 0.313, 0.314, 0.314, 0.315, 0.315, 0.316, 0.317, 0.317, 0.318, 0.319, 0.320, 0.320, 0.321, 0.321, 0.322, 0.323, 0.324, 0.324, 0.325, 0.326, 0.327, 0.328, 0.328, 0.329, 0.330, 0.331, 0.332, 0.332, 0.333, 0.334, 0.335, 0.336, 0.337, 0.338, 0.339, 0.340, 0.342, 0.343, 0.345, 0.346, 0.347, 0.348, 0.350, 0.351, 0.352, 0.354, 0.355, 0.357, 0.358, 0.360, 0.362, 0.364, 0.365, 0.367, 0.369, 0.371, 0.374, 0.376, 0.379, 0.381, 0.384, 0.386, 0.389, 0.391, 0.394, 0.396, 0.398, 0.399, 0.401, 0.403, 0.404, 0.406, 0.407, 0.409, 0.410, 0.411, 0.412, 0.413, 0.414, 0.415, 0.416, 0.416, 0.417, 0.417, 0.418, 0.418, 0.418, 0.419, 0.419, 0.419, 0.419, 0.418, 0.418, 0.417, 0.417, 0.416, 0.415, 0.415, 0.414, 0.413, 0.412, 0.411, 0.411, 0.410, 0.409, 0.408, 0.407, 0.405, 0.404, 0.403, 0.402, 0.400, 0.399, 0.397, 0.396, 0.395, 0.393, 0.392, 0.390, 0.389, 0.387, 0.386, 0.384, 0.383, 0.381, 0.379, 0.377, 0.376, 0.374, 0.372, 0.370, 0.368, 0.367, 0.365, 0.363, 0.361, 0.359, 0.357, 0.355, 0.353, 0.351, 0.349, 0.346, 0.344, 0.342, 0.340, 0.338, 0.335, 0.333, 0.331, 0.329, 0.327, 0.324, 0.322, 0.320, 0.318, 0.315, 0.313, 0.310, 0.308, 0.306, 0.303, 0.301, 0.298, 0.296, 0.294, 0.291, 0.289, 0.286, 0.284, 0.281, 0.279, 0.276, 0.274, 0.271, 0.269, 0.267, 0.264, 0.262, 0.260, 0.257, 0.255, 0.252, 0.250, 0.247, 0.244, 0.241, 0.238, 0.235, 0.232, 0.230, 0.227, 0.225, 0.222, 0.220, 0.218, 0.216, 0.214, 0.212, 0.210, 0.208, 0.206, 0.204, 0.202, 0.200, 0.199, 0.198, 0.196, 0.195, 0.194, 0.193, 0.192, 0.191, 0.190, 0.189, 0.188, 0.187, 0.187, 0.186, 0.185, 0.185, 0.184, 0.184, 0.183, 0.183, 0.182, 0.182, 0.181, 0.181, 0.180, 0.179, 0.179, 0.178, 0.178, 0.177, 0.177, 0.177, 0.176, 0.176, 0.176, 0.176, 0.176, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.176, 0.176, 0.177, 0.177, 0.178, 0.178, 0.179, 0.179, 0.180, 0.181, 0.181, 0.182, 0.182, 0.183, 0.184, 0.184, 0.185, 0.185, 0.186, 0.187, 0.187, 0.188, 0.188, 0.189, 0.190, 0.190, 0.191, 0.191, 0.192, 0.193, 0.193, 0.194, 0.194, 0.195, 0.196, 0.197, 0.197, 0.198, 0.199 ] TCS06 = [ 0.410, 0.421, 0.432, 0.442, 0.453, 0.464, 0.470, 0.475, 0.481, 0.486, 0.492, 0.495, 0.498, 0.502, 0.505, 0.508, 0.510, 0.512, 0.513, 0.515, 0.517, 0.518, 0.520, 0.521, 0.523, 0.524, 0.525, 0.527, 0.528, 0.530, 0.531, 0.532, 0.534, 0.535, 0.537, 0.538, 0.539, 0.540, 0.542, 0.543, 0.544, 0.545, 0.547, 0.548, 0.550, 0.551, 0.552, 0.553, 0.554, 0.555, 0.556, 0.556, 0.556, 0.556, 0.556, 0.556, 0.556, 0.555, 0.555, 0.554, 0.554, 0.553, 0.552, 0.551, 0.550, 0.549, 0.547, 0.546, 0.544, 0.543, 0.541, 0.539, 0.537, 0.535, 0.533, 0.531, 0.529, 0.526, 0.524, 0.521, 0.519, 0.516, 0.513, 0.510, 0.507, 0.504, 0.501, 0.498, 0.494, 0.491, 0.488, 0.484, 0.480, 0.477, 0.473, 0.469, 0.465, 0.461, 0.458, 0.454, 0.450, 0.446, 0.442, 0.439, 0.435, 0.431, 0.428, 0.424, 0.421, 0.417, 0.414, 0.410, 0.406, 0.403, 0.399, 0.395, 0.391, 0.388, 0.384, 0.381, 0.377, 0.373, 0.369, 0.366, 0.362, 0.358, 0.355, 0.351, 0.348, 0.344, 0.341, 0.338, 0.335, 0.331, 0.328, 0.325, 0.322, 0.319, 0.315, 0.312, 0.309, 0.306, 0.303, 0.299, 0.296, 0.293, 0.290, 0.287, 0.285, 0.282, 0.279, 0.276, 0.273, 0.271, 0.268, 0.265, 0.263, 0.260, 0.258, 0.255, 0.253, 0.251, 0.248, 0.246, 0.243, 0.241, 0.240, 0.238, 0.237, 0.235, 0.234, 0.233, 0.231, 0.230, 0.228, 0.227, 0.227, 0.226, 0.226, 0.225, 0.225, 0.224, 0.224, 0.223, 0.223, 0.222, 0.222, 0.222, 0.221, 0.221, 0.221, 0.221, 0.221, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.221, 0.221, 0.222, 0.222, 0.223, 0.224, 0.225, 0.225, 0.226, 0.227, 0.228, 0.229, 0.231, 0.232, 0.233, 0.234, 0.235, 0.237, 0.238, 0.239, 0.240, 0.241, 0.242, 0.243, 0.244, 0.245, 0.247, 0.248, 0.250, 0.251, 0.252, 0.254, 0.255, 0.257, 0.258, 0.259, 0.260, 0.261, 0.262, 0.263, 0.264, 0.265, 0.266, 0.267, 0.268, 0.269, 0.270, 0.271, 0.272, 0.273, 0.274, 0.275, 0.276, 0.277, 0.278, 0.279, 0.279, 0.280, 0.280, 0.281, 0.281, 0.282, 0.282, 0.283, 0.283, 0.284, 0.284, 0.285, 0.285, 0.286, 0.287, 0.288, 0.289, 0.290, 0.291, 0.292, 0.293, 0.294, 0.295, 0.296, 0.297, 0.298, 0.300, 0.301, 0.302 ] TCS07 = [ 0.551, 0.552, 0.553, 0.553, 0.554, 0.555, 0.556, 0.557, 0.557, 0.558, 0.559, 0.559, 0.559, 0.560, 0.560, 0.560, 0.560, 0.560, 0.561, 0.561, 0.561, 0.560, 0.560, 0.559, 0.559, 0.558, 0.558, 0.557, 0.557, 0.556, 0.556, 0.555, 0.554, 0.553, 0.552, 0.551, 0.550, 0.548, 0.547, 0.545, 0.544, 0.542, 0.540, 0.539, 0.537, 0.535, 0.532, 0.530, 0.527, 0.525, 0.522, 0.519, 0.516, 0.512, 0.509, 0.506, 0.502, 0.499, 0.495, 0.492, 0.488, 0.484, 0.480, 0.477, 0.473, 0.469, 0.465, 0.461, 0.456, 0.452, 0.448, 0.444, 0.440, 0.437, 0.433, 0.429, 0.425, 0.421, 0.416, 0.412, 0.408, 0.403, 0.399, 0.394, 0.390, 0.385, 0.381, 0.376, 0.372, 0.367, 0.363, 0.359, 0.354, 0.350, 0.345, 0.341, 0.338, 0.334, 0.331, 0.327, 0.324, 0.321, 0.319, 0.316, 0.314, 0.311, 0.309, 0.307, 0.305, 0.303, 0.301, 0.299, 0.297, 0.295, 0.293, 0.291, 0.289, 0.288, 0.286, 0.285, 0.283, 0.281, 0.279, 0.277, 0.275, 0.273, 0.271, 0.270, 0.268, 0.267, 0.265, 0.264, 0.263, 0.262, 0.261, 0.260, 0.259, 0.259, 0.258, 0.258, 0.257, 0.257, 0.257, 0.257, 0.257, 0.257, 0.257, 0.258, 0.258, 0.259, 0.259, 0.259, 0.259, 0.260, 0.260, 0.260, 0.260, 0.260, 0.260, 0.260, 0.260, 0.260, 0.259, 0.259, 0.258, 0.258, 0.258, 0.257, 0.257, 0.256, 0.256, 0.256, 0.255, 0.255, 0.254, 0.254, 0.254, 0.254, 0.254, 0.254, 0.254, 0.255, 0.256, 0.257, 0.258, 0.259, 0.261, 0.263, 0.266, 0.268, 0.270, 0.273, 0.276, 0.278, 0.281, 0.284, 0.288, 0.291, 0.295, 0.298, 0.302, 0.306, 0.311, 0.315, 0.320, 0.324, 0.328, 0.332, 0.336, 0.340, 0.344, 0.348, 0.351, 0.355, 0.358, 0.362, 0.365, 0.368, 0.371, 0.374, 0.377, 0.379, 0.382, 0.384, 0.387, 0.389, 0.391, 0.393, 0.396, 0.398, 0.400, 0.402, 0.404, 0.406, 0.408, 0.410, 0.412, 0.414, 0.416, 0.418, 0.420, 0.422, 0.424, 0.425, 0.427, 0.429, 0.431, 0.433, 0.434, 0.436, 0.438, 0.439, 0.441, 0.442, 0.444, 0.445, 0.446, 0.448, 0.449, 0.451, 0.452, 0.453, 0.454, 0.455, 0.456, 0.457, 0.458, 0.459, 0.460, 0.461, 0.462, 0.463, 0.464, 0.464, 0.465, 0.466, 0.466, 0.467, 0.467, 0.468, 0.468, 0.468, 0.469, 0.469, 0.470, 0.470, 0.471, 0.471, 0.472, 0.472, 0.473, 0.474, 0.475, 0.475, 0.476, 0.477, 0.478, 0.479, 0.481, 0.482, 0.483 ] TCS08 = [ 0.319, 0.338, 0.358, 0.377, 0.397, 0.416, 0.425, 0.434, 0.444, 0.453, 0.462, 0.466, 0.470, 0.474, 0.478, 0.482, 0.484, 0.485, 0.487, 0.488, 0.490, 0.490, 0.489, 0.489, 0.488, 0.488, 0.487, 0.486, 0.484, 0.483, 0.482, 0.480, 0.478, 0.477, 0.475, 0.473, 0.471, 0.469, 0.466, 0.464, 0.462, 0.460, 0.457, 0.455, 0.452, 0.450, 0.448, 0.446, 0.443, 0.441, 0.439, 0.436, 0.434, 0.431, 0.429, 0.426, 0.423, 0.421, 0.418, 0.416, 0.413, 0.410, 0.407, 0.403, 0.400, 0.397, 0.394, 0.391, 0.388, 0.385, 0.382, 0.379, 0.376, 0.372, 0.369, 0.366, 0.363, 0.360, 0.358, 0.355, 0.352, 0.349, 0.346, 0.343, 0.340, 0.337, 0.335, 0.332, 0.330, 0.327, 0.325, 0.322, 0.319, 0.316, 0.313, 0.310, 0.308, 0.306, 0.303, 0.301, 0.299, 0.297, 0.295, 0.293, 0.291, 0.289, 0.288, 0.287, 0.285, 0.284, 0.283, 0.282, 0.280, 0.279, 0.277, 0.276, 0.275, 0.274, 0.272, 0.271, 0.270, 0.268, 0.267, 0.265, 0.264, 0.262, 0.261, 0.260, 0.258, 0.257, 0.256, 0.255, 0.254, 0.253, 0.252, 0.251, 0.251, 0.251, 0.250, 0.250, 0.250, 0.250, 0.250, 0.251, 0.251, 0.251, 0.252, 0.252, 0.253, 0.253, 0.254, 0.255, 0.256, 0.256, 0.257, 0.258, 0.259, 0.260, 0.262, 0.263, 0.264, 0.265, 0.266, 0.267, 0.268, 0.269, 0.270, 0.270, 0.271, 0.271, 0.272, 0.272, 0.273, 0.273, 0.274, 0.274, 0.275, 0.276, 0.276, 0.277, 0.278, 0.279, 0.280, 0.282, 0.283, 0.284, 0.286, 0.288, 0.291, 0.293, 0.295, 0.299, 0.303, 0.308, 0.312, 0.316, 0.322, 0.329, 0.335, 0.342, 0.348, 0.355, 0.362, 0.370, 0.377, 0.384, 0.394, 0.404, 0.414, 0.424, 0.434, 0.444, 0.453, 0.463, 0.472, 0.482, 0.491, 0.500, 0.510, 0.519, 0.528, 0.536, 0.544, 0.552, 0.560, 0.568, 0.575, 0.582, 0.590, 0.597, 0.604, 0.609, 0.614, 0.619, 0.624, 0.629, 0.633, 0.637, 0.640, 0.644, 0.648, 0.651, 0.654, 0.657, 0.660, 0.663, 0.666, 0.668, 0.671, 0.673, 0.676, 0.678, 0.680, 0.681, 0.683, 0.685, 0.687, 0.688, 0.690, 0.691, 0.693, 0.694, 0.696, 0.697, 0.699, 0.700, 0.701, 0.702, 0.703, 0.704, 0.705, 0.706, 0.707, 0.707, 0.708, 0.709, 0.710, 0.710, 0.711, 0.711, 0.712, 0.713, 0.713, 0.714, 0.714, 0.715, 0.715, 0.716, 0.716, 0.717, 0.717, 0.717, 0.718, 0.718, 0.719, 0.719, 0.719, 0.720, 0.720, 0.721, 0.721 ] TCS09 = [ 0.256, 0.256, 0.255, 0.255, 0.254, 0.254, 0.254, 0.253, 0.253, 0.252, 0.252, 0.251, 0.250, 0.250, 0.249, 0.248, 0.247, 0.246, 0.246, 0.245, 0.244, 0.243, 0.242, 0.242, 0.241, 0.240, 0.239, 0.239, 0.238, 0.238, 0.237, 0.236, 0.235, 0.234, 0.233, 0.232, 0.232, 0.231, 0.231, 0.230, 0.230, 0.229, 0.228, 0.228, 0.227, 0.226, 0.226, 0.226, 0.225, 0.225, 0.225, 0.224, 0.224, 0.223, 0.223, 0.222, 0.222, 0.221, 0.221, 0.220, 0.220, 0.220, 0.219, 0.219, 0.218, 0.218, 0.218, 0.217, 0.217, 0.216, 0.216, 0.216, 0.215, 0.215, 0.214, 0.214, 0.214, 0.214, 0.214, 0.214, 0.214, 0.214, 0.214, 0.214, 0.214, 0.214, 0.214, 0.215, 0.215, 0.216, 0.216, 0.216, 0.217, 0.217, 0.218, 0.218, 0.219, 0.220, 0.221, 0.222, 0.223, 0.223, 0.224, 0.224, 0.225, 0.225, 0.225, 0.225, 0.226, 0.226, 0.226, 0.226, 0.226, 0.226, 0.226, 0.226, 0.226, 0.226, 0.225, 0.225, 0.225, 0.225, 0.225, 0.225, 0.225, 0.225, 0.225, 0.226, 0.226, 0.227, 0.227, 0.228, 0.228, 0.229, 0.229, 0.230, 0.231, 0.232, 0.234, 0.235, 0.236, 0.238, 0.240, 0.241, 0.243, 0.245, 0.247, 0.248, 0.250, 0.251, 0.253, 0.255, 0.257, 0.258, 0.260, 0.262, 0.264, 0.266, 0.268, 0.270, 0.272, 0.274, 0.276, 0.279, 0.281, 0.283, 0.286, 0.289, 0.292, 0.295, 0.298, 0.302, 0.306, 0.310, 0.314, 0.318, 0.323, 0.327, 0.332, 0.336, 0.341, 0.346, 0.351, 0.357, 0.362, 0.367, 0.372, 0.376, 0.381, 0.385, 0.390, 0.394, 0.398, 0.401, 0.405, 0.409, 0.412, 0.415, 0.418, 0.421, 0.424, 0.426, 0.428, 0.431, 0.433, 0.435, 0.436, 0.438, 0.439, 0.441, 0.442, 0.443, 0.444, 0.446, 0.447, 0.448, 0.448, 0.449, 0.449, 0.450, 0.450, 0.450, 0.450, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.450, 0.450, 0.450, 0.450, 0.450, 0.450, 0.450, 0.450, 0.450, 0.450, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.451, 0.452, 0.452, 0.453, 0.453, 0.453, 0.453, 0.454, 0.454, 0.454, 0.454, 0.454, 0.455, 0.455, 0.455, 0.455, 0.456, 0.456, 0.457, 0.457, 0.457, 0.457, 0.458, 0.458, 0.458, 0.458, 0.459, 0.459, 0.460, 0.460, 0.460, 0.461, 0.461, 0.462, 0.462 ] TCS10 = [ 0.111, 0.112, 0.113, 0.114, 0.115, 0.116, 0.116, 0.117, 0.117, 0.118, 0.118, 0.118, 0.119, 0.119, 0.120, 0.120, 0.120, 0.120, 0.121, 0.121, 0.121, 0.121, 0.121, 0.122, 0.122, 0.122, 0.122, 0.122, 0.122, 0.122, 0.122, 0.122, 0.122, 0.122, 0.122, 0.122, 0.122, 0.122, 0.123, 0.123, 0.123, 0.123, 0.123, 0.124, 0.124, 0.124, 0.125, 0.125, 0.126, 0.126, 0.127, 0.127, 0.127, 0.128, 0.128, 0.128, 0.129, 0.129, 0.130, 0.130, 0.131, 0.132, 0.132, 0.133, 0.133, 0.134, 0.135, 0.136, 0.136, 0.137, 0.138, 0.139, 0.140, 0.141, 0.142, 0.143, 0.144, 0.146, 0.147, 0.149, 0.150, 0.152, 0.154, 0.155, 0.157, 0.159, 0.162, 0.165, 0.168, 0.171, 0.174, 0.177, 0.180, 0.184, 0.187, 0.190, 0.193, 0.197, 0.200, 0.204, 0.207, 0.211, 0.214, 0.218, 0.221, 0.225, 0.228, 0.232, 0.235, 0.239, 0.242, 0.244, 0.246, 0.249, 0.251, 0.253, 0.254, 0.256, 0.257, 0.259, 0.260, 0.261, 0.262, 0.262, 0.263, 0.264, 0.265, 0.265, 0.266, 0.266, 0.267, 0.267, 0.268, 0.268, 0.269, 0.269, 0.270, 0.270, 0.271, 0.271, 0.272, 0.273, 0.274, 0.274, 0.275, 0.276, 0.277, 0.278, 0.280, 0.281, 0.282, 0.283, 0.285, 0.286, 0.288, 0.289, 0.291, 0.293, 0.295, 0.297, 0.299, 0.301, 0.303, 0.305, 0.307, 0.309, 0.312, 0.314, 0.317, 0.319, 0.322, 0.323, 0.325, 0.326, 0.328, 0.329, 0.330, 0.331, 0.333, 0.334, 0.335, 0.336, 0.337, 0.337, 0.338, 0.339, 0.339, 0.340, 0.340, 0.341, 0.341, 0.341, 0.341, 0.341, 0.341, 0.341, 0.341, 0.341, 0.342, 0.342, 0.342, 0.342, 0.342, 0.342, 0.342, 0.342, 0.342, 0.342, 0.342, 0.342, 0.342, 0.342, 0.342, 0.341, 0.341, 0.341, 0.341, 0.341, 0.341, 0.341, 0.341, 0.341, 0.340, 0.340, 0.339, 0.339, 0.339, 0.339, 0.339, 0.339, 0.339, 0.339, 0.339, 0.338, 0.338, 0.338, 0.338, 0.338, 0.338, 0.338, 0.338, 0.338, 0.338, 0.337, 0.337, 0.337, 0.337, 0.337, 0.336, 0.336, 0.336, 0.336, 0.336, 0.335, 0.335, 0.335, 0.335, 0.335, 0.334, 0.334, 0.334, 0.334, 0.333, 0.333, 0.332, 0.332, 0.332, 0.332, 0.332, 0.332, 0.332, 0.332, 0.332, 0.331, 0.331, 0.331, 0.331, 0.331, 0.331, 0.331, 0.331, 0.331, 0.331, 0.330, 0.330, 0.330, 0.330, 0.330, 0.329, 0.329, 0.329, 0.329, 0.329, 0.328, 0.328, 0.328, 0.328, 0.328, 0.328, 0.328, 0.328 ] TCS11 = [ 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.074, 0.074, 0.074, 0.074, 0.074, 0.074, 0.074, 0.074, 0.074, 0.074, 0.074, 0.074, 0.074, 0.074, 0.074, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.073, 0.074, 0.074, 0.074, 0.074, 0.074, 0.075, 0.075, 0.075, 0.075, 0.076, 0.076, 0.077, 0.077, 0.078, 0.078, 0.079, 0.079, 0.080, 0.081, 0.082, 0.083, 0.084, 0.085, 0.087, 0.089, 0.090, 0.092, 0.094, 0.097, 0.100, 0.103, 0.106, 0.109, 0.112, 0.116, 0.119, 0.123, 0.126, 0.130, 0.135, 0.139, 0.144, 0.148, 0.153, 0.158, 0.162, 0.167, 0.172, 0.177, 0.182, 0.188, 0.193, 0.198, 0.203, 0.207, 0.212, 0.216, 0.221, 0.225, 0.229, 0.233, 0.237, 0.241, 0.245, 0.249, 0.252, 0.256, 0.260, 0.264, 0.267, 0.271, 0.274, 0.278, 0.283, 0.288, 0.292, 0.297, 0.302, 0.309, 0.317, 0.324, 0.332, 0.339, 0.345, 0.351, 0.358, 0.364, 0.370, 0.374, 0.379, 0.383, 0.388, 0.392, 0.393, 0.395, 0.396, 0.398, 0.399, 0.399, 0.399, 0.400, 0.400, 0.400, 0.399, 0.397, 0.396, 0.394, 0.393, 0.390, 0.388, 0.385, 0.383, 0.380, 0.377, 0.374, 0.371, 0.368, 0.365, 0.362, 0.359, 0.355, 0.352, 0.349, 0.346, 0.342, 0.339, 0.335, 0.332, 0.329, 0.325, 0.322, 0.318, 0.315, 0.312, 0.309, 0.305, 0.302, 0.299, 0.296, 0.293, 0.291, 0.288, 0.285, 0.282, 0.280, 0.277, 0.275, 0.272, 0.270, 0.269, 0.267, 0.266, 0.264, 0.263, 0.261, 0.260, 0.258, 0.257, 0.256, 0.255, 0.254, 0.253, 0.252, 0.251, 0.250, 0.249, 0.248, 0.247, 0.246, 0.245, 0.243, 0.242, 0.241, 0.240, 0.239, 0.237, 0.236, 0.235, 0.234, 0.233, 0.231, 0.230, 0.229, 0.228, 0.227, 0.226, 0.225, 0.224, 0.223, 0.222, 0.222, 0.221, 0.220, 0.219, 0.219, 0.218, 0.218, 0.217, 0.217, 0.217, 0.216, 0.216, 0.216, 0.216, 0.216, 0.216, 0.216, 0.216, 0.217, 0.217, 0.218, 0.218, 0.219, 0.220, 0.221, 0.222, 0.223, 0.224, 0.225, 0.226, 0.228, 0.229, 0.230, 0.232, 0.233, 0.235, 0.236, 0.238, 0.241, 0.243, 0.246, 0.248, 0.251, 0.255, 0.258, 0.262, 0.265, 0.269, 0.273, 0.277, 0.280, 0.284, 0.288, 0.293, 0.298, 0.302, 0.307, 0.312, 0.318, 0.323, 0.329, 0.334, 0.340 ] TCS12 = [ 0.116, 0.117, 0.118, 0.119, 0.120, 0.121, 0.122, 0.122, 0.123, 0.123, 0.124, 0.124, 0.125, 0.125, 0.126, 0.126, 0.126, 0.127, 0.127, 0.128, 0.128, 0.129, 0.129, 0.130, 0.130, 0.131, 0.132, 0.133, 0.133, 0.134, 0.135, 0.136, 0.137, 0.137, 0.138, 0.139, 0.140, 0.141, 0.142, 0.143, 0.144, 0.145, 0.147, 0.148, 0.150, 0.151, 0.153, 0.155, 0.157, 0.159, 0.161, 0.163, 0.165, 0.168, 0.170, 0.172, 0.175, 0.178, 0.180, 0.183, 0.186, 0.190, 0.194, 0.197, 0.201, 0.205, 0.210, 0.215, 0.219, 0.224, 0.229, 0.234, 0.239, 0.244, 0.249, 0.254, 0.259, 0.265, 0.270, 0.276, 0.281, 0.286, 0.292, 0.297, 0.303, 0.308, 0.313, 0.318, 0.322, 0.327, 0.332, 0.336, 0.340, 0.344, 0.348, 0.352, 0.356, 0.359, 0.363, 0.366, 0.370, 0.373, 0.375, 0.378, 0.380, 0.383, 0.384, 0.386, 0.387, 0.389, 0.390, 0.391, 0.392, 0.392, 0.393, 0.394, 0.394, 0.394, 0.395, 0.395, 0.395, 0.394, 0.394, 0.393, 0.393, 0.392, 0.391, 0.389, 0.388, 0.386, 0.385, 0.383, 0.382, 0.380, 0.379, 0.377, 0.375, 0.373, 0.371, 0.369, 0.367, 0.364, 0.362, 0.359, 0.357, 0.354, 0.351, 0.349, 0.346, 0.344, 0.341, 0.338, 0.335, 0.333, 0.330, 0.327, 0.324, 0.321, 0.318, 0.315, 0.312, 0.309, 0.306, 0.302, 0.299, 0.296, 0.293, 0.290, 0.286, 0.283, 0.280, 0.277, 0.273, 0.270, 0.266, 0.263, 0.260, 0.257, 0.253, 0.250, 0.247, 0.243, 0.240, 0.236, 0.233, 0.229, 0.226, 0.223, 0.220, 0.217, 0.214, 0.211, 0.208, 0.204, 0.201, 0.198, 0.195, 0.193, 0.190, 0.188, 0.185, 0.183, 0.181, 0.179, 0.177, 0.175, 0.174, 0.173, 0.171, 0.170, 0.169, 0.168, 0.167, 0.166, 0.165, 0.164, 0.163, 0.162, 0.162, 0.161, 0.160, 0.159, 0.158, 0.158, 0.157, 0.156, 0.156, 0.155, 0.155, 0.154, 0.154, 0.154, 0.153, 0.153, 0.152, 0.152, 0.152, 0.152, 0.151, 0.151, 0.151, 0.151, 0.150, 0.150, 0.149, 0.149, 0.149, 0.149, 0.148, 0.148, 0.148, 0.148, 0.148, 0.148, 0.148, 0.148, 0.148, 0.148, 0.148, 0.148, 0.148, 0.148, 0.148, 0.149, 0.149, 0.149, 0.149, 0.150, 0.150, 0.151, 0.151, 0.152, 0.152, 0.153, 0.153, 0.154, 0.155, 0.156, 0.156, 0.157, 0.158, 0.159, 0.160, 0.160, 0.161, 0.162, 0.163, 0.163, 0.164, 0.164, 0.165, 0.166, 0.166, 0.167, 0.167, 0.168, 0.168, 0.169, 0.169, 0.170, 0.170 ] TCS13 = [ 0.313, 0.313, 0.314, 0.314, 0.315, 0.315, 0.316, 0.317, 0.317, 0.318, 0.319, 0.320, 0.320, 0.321, 0.321, 0.322, 0.323, 0.324, 0.324, 0.325, 0.326, 0.327, 0.328, 0.328, 0.329, 0.330, 0.331, 0.332, 0.332, 0.333, 0.334, 0.335, 0.336, 0.337, 0.338, 0.339, 0.340, 0.342, 0.343, 0.345, 0.346, 0.347, 0.348, 0.350, 0.351, 0.352, 0.354, 0.355, 0.357, 0.358, 0.360, 0.362, 0.364, 0.365, 0.367, 0.369, 0.371, 0.374, 0.376, 0.379, 0.381, 0.384, 0.386, 0.389, 0.391, 0.394, 0.396, 0.398, 0.399, 0.401, 0.403, 0.404, 0.406, 0.407, 0.409, 0.410, 0.411, 0.412, 0.413, 0.414, 0.415, 0.416, 0.416, 0.417, 0.417, 0.418, 0.418, 0.418, 0.419, 0.419, 0.419, 0.419, 0.418, 0.418, 0.417, 0.417, 0.416, 0.415, 0.415, 0.414, 0.413, 0.412, 0.411, 0.411, 0.410, 0.409, 0.408, 0.407, 0.405, 0.404, 0.403, 0.402, 0.400, 0.399, 0.397, 0.396, 0.395, 0.393, 0.392, 0.390, 0.389, 0.387, 0.386, 0.384, 0.383, 0.381, 0.379, 0.377, 0.376, 0.374, 0.372, 0.370, 0.368, 0.367, 0.365, 0.363, 0.361, 0.359, 0.357, 0.355, 0.353, 0.351, 0.349, 0.346, 0.344, 0.342, 0.340, 0.338, 0.335, 0.333, 0.331, 0.329, 0.327, 0.324, 0.322, 0.320, 0.318, 0.315, 0.313, 0.310, 0.308, 0.306, 0.303, 0.301, 0.298, 0.296, 0.294, 0.291, 0.289, 0.286, 0.284, 0.281, 0.279, 0.276, 0.274, 0.271, 0.269, 0.267, 0.264, 0.262, 0.260, 0.257, 0.255, 0.252, 0.250, 0.247, 0.244, 0.241, 0.238, 0.235, 0.232, 0.230, 0.227, 0.225, 0.222, 0.220, 0.218, 0.216, 0.214, 0.212, 0.210, 0.208, 0.206, 0.204, 0.202, 0.200, 0.199, 0.198, 0.196, 0.195, 0.194, 0.193, 0.192, 0.191, 0.190, 0.189, 0.188, 0.187, 0.187, 0.186, 0.185, 0.185, 0.184, 0.184, 0.183, 0.183, 0.182, 0.182, 0.181, 0.181, 0.180, 0.179, 0.179, 0.178, 0.178, 0.177, 0.177, 0.177, 0.176, 0.176, 0.176, 0.176, 0.176, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.175, 0.176, 0.176, 0.177, 0.177, 0.178, 0.178, 0.179, 0.179, 0.180, 0.181, 0.181, 0.182, 0.182, 0.183, 0.184, 0.184, 0.185, 0.185, 0.186, 0.187, 0.187, 0.188, 0.188, 0.189, 0.190, 0.190, 0.191, 0.191, 0.192, 0.193, 0.193, 0.194, 0.194, 0.195, 0.196, 0.197, 0.197, 0.198, 0.199 ] TCS14 = [ 0.410, 0.421, 0.432, 0.442, 0.453, 0.464, 0.470, 0.475, 0.481, 0.486, 0.492, 0.495, 0.498, 0.502, 0.505, 0.508, 0.510, 0.512, 0.513, 0.515, 0.517, 0.518, 0.520, 0.521, 0.523, 0.524, 0.525, 0.527, 0.528, 0.530, 0.531, 0.532, 0.534, 0.535, 0.537, 0.538, 0.539, 0.540, 0.542, 0.543, 0.544, 0.545, 0.547, 0.548, 0.550, 0.551, 0.552, 0.553, 0.554, 0.555, 0.556, 0.556, 0.556, 0.556, 0.556, 0.556, 0.556, 0.555, 0.555, 0.554, 0.554, 0.553, 0.552, 0.551, 0.550, 0.549, 0.547, 0.546, 0.544, 0.543, 0.541, 0.539, 0.537, 0.535, 0.533, 0.531, 0.529, 0.526, 0.524, 0.521, 0.519, 0.516, 0.513, 0.510, 0.507, 0.504, 0.501, 0.498, 0.494, 0.491, 0.488, 0.484, 0.480, 0.477, 0.473, 0.469, 0.465, 0.461, 0.458, 0.454, 0.450, 0.446, 0.442, 0.439, 0.435, 0.431, 0.428, 0.424, 0.421, 0.417, 0.414, 0.410, 0.406, 0.403, 0.399, 0.395, 0.391, 0.388, 0.384, 0.381, 0.377, 0.373, 0.369, 0.366, 0.362, 0.358, 0.355, 0.351, 0.348, 0.344, 0.341, 0.338, 0.335, 0.331, 0.328, 0.325, 0.322, 0.319, 0.315, 0.312, 0.309, 0.306, 0.303, 0.299, 0.296, 0.293, 0.290, 0.287, 0.285, 0.282, 0.279, 0.276, 0.273, 0.271, 0.268, 0.265, 0.263, 0.260, 0.258, 0.255, 0.253, 0.251, 0.248, 0.246, 0.243, 0.241, 0.240, 0.238, 0.237, 0.235, 0.234, 0.233, 0.231, 0.230, 0.228, 0.227, 0.227, 0.226, 0.226, 0.225, 0.225, 0.224, 0.224, 0.223, 0.223, 0.222, 0.222, 0.222, 0.221, 0.221, 0.221, 0.221, 0.221, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.221, 0.221, 0.222, 0.222, 0.223, 0.224, 0.225, 0.225, 0.226, 0.227, 0.228, 0.229, 0.231, 0.232, 0.233, 0.234, 0.235, 0.237, 0.238, 0.239, 0.240, 0.241, 0.242, 0.243, 0.244, 0.245, 0.247, 0.248, 0.250, 0.251, 0.252, 0.254, 0.255, 0.257, 0.258, 0.259, 0.260, 0.261, 0.262, 0.263, 0.264, 0.265, 0.266, 0.267, 0.268, 0.269, 0.270, 0.271, 0.272, 0.273, 0.274, 0.275, 0.276, 0.277, 0.278, 0.279, 0.279, 0.280, 0.280, 0.281, 0.281, 0.282, 0.282, 0.283, 0.283, 0.284, 0.284, 0.285, 0.285, 0.286, 0.287, 0.288, 0.289, 0.290, 0.291, 0.292, 0.293, 0.294, 0.295, 0.296, 0.297, 0.298, 0.300, 0.301, 0.302 ] # ILLUM_D_S0, ILLUM_D_S1, ILLUM_D_S2 are used in calculating the spectrum of # illuminant D (daylight) at various color temperatures (see # http://en.wikipedia.org/wiki/Standard_illuminant, and also from the # spreadsheet found at: # http://www.cis.rit.edu/mcsl/online/CIE/DaylightSeries.xls. Both sources give # the same calculation.) The original data is given at every 10 nm, CIE gives # the data at every 5 nm by linear interpolation of the 10nm data. This data at # every nm is just a linear interpolation of the 10 nm data. Because the # functions are not-continuous, I don't think any better fit can be done. ILLUM_D_S0 = { 300: 0.04, 301: 0.64, 302: 1.23, 303: 1.83, 304: 2.42, 305: 3.02, 306: 3.62, 307: 4.21, 308: 4.81, 309: 5.40, 310: 6.00, 311: 8.36, 312: 10.72, 313: 13.08, 314: 15.44, 315: 17.80, 316: 20.16, 317: 22.52, 318: 24.88, 319: 27.24, 320: 29.60, 321: 32.17, 322: 34.74, 323: 37.31, 324: 39.88, 325: 42.45, 326: 45.02, 327: 47.59, 328: 50.16, 329: 52.73, 330: 55.30, 331: 55.50, 332: 55.70, 333: 55.90, 334: 56.10, 335: 56.30, 336: 56.50, 337: 56.70, 338: 56.90, 339: 57.10, 340: 57.30, 341: 57.75, 342: 58.20, 343: 58.65, 344: 59.10, 345: 59.55, 346: 60.00, 347: 60.45, 348: 60.90, 349: 61.35, 350: 61.80, 351: 61.77, 352: 61.74, 353: 61.71, 354: 61.68, 355: 61.65, 356: 61.62, 357: 61.59, 358: 61.56, 359: 61.53, 360: 61.50, 361: 62.23, 362: 62.96, 363: 63.69, 364: 64.42, 365: 65.15, 366: 65.88, 367: 66.61, 368: 67.34, 369: 68.07, 370: 68.80, 371: 68.26, 372: 67.72, 373: 67.18, 374: 66.64, 375: 66.10, 376: 65.56, 377: 65.02, 378: 64.48, 379: 63.94, 380: 63.40, 381: 63.64, 382: 63.88, 383: 64.12, 384: 64.36, 385: 64.60, 386: 64.84, 387: 65.08, 388: 65.32, 389: 65.56, 390: 65.80, 391: 68.70, 392: 71.60, 393: 74.50, 394: 77.40, 395: 80.30, 396: 83.20, 397: 86.10, 398: 89.00, 399: 91.90, 400: 94.80, 401: 95.80, 402: 96.80, 403: 97.80, 404: 98.80, 405: 99.80, 406: 100.80, 407: 101.80, 408: 102.80, 409: 103.80, 410: 104.80, 411: 104.91, 412: 105.02, 413: 105.13, 414: 105.24, 415: 105.35, 416: 105.46, 417: 105.57, 418: 105.68, 419: 105.79, 420: 105.90, 421: 104.99, 422: 104.08, 423: 103.17, 424: 102.26, 425: 101.35, 426: 100.44, 427: 99.53, 428: 98.62, 429: 97.71, 430: 96.80, 431: 98.51, 432: 100.22, 433: 101.93, 434: 103.64, 435: 105.35, 436: 107.06, 437: 108.77, 438: 110.48, 439: 112.19, 440: 113.90, 441: 115.07, 442: 116.24, 443: 117.41, 444: 118.58, 445: 119.75, 446: 120.92, 447: 122.09, 448: 123.26, 449: 124.43, 450: 125.60, 451: 125.59, 452: 125.58, 453: 125.57, 454: 125.56, 455: 125.55, 456: 125.54, 457: 125.53, 458: 125.52, 459: 125.51, 460: 125.50, 461: 125.08, 462: 124.66, 463: 124.24, 464: 123.82, 465: 123.40, 466: 122.98, 467: 122.56, 468: 122.14, 469: 121.72, 470: 121.30, 471: 121.30, 472: 121.30, 473: 121.30, 474: 121.30, 475: 121.30, 476: 121.30, 477: 121.30, 478: 121.30, 479: 121.30, 480: 121.30, 481: 120.52, 482: 119.74, 483: 118.96, 484: 118.18, 485: 117.40, 486: 116.62, 487: 115.84, 488: 115.06, 489: 114.28, 490: 113.50, 491: 113.46, 492: 113.42, 493: 113.38, 494: 113.34, 495: 113.30, 496: 113.26, 497: 113.22, 498: 113.18, 499: 113.14, 500: 113.10, 501: 112.87, 502: 112.64, 503: 112.41, 504: 112.18, 505: 111.95, 506: 111.72, 507: 111.49, 508: 111.26, 509: 111.03, 510: 110.80, 511: 110.37, 512: 109.94, 513: 109.51, 514: 109.08, 515: 108.65, 516: 108.22, 517: 107.79, 518: 107.36, 519: 106.93, 520: 106.50, 521: 106.73, 522: 106.96, 523: 107.19, 524: 107.42, 525: 107.65, 526: 107.88, 527: 108.11, 528: 108.34, 529: 108.57, 530: 108.80, 531: 108.45, 532: 108.10, 533: 107.75, 534: 107.40, 535: 107.05, 536: 106.70, 537: 106.35, 538: 106.00, 539: 105.65, 540: 105.30, 541: 105.21, 542: 105.12, 543: 105.03, 544: 104.94, 545: 104.85, 546: 104.76, 547: 104.67, 548: 104.58, 549: 104.49, 550: 104.40, 551: 103.96, 552: 103.52, 553: 103.08, 554: 102.64, 555: 102.20, 556: 101.76, 557: 101.32, 558: 100.88, 559: 100.44, 560: 100.00, 561: 99.60, 562: 99.20, 563: 98.80, 564: 98.40, 565: 98.00, 566: 97.60, 567: 97.20, 568: 96.80, 569: 96.40, 570: 96.00, 571: 95.91, 572: 95.82, 573: 95.73, 574: 95.64, 575: 95.55, 576: 95.46, 577: 95.37, 578: 95.28, 579: 95.19, 580: 95.10, 581: 94.50, 582: 93.90, 583: 93.30, 584: 92.70, 585: 92.10, 586: 91.50, 587: 90.90, 588: 90.30, 589: 89.70, 590: 89.10, 591: 89.24, 592: 89.38, 593: 89.52, 594: 89.66, 595: 89.80, 596: 89.94, 597: 90.08, 598: 90.22, 599: 90.36, 600: 90.50, 601: 90.48, 602: 90.46, 603: 90.44, 604: 90.42, 605: 90.40, 606: 90.38, 607: 90.36, 608: 90.34, 609: 90.32, 610: 90.30, 611: 90.11, 612: 89.92, 613: 89.73, 614: 89.54, 615: 89.35, 616: 89.16, 617: 88.97, 618: 88.78, 619: 88.59, 620: 88.40, 621: 87.96, 622: 87.52, 623: 87.08, 624: 86.64, 625: 86.20, 626: 85.76, 627: 85.32, 628: 84.88, 629: 84.44, 630: 84.00, 631: 84.11, 632: 84.22, 633: 84.33, 634: 84.44, 635: 84.55, 636: 84.66, 637: 84.77, 638: 84.88, 639: 84.99, 640: 85.10, 641: 84.78, 642: 84.46, 643: 84.14, 644: 83.82, 645: 83.50, 646: 83.18, 647: 82.86, 648: 82.54, 649: 82.22, 650: 81.90, 651: 81.97, 652: 82.04, 653: 82.11, 654: 82.18, 655: 82.25, 656: 82.32, 657: 82.39, 658: 82.46, 659: 82.53, 660: 82.60, 661: 82.83, 662: 83.06, 663: 83.29, 664: 83.52, 665: 83.75, 666: 83.98, 667: 84.21, 668: 84.44, 669: 84.67, 670: 84.90, 671: 84.54, 672: 84.18, 673: 83.82, 674: 83.46, 675: 83.10, 676: 82.74, 677: 82.38, 678: 82.02, 679: 81.66, 680: 81.30, 681: 80.36, 682: 79.42, 683: 78.48, 684: 77.54, 685: 76.60, 686: 75.66, 687: 74.72, 688: 73.78, 689: 72.84, 690: 71.90, 691: 72.14, 692: 72.38, 693: 72.62, 694: 72.86, 695: 73.10, 696: 73.34, 697: 73.58, 698: 73.82, 699: 74.06, 700: 74.30, 701: 74.51, 702: 74.72, 703: 74.93, 704: 75.14, 705: 75.35, 706: 75.56, 707: 75.77, 708: 75.98, 709: 76.19, 710: 76.40, 711: 75.09, 712: 73.78, 713: 72.47, 714: 71.16, 715: 69.85, 716: 68.54, 717: 67.23, 718: 65.92, 719: 64.61, 720: 63.30, 721: 64.14, 722: 64.98, 723: 65.82, 724: 66.66, 725: 67.50, 726: 68.34, 727: 69.18, 728: 70.02, 729: 70.86, 730: 71.70, 731: 72.23, 732: 72.76, 733: 73.29, 734: 73.82, 735: 74.35, 736: 74.88, 737: 75.41, 738: 75.94, 739: 76.47, 740: 77.00, 741: 75.82, 742: 74.64, 743: 73.46, 744: 72.28, 745: 71.10, 746: 69.92, 747: 68.74, 748: 67.56, 749: 66.38, 750: 65.20, 751: 63.45, 752: 61.70, 753: 59.95, 754: 58.20, 755: 56.45, 756: 54.70, 757: 52.95, 758: 51.20, 759: 49.45, 760: 47.70, 761: 49.79, 762: 51.88, 763: 53.97, 764: 56.06, 765: 58.15, 766: 60.24, 767: 62.33, 768: 64.42, 769: 66.51, 770: 68.60, 771: 68.24, 772: 67.88, 773: 67.52, 774: 67.16, 775: 66.80, 776: 66.44, 777: 66.08, 778: 65.72, 779: 65.36, 780: 65.00, 781: 65.10, 782: 65.20, 783: 65.30, 784: 65.40, 785: 65.50, 786: 65.60, 787: 65.70, 788: 65.80, 789: 65.90, 790: 66.00, 791: 65.50, 792: 65.00, 793: 64.50, 794: 64.00, 795: 63.50, 796: 63.00, 797: 62.50, 798: 62.00, 799: 61.50, 800: 61.00, 801: 60.23, 802: 59.46, 803: 58.69, 804: 57.92, 805: 57.15, 806: 56.38, 807: 55.61, 808: 54.84, 809: 54.07, 810: 53.30, 811: 53.86, 812: 54.42, 813: 54.98, 814: 55.54, 815: 56.10, 816: 56.66, 817: 57.22, 818: 57.78, 819: 58.34, 820: 58.90, 821: 59.20, 822: 59.50, 823: 59.80, 824: 60.10, 825: 60.40, 826: 60.70, 827: 61.00, 828: 61.30, 829: 61.60, 830: 61.90 } ILLUM_D_S1 = { 300: 0.02, 301: 0.47, 302: 0.92, 303: 1.36, 304: 1.81, 305: 2.26, 306: 2.71, 307: 3.16, 308: 3.60, 309: 4.05, 310: 4.50, 311: 6.29, 312: 8.08, 313: 9.87, 314: 11.66, 315: 13.45, 316: 15.24, 317: 17.03, 318: 18.82, 319: 20.61, 320: 22.40, 321: 24.36, 322: 26.32, 323: 28.28, 324: 30.24, 325: 32.20, 326: 34.16, 327: 36.12, 328: 38.08, 329: 40.04, 330: 42.00, 331: 41.86, 332: 41.72, 333: 41.58, 334: 41.44, 335: 41.30, 336: 41.16, 337: 41.02, 338: 40.88, 339: 40.74, 340: 40.60, 341: 40.70, 342: 40.80, 343: 40.90, 344: 41.00, 345: 41.10, 346: 41.20, 347: 41.30, 348: 41.40, 349: 41.50, 350: 41.60, 351: 41.24, 352: 40.88, 353: 40.52, 354: 40.16, 355: 39.80, 356: 39.44, 357: 39.08, 358: 38.72, 359: 38.36, 360: 38.00, 361: 38.54, 362: 39.08, 363: 39.62, 364: 40.16, 365: 40.70, 366: 41.24, 367: 41.78, 368: 42.32, 369: 42.86, 370: 43.40, 371: 42.91, 372: 42.42, 373: 41.93, 374: 41.44, 375: 40.95, 376: 40.46, 377: 39.97, 378: 39.48, 379: 38.99, 380: 38.50, 381: 38.15, 382: 37.80, 383: 37.45, 384: 37.10, 385: 36.75, 386: 36.40, 387: 36.05, 388: 35.70, 389: 35.35, 390: 35.00, 391: 35.84, 392: 36.68, 393: 37.52, 394: 38.36, 395: 39.20, 396: 40.04, 397: 40.88, 398: 41.72, 399: 42.56, 400: 43.40, 401: 43.69, 402: 43.98, 403: 44.27, 404: 44.56, 405: 44.85, 406: 45.14, 407: 45.43, 408: 45.72, 409: 46.01, 410: 46.30, 411: 46.06, 412: 45.82, 413: 45.58, 414: 45.34, 415: 45.10, 416: 44.86, 417: 44.62, 418: 44.38, 419: 44.14, 420: 43.90, 421: 43.22, 422: 42.54, 423: 41.86, 424: 41.18, 425: 40.50, 426: 39.82, 427: 39.14, 428: 38.46, 429: 37.78, 430: 37.10, 431: 37.06, 432: 37.02, 433: 36.98, 434: 36.94, 435: 36.90, 436: 36.86, 437: 36.82, 438: 36.78, 439: 36.74, 440: 36.70, 441: 36.62, 442: 36.54, 443: 36.46, 444: 36.38, 445: 36.30, 446: 36.22, 447: 36.14, 448: 36.06, 449: 35.98, 450: 35.90, 451: 35.57, 452: 35.24, 453: 34.91, 454: 34.58, 455: 34.25, 456: 33.92, 457: 33.59, 458: 33.26, 459: 32.93, 460: 32.60, 461: 32.13, 462: 31.66, 463: 31.19, 464: 30.72, 465: 30.25, 466: 29.78, 467: 29.31, 468: 28.84, 469: 28.37, 470: 27.90, 471: 27.54, 472: 27.18, 473: 26.82, 474: 26.46, 475: 26.10, 476: 25.74, 477: 25.38, 478: 25.02, 479: 24.66, 480: 24.30, 481: 23.88, 482: 23.46, 483: 23.04, 484: 22.62, 485: 22.20, 486: 21.78, 487: 21.36, 488: 20.94, 489: 20.52, 490: 20.10, 491: 19.71, 492: 19.32, 493: 18.93, 494: 18.54, 495: 18.15, 496: 17.76, 497: 17.37, 498: 16.98, 499: 16.59, 500: 16.20, 501: 15.90, 502: 15.60, 503: 15.30, 504: 15.00, 505: 14.70, 506: 14.40, 507: 14.10, 508: 13.80, 509: 13.50, 510: 13.20, 511: 12.74, 512: 12.28, 513: 11.82, 514: 11.36, 515: 10.90, 516: 10.44, 517: 9.98, 518: 9.52, 519: 9.06, 520: 8.60, 521: 8.35, 522: 8.10, 523: 7.85, 524: 7.60, 525: 7.35, 526: 7.10, 527: 6.85, 528: 6.60, 529: 6.35, 530: 6.10, 531: 5.91, 532: 5.72, 533: 5.53, 534: 5.34, 535: 5.15, 536: 4.96, 537: 4.77, 538: 4.58, 539: 4.39, 540: 4.20, 541: 3.97, 542: 3.74, 543: 3.51, 544: 3.28, 545: 3.05, 546: 2.82, 547: 2.59, 548: 2.36, 549: 2.13, 550: 1.90, 551: 1.71, 552: 1.52, 553: 1.33, 554: 1.14, 555: 0.95, 556: 0.76, 557: 0.57, 558: 0.38, 559: 0.19, 560: 0.00, 561: -0.16, 562: -0.32, 563: -0.48, 564: -0.64, 565: -0.80, 566: -0.96, 567: -1.12, 568: -1.28, 569: -1.44, 570: -1.60, 571: -1.79, 572: -1.98, 573: -2.17, 574: -2.36, 575: -2.55, 576: -2.74, 577: -2.93, 578: -3.12, 579: -3.31, 580: -3.50, 581: -3.50, 582: -3.50, 583: -3.50, 584: -3.50, 585: -3.50, 586: -3.50, 587: -3.50, 588: -3.50, 589: -3.50, 590: -3.50, 591: -3.73, 592: -3.96, 593: -4.19, 594: -4.42, 595: -4.65, 596: -4.88, 597: -5.11, 598: -5.34, 599: -5.57, 600: -5.80, 601: -5.94, 602: -6.08, 603: -6.22, 604: -6.36, 605: -6.50, 606: -6.64, 607: -6.78, 608: -6.92, 609: -7.06, 610: -7.20, 611: -7.34, 612: -7.48, 613: -7.62, 614: -7.76, 615: -7.90, 616: -8.04, 617: -8.18, 618: -8.32, 619: -8.46, 620: -8.60, 621: -8.69, 622: -8.78, 623: -8.87, 624: -8.96, 625: -9.05, 626: -9.14, 627: -9.23, 628: -9.32, 629: -9.41, 630: -9.50, 631: -9.64, 632: -9.78, 633: -9.92, 634: -10.06, 635: -10.20, 636: -10.34, 637: -10.48, 638: -10.62, 639: -10.76, 640: -10.90, 641: -10.88, 642: -10.86, 643: -10.84, 644: -10.82, 645: -10.80, 646: -10.78, 647: -10.76, 648: -10.74, 649: -10.72, 650: -10.70, 651: -10.83, 652: -10.96, 653: -11.09, 654: -11.22, 655: -11.35, 656: -11.48, 657: -11.61, 658: -11.74, 659: -11.87, 660: -12.00, 661: -12.20, 662: -12.40, 663: -12.60, 664: -12.80, 665: -13.00, 666: -13.20, 667: -13.40, 668: -13.60, 669: -13.80, 670: -14.00, 671: -13.96, 672: -13.92, 673: -13.88, 674: -13.84, 675: -13.80, 676: -13.76, 677: -13.72, 678: -13.68, 679: -13.64, 680: -13.60, 681: -13.44, 682: -13.28, 683: -13.12, 684: -12.96, 685: -12.80, 686: -12.64, 687: -12.48, 688: -12.32, 689: -12.16, 690: -12.00, 691: -12.13, 692: -12.26, 693: -12.39, 694: -12.52, 695: -12.65, 696: -12.78, 697: -12.91, 698: -13.04, 699: -13.17, 700: -13.30, 701: -13.26, 702: -13.22, 703: -13.18, 704: -13.14, 705: -13.10, 706: -13.06, 707: -13.02, 708: -12.98, 709: -12.94, 710: -12.90, 711: -12.67, 712: -12.44, 713: -12.21, 714: -11.98, 715: -11.75, 716: -11.52, 717: -11.29, 718: -11.06, 719: -10.83, 720: -10.60, 721: -10.70, 722: -10.80, 723: -10.90, 724: -11.00, 725: -11.10, 726: -11.20, 727: -11.30, 728: -11.40, 729: -11.50, 730: -11.60, 731: -11.66, 732: -11.72, 733: -11.78, 734: -11.84, 735: -11.90, 736: -11.96, 737: -12.02, 738: -12.08, 739: -12.14, 740: -12.20, 741: -12.00, 742: -11.80, 743: -11.60, 744: -11.40, 745: -11.20, 746: -11.00, 747: -10.80, 748: -10.60, 749: -10.40, 750: -10.20, 751: -9.96, 752: -9.72, 753: -9.48, 754: -9.24, 755: -9.00, 756: -8.76, 757: -8.52, 758: -8.28, 759: -8.04, 760: -7.80, 761: -8.14, 762: -8.48, 763: -8.82, 764: -9.16, 765: -9.50, 766: -9.84, 767: -10.18, 768: -10.52, 769: -10.86, 770: -11.20, 771: -11.12, 772: -11.04, 773: -10.96, 774: -10.88, 775: -10.80, 776: -10.72, 777: -10.64, 778: -10.56, 779: -10.48, 780: -10.40, 781: -10.42, 782: -10.44, 783: -10.46, 784: -10.48, 785: -10.50, 786: -10.52, 787: -10.54, 788: -10.56, 789: -10.58, 790: -10.60, 791: -10.51, 792: -10.42, 793: -10.33, 794: -10.24, 795: -10.15, 796: -10.06, 797: -9.97, 798: -9.88, 799: -9.79, 800: -9.70, 801: -9.56, 802: -9.42, 803: -9.28, 804: -9.14, 805: -9.00, 806: -8.86, 807: -8.72, 808: -8.58, 809: -8.44, 810: -8.30, 811: -8.40, 812: -8.50, 813: -8.60, 814: -8.70, 815: -8.80, 816: -8.90, 817: -9.00, 818: -9.10, 819: -9.20, 820: -9.30, 821: -9.35, 822: -9.40, 823: -9.45, 824: -9.50, 825: -9.55, 826: -9.60, 827: -9.65, 828: -9.70, 829: -9.75, 830: -9.80 } ILLUM_D_S2 = { 300: 0.00, 301: 0.20, 302: 0.40, 303: 0.60, 304: 0.80, 305: 1.00, 306: 1.20, 307: 1.40, 308: 1.60, 309: 1.80, 310: 2.00, 311: 2.20, 312: 2.40, 313: 2.60, 314: 2.80, 315: 3.00, 316: 3.20, 317: 3.40, 318: 3.60, 319: 3.80, 320: 4.00, 321: 4.45, 322: 4.90, 323: 5.35, 324: 5.80, 325: 6.25, 326: 6.70, 327: 7.15, 328: 7.60, 329: 8.05, 330: 8.50, 331: 8.43, 332: 8.36, 333: 8.29, 334: 8.22, 335: 8.15, 336: 8.08, 337: 8.01, 338: 7.94, 339: 7.87, 340: 7.80, 341: 7.69, 342: 7.58, 343: 7.47, 344: 7.36, 345: 7.25, 346: 7.14, 347: 7.03, 348: 6.92, 349: 6.81, 350: 6.70, 351: 6.56, 352: 6.42, 353: 6.28, 354: 6.14, 355: 6.00, 356: 5.86, 357: 5.72, 358: 5.58, 359: 5.44, 360: 5.30, 361: 5.38, 362: 5.46, 363: 5.54, 364: 5.62, 365: 5.70, 366: 5.78, 367: 5.86, 368: 5.94, 369: 6.02, 370: 6.10, 371: 5.79, 372: 5.48, 373: 5.17, 374: 4.86, 375: 4.55, 376: 4.24, 377: 3.93, 378: 3.62, 379: 3.31, 380: 3.00, 381: 2.82, 382: 2.64, 383: 2.46, 384: 2.28, 385: 2.10, 386: 1.92, 387: 1.74, 388: 1.56, 389: 1.38, 390: 1.20, 391: 0.97, 392: 0.74, 393: 0.51, 394: 0.28, 395: 0.05, 396: -0.18, 397: -0.41, 398: -0.64, 399: -0.87, 400: -1.10, 401: -1.04, 402: -0.98, 403: -0.92, 404: -0.86, 405: -0.80, 406: -0.74, 407: -0.68, 408: -0.62, 409: -0.56, 410: -0.50, 411: -0.52, 412: -0.54, 413: -0.56, 414: -0.58, 415: -0.60, 416: -0.62, 417: -0.64, 418: -0.66, 419: -0.68, 420: -0.70, 421: -0.75, 422: -0.80, 423: -0.85, 424: -0.90, 425: -0.95, 426: -1.00, 427: -1.05, 428: -1.10, 429: -1.15, 430: -1.20, 431: -1.34, 432: -1.48, 433: -1.62, 434: -1.76, 435: -1.90, 436: -2.04, 437: -2.18, 438: -2.32, 439: -2.46, 440: -2.60, 441: -2.63, 442: -2.66, 443: -2.69, 444: -2.72, 445: -2.75, 446: -2.78, 447: -2.81, 448: -2.84, 449: -2.87, 450: -2.90, 451: -2.89, 452: -2.88, 453: -2.87, 454: -2.86, 455: -2.85, 456: -2.84, 457: -2.83, 458: -2.82, 459: -2.81, 460: -2.80, 461: -2.78, 462: -2.76, 463: -2.74, 464: -2.72, 465: -2.70, 466: -2.68, 467: -2.66, 468: -2.64, 469: -2.62, 470: -2.60, 471: -2.60, 472: -2.60, 473: -2.60, 474: -2.60, 475: -2.60, 476: -2.60, 477: -2.60, 478: -2.60, 479: -2.60, 480: -2.60, 481: -2.52, 482: -2.44, 483: -2.36, 484: -2.28, 485: -2.20, 486: -2.12, 487: -2.04, 488: -1.96, 489: -1.88, 490: -1.80, 491: -1.77, 492: -1.74, 493: -1.71, 494: -1.68, 495: -1.65, 496: -1.62, 497: -1.59, 498: -1.56, 499: -1.53, 500: -1.50, 501: -1.48, 502: -1.46, 503: -1.44, 504: -1.42, 505: -1.40, 506: -1.38, 507: -1.36, 508: -1.34, 509: -1.32, 510: -1.30, 511: -1.29, 512: -1.28, 513: -1.27, 514: -1.26, 515: -1.25, 516: -1.24, 517: -1.23, 518: -1.22, 519: -1.21, 520: -1.20, 521: -1.18, 522: -1.16, 523: -1.14, 524: -1.12, 525: -1.10, 526: -1.08, 527: -1.06, 528: -1.04, 529: -1.02, 530: -1.00, 531: -0.95, 532: -0.90, 533: -0.85, 534: -0.80, 535: -0.75, 536: -0.70, 537: -0.65, 538: -0.60, 539: -0.55, 540: -0.50, 541: -0.48, 542: -0.46, 543: -0.44, 544: -0.42, 545: -0.40, 546: -0.38, 547: -0.36, 548: -0.34, 549: -0.32, 550: -0.30, 551: -0.27, 552: -0.24, 553: -0.21, 554: -0.18, 555: -0.15, 556: -0.12, 557: -0.09, 558: -0.06, 559: -0.03, 560: 0.00, 561: 0.02, 562: 0.04, 563: 0.06, 564: 0.08, 565: 0.10, 566: 0.12, 567: 0.14, 568: 0.16, 569: 0.18, 570: 0.20, 571: 0.23, 572: 0.26, 573: 0.29, 574: 0.32, 575: 0.35, 576: 0.38, 577: 0.41, 578: 0.44, 579: 0.47, 580: 0.50, 581: 0.66, 582: 0.82, 583: 0.98, 584: 1.14, 585: 1.30, 586: 1.46, 587: 1.62, 588: 1.78, 589: 1.94, 590: 2.10, 591: 2.21, 592: 2.32, 593: 2.43, 594: 2.54, 595: 2.65, 596: 2.76, 597: 2.87, 598: 2.98, 599: 3.09, 600: 3.20, 601: 3.29, 602: 3.38, 603: 3.47, 604: 3.56, 605: 3.65, 606: 3.74, 607: 3.83, 608: 3.92, 609: 4.01, 610: 4.10, 611: 4.16, 612: 4.22, 613: 4.28, 614: 4.34, 615: 4.40, 616: 4.46, 617: 4.52, 618: 4.58, 619: 4.64, 620: 4.70, 621: 4.74, 622: 4.78, 623: 4.82, 624: 4.86, 625: 4.90, 626: 4.94, 627: 4.98, 628: 5.02, 629: 5.06, 630: 5.10, 631: 5.26, 632: 5.42, 633: 5.58, 634: 5.74, 635: 5.90, 636: 6.06, 637: 6.22, 638: 6.38, 639: 6.54, 640: 6.70, 641: 6.76, 642: 6.82, 643: 6.88, 644: 6.94, 645: 7.00, 646: 7.06, 647: 7.12, 648: 7.18, 649: 7.24, 650: 7.30, 651: 7.43, 652: 7.56, 653: 7.69, 654: 7.82, 655: 7.95, 656: 8.08, 657: 8.21, 658: 8.34, 659: 8.47, 660: 8.60, 661: 8.72, 662: 8.84, 663: 8.96, 664: 9.08, 665: 9.20, 666: 9.32, 667: 9.44, 668: 9.56, 669: 9.68, 670: 9.80, 671: 9.84, 672: 9.88, 673: 9.92, 674: 9.96, 675: 10.00, 676: 10.04, 677: 10.08, 678: 10.12, 679: 10.16, 680: 10.20, 681: 10.01, 682: 9.82, 683: 9.63, 684: 9.44, 685: 9.25, 686: 9.06, 687: 8.87, 688: 8.68, 689: 8.49, 690: 8.30, 691: 8.43, 692: 8.56, 693: 8.69, 694: 8.82, 695: 8.95, 696: 9.08, 697: 9.21, 698: 9.34, 699: 9.47, 700: 9.60, 701: 9.49, 702: 9.38, 703: 9.27, 704: 9.16, 705: 9.05, 706: 8.94, 707: 8.83, 708: 8.72, 709: 8.61, 710: 8.50, 711: 8.35, 712: 8.20, 713: 8.05, 714: 7.90, 715: 7.75, 716: 7.60, 717: 7.45, 718: 7.30, 719: 7.15, 720: 7.00, 721: 7.06, 722: 7.12, 723: 7.18, 724: 7.24, 725: 7.30, 726: 7.36, 727: 7.42, 728: 7.48, 729: 7.54, 730: 7.60, 731: 7.64, 732: 7.68, 733: 7.72, 734: 7.76, 735: 7.80, 736: 7.84, 737: 7.88, 738: 7.92, 739: 7.96, 740: 8.00, 741: 7.87, 742: 7.74, 743: 7.61, 744: 7.48, 745: 7.35, 746: 7.22, 747: 7.09, 748: 6.96, 749: 6.83, 750: 6.70, 751: 6.55, 752: 6.40, 753: 6.25, 754: 6.10, 755: 5.95, 756: 5.80, 757: 5.65, 758: 5.50, 759: 5.35, 760: 5.20, 761: 5.42, 762: 5.64, 763: 5.86, 764: 6.08, 765: 6.30, 766: 6.52, 767: 6.74, 768: 6.96, 769: 7.18, 770: 7.40, 771: 7.34, 772: 7.28, 773: 7.22, 774: 7.16, 775: 7.10, 776: 7.04, 777: 6.98, 778: 6.92, 779: 6.86, 780: 6.80, 781: 6.82, 782: 6.84, 783: 6.86, 784: 6.88, 785: 6.90, 786: 6.92, 787: 6.94, 788: 6.96, 789: 6.98, 790: 7.00, 791: 6.94, 792: 6.88, 793: 6.82, 794: 6.76, 795: 6.70, 796: 6.64, 797: 6.58, 798: 6.52, 799: 6.46, 800: 6.40, 801: 6.31, 802: 6.22, 803: 6.13, 804: 6.04, 805: 5.95, 806: 5.86, 807: 5.77, 808: 5.68, 809: 5.59, 810: 5.50, 811: 5.56, 812: 5.62, 813: 5.68, 814: 5.74, 815: 5.80, 816: 5.86, 817: 5.92, 818: 5.98, 819: 6.04, 820: 6.10, 821: 6.14, 822: 6.18, 823: 6.22, 824: 6.26, 825: 6.30, 826: 6.34, 827: 6.38, 828: 6.42, 829: 6.46, 830: 6.50 }