diff options
Diffstat (limited to 'crl')
-rw-r--r-- | crl/__init__.py | 3 | ||||
-rw-r--r-- | crl/assets/diagram_Labstar.png | bin | 0 -> 12916 bytes | |||
-rw-r--r-- | crl/assets/diagram_UVWstar.png | bin | 0 -> 37661 bytes | |||
-rw-r--r-- | crl/assets/diagram_uv.png | bin | 0 -> 25472 bytes | |||
-rw-r--r-- | crl/assets/diagram_uv76.png | bin | 0 -> 25353 bytes | |||
-rw-r--r-- | crl/assets/diagram_xy.png | bin | 0 -> 36174 bytes | |||
-rw-r--r-- | crl/color.py | 566 | ||||
-rw-r--r-- | crl/cri.py | 117 | ||||
-rw-r--r-- | crl/data.py | 121 | ||||
-rw-r--r-- | crl/plots.py | 162 | ||||
-rw-r--r-- | crl/tables2.py | 1005 |
11 files changed, 1974 insertions, 0 deletions
diff --git a/crl/__init__.py b/crl/__init__.py new file mode 100644 index 0000000..bd51612 --- /dev/null +++ b/crl/__init__.py @@ -0,0 +1,3 @@ +from crl.color import * +from crl.plots import chromaticity_diagram, plot_data +from crl.cri import cri_Ra, cri_GAI, cri_FSI, cri_FSCI diff --git a/crl/assets/diagram_Labstar.png b/crl/assets/diagram_Labstar.png Binary files differnew file mode 100644 index 0000000..58e97a7 --- /dev/null +++ b/crl/assets/diagram_Labstar.png diff --git a/crl/assets/diagram_UVWstar.png b/crl/assets/diagram_UVWstar.png Binary files differnew file mode 100644 index 0000000..de2629f --- /dev/null +++ b/crl/assets/diagram_UVWstar.png diff --git a/crl/assets/diagram_uv.png b/crl/assets/diagram_uv.png Binary files differnew file mode 100644 index 0000000..d43587e --- /dev/null +++ b/crl/assets/diagram_uv.png diff --git a/crl/assets/diagram_uv76.png b/crl/assets/diagram_uv76.png Binary files differnew file mode 100644 index 0000000..ec4f577 --- /dev/null +++ b/crl/assets/diagram_uv76.png diff --git a/crl/assets/diagram_xy.png b/crl/assets/diagram_xy.png Binary files differnew file mode 100644 index 0000000..1f1a092 --- /dev/null +++ b/crl/assets/diagram_xy.png diff --git a/crl/color.py b/crl/color.py new file mode 100644 index 0000000..d6240ff --- /dev/null +++ b/crl/color.py @@ -0,0 +1,566 @@ +import numpy as np, scipy.interpolate, scipy.optimize +import crl.tables as tables +import crl.tables2 as tables2 + +class Spectrum: + def __init__(self, X, Y): + self.X = X + self.Y = Y + self.Yi = scipy.interpolate.interp1d(self.X, self.Y, \ + "linear", fill_value=0, bounds_error=False) + + def dot(A, B, Xmin=380, Xmax=780, Xstep=0.01): + if not isinstance(B, Spectrum): + raise TypeError("B is an instance of %s, not Spectrum" \ + % type(B)) + + if isinstance(A, PointSpectrum): + if isinstance(B, PointSpectrum): + raise TypeError("dotting two instances of PointSpectum isn't supported") + # ^ could be, but who cares? + return B.dot(A) + + if isinstance(B, PointSpectrum): + return A.Yi(B.x_0) * B.S + + X = np.arange(Xmin, Xmax, Xstep) + dX = X[1] - X[0] + return dX * np.sum(A.Yi(X) * B.Yi(X)) + + def normed(self, norm=100): + return NormedSpectrum(self, norm) + + def __str__(self): + return "a tabulated Spectrum" + +class NormedSpectrum(Spectrum): + def __init__(self, spec, norm=100): + self.spec = spec + + _, Y, _ = XYZ(self.spec) + self.factor = norm / Y + + def Yi(self, wvl): + return self.factor * self.spec.Yi(wvl) + + def __repr__(self): + return "NormedSpectrum(" + repr(self.spec) + ")" + + def __str__(self): + return "normed " + str(self.spec) + +class PointSpectrum(Spectrum): + # the "S" stands for "sum" (being the integral of the Dirac delta) + def __init__(self, x_0, S=1): + self.x_0 = x_0 + self.S = S + + # a crappy hack for easy plotting + self.X = np.array([380, x_0 - 0.001, x_0, x_0 + 0.001, 780]) + self.Y = np.array([0, 0, S, 0, 0]) + + def __repr__(self): + return "PointSpectrum(x_0=%g, S=%g)" % (self.x_0, self.S) + + def __str__(self): + return self.__repr__() + +class BlackBodySpectrum(Spectrum): + def __init__(self, T): + self.T = T + + def Yi(self, wvl): + h = 6.62607015e-34 # kg m^2 / s + c = 299792458 # m / s + k_B = 1.3806485e-23 # kg m^2 / K s^2 + return 2 * h * c ** 2 / ((wvl / 1e9) ** 5) \ + / (np.exp(h * c / (wvl / 1e9 * k_B * self.T)) - 1) \ + * 1e-9 # kg / (nm s^3) + + def __repr__(self): + return "BlackBodySpectrum(T=%g)" % self.T + + def __str__(self): + return repr(self) + +# Schanda, page 41 +class CIEDaylightSpectrum(Spectrum): + S0 = Spectrum(tables.D_eigenvectors[:, 0], tables.D_eigenvectors[:, 1]) + S1 = Spectrum(tables.D_eigenvectors[:, 0], tables.D_eigenvectors[:, 2]) + S2 = Spectrum(tables.D_eigenvectors[:, 0], tables.D_eigenvectors[:, 3]) + + def __init__(self, T): + if T < 4000 or T > 25000: + raise ValueError("D illuminants are not defined for CCTs outside the 4000 K-25000 K range") + elif T <= 7000: + x = -4.6070e9 / T**3 \ + + 2.9678e6 / T**2 \ + + 0.09911e3 / T \ + + 0.244063 + else: + x = -2.0064e9 / T**3 \ + + 1.9018e6 / T**2 \ + + 0.0247483 / T \ + + 0.237040 + + y = -3 * x**2 + 2.870 * x - 0.275 + + self.M1 = (-1.3515 - 1.7703 * x + 5.9114 * y) \ + / (0.0241 + 0.2562 * x - 0.7341 * y) + self.M2 = (0.0300 - 31.4424 * x + 30.0717 * y) \ + / (0.0241 + 0.2562 * x - 0.7341 * y) + + self.M1 = round(self.M1, 3) + self.M2 = round(self.M2, 3) + + def Yi(self, wvl): + return self.S0.Yi(wvl) \ + + self.M1 * self.S1.Yi(wvl) \ + + self.M2 * self.S2.Yi(wvl) + +class CombinedSpectrum(Spectrum): + def __init__(self, A, B): + self.A = A + self.B = B + + def Yi(self, X): + return self.A.Yi(X) * self.B.Yi(X) + + def __repr__(self): + return "CombinedSpectrum(%s, %s)" % (repr(self.A), repr(self.B)) + +def combine_spectra(A, B): + if isinstance(B, PointSpectrum): + A, B = B, A + + if isinstance(A, PointSpectrum): + if isinstance(B, PointSpectrum): + # technically this would make sense but would be pretty useless + raise TypeError("can't combine two instances of PointSpectrum") + + return PointSpectrum(A.x_0, A.S * B.Ef(A.x_0)) + + return CombinedSpectrum(A, B) + +# +# Tables, standard observers, basic colors +# + +class Illuminants: + # 0 l,nm + # 1 Standard Illuminant A + # 2 Standard Illuminant D65 + # 3 Illuminant C + # 4 IlluminantD50 + # 5 IlluminantD55 + # 6 IlluminantD75 + A = Spectrum(tables.illuminants[:, 0], tables.illuminants[:, 1]) + D50 = Spectrum(tables.illuminants[:, 0], tables.illuminants[:, 4]) + D55 = Spectrum(tables.illuminants[:, 0], tables.illuminants[:, 5]) + D65 = Spectrum(tables.illuminants[:, 0], tables.illuminants[:, 2]) + D75 = Spectrum(tables.illuminants[:, 0], tables.illuminants[:, 6]) + + _wvl = np.linspace(380, 780, 801) + _E = np.ones(_wvl.size) + E = Spectrum(_wvl, _E) + + _E = np.zeros(_wvl.size) + _E[120] = 3 # 440 nm + _E[376] = 5 # 568 nm + RedmanTest1 = Spectrum(_wvl, _E) # 6500K, CRI -12 + +class Observer: + def __init__(self, name, wvl, cmf_x, cmf_y, cmf_z): + self.name = name + self.cmf_x = Spectrum(wvl, cmf_x) + self.cmf_y = Spectrum(wvl, cmf_y) + self.cmf_z = Spectrum(wvl, cmf_z) + + def __str__(self): + return self.name + +Observer_2deg = Observer("2-deg Standard Observer", + *(tables.cmf[:, i] for i in range(4))) +Observer_10deg = Observer("10-deg Standard Observer", + *(tables.cmf_1964[:, i] for i in range(4))) + +class Color: + full_name = "Color" + observer = Observer_2deg + + # Call either: + # __init__(self, x, y, z) + # __init__(self, color) + # __init__(self, spectrum) + def __init__(self, *args, **kwargs): + observer = kwargs.get("observer", Observer_2deg) + + if len(args) == 3: + self.array = np.array(args) + elif len(args) == 1: + if isinstance(args[0], Color): + self.array = args[0].to(self).array + elif isinstance(args[0], Spectrum): + self.array = self.from_spectrum(args[0], observer).array + else: + raise TypeError("argument is not a Color or a Spectrum") + else: + raise TypeError("bad number of arguments") + + def __repr__(self): + return "%s(%g, %g, %g)" % (type(self).__name__, *self) + + def __str__(self): + return "%s (%g, %g, %g), %s" % (self.full_name, *self, + self.observer) + + @classmethod + def from_spectrum(cls, S, observer): + return cls.from_XYZ(XYZ.from_spectrum(S, observer)) + + def to(self, CS): + return CS.from_XYZ(self.to_XYZ()) + + @staticmethod + def from_XYZ(C): + raise NotImplementedError + + def to_XYZ(C): + raise NotImplementedError + + def __getitem__(self, index): + return self.array[index] + + def __setitem__(self, index, value): + self.array[index] = value + + def __iter__(self): + return self.array.__iter__() + + def __add__(A, B): + return type(A)(*(A.array + B.array)) + +class sRGB(Color): + full_name = "sRGB" + matrix = np.array([ + [ 3.240479, -1.537150, -0.498353], + [-0.969256, 1.875992, 0.041556], + [ 0.055648, -0.204043, 1.057331]]) + matrix_inverse = np.linalg.inv(matrix) + + @classmethod + def from_XYZ(cls, C): + def gamma(x): + if x <= 0.0031308: + return 12.92 * x + return 1.055 * x ** (1 / 2.4) - 0.055 + + RGB = np.dot(cls.matrix, C.array) + return sRGB(*[gamma(x) for x in RGB]) + + def to_XYZ(self): + def gamma_inverse(x): + if x <= 0.040449936: + return x / 12.92; + return ((x + 0.055) / 1.055) ** 2.4 + + RGB = [gamma_inverse(x) for x in self] + return XYZ(*np.dot(self.matrix_inverse, RGB)) + +class sRGB100(sRGB): + full_name = "sRGB (with Y=100 as white)" + matrix = 0.01 * sRGB.matrix + matrix_inverse = np.linalg.inv(matrix) + +# +# CIE 1931 +# + +class XYZ(Color): + full_name = "CIE 1931 XYZ" + + @staticmethod + def from_XYZ(C): + return C + + def to_XYZ(self): + return self + + @staticmethod + def from_spectrum(S, observer): + X = S.dot(observer.cmf_x) + Y = S.dot(observer.cmf_y) + Z = S.dot(observer.cmf_z) + return XYZ(X, Y, Z) + + def normed(self, norm=100): + X, Y, Z = self + return XYZ(X * norm / Y, norm, Z * norm / Y) + +class xyY(Color): + full_name = "CIE 1931 xyY" + + @staticmethod + def from_XYZ(C): + x = C[0] / sum(C) + y = C[1] / sum(C) + return xyY(x, y, C[1]) + + def to_XYZ(self): + x, y, Y = self + try: + X = Y / y * x + Z = Y / y * (1 - x - y) + except ZeroDivisionError: + X = 0 + Z = 0 + return XYZ(X, Y, Z) + +# +# CIE 1960 +# + +class UVW(Color): + full_name = "CIE 1960 UCS (McAdam) UVW" + + @staticmethod + def from_XYZ(C): + X, Y, Z = C + U = 2 * X / 3 + V = Y + W = 1/2 * (-X + 3 * Y + Z) + return UVW(U, V, W) + + def to_XYZ(self): + U, V, W = self + X = 3/2 * U + Y = V + Z = 3/2 * U - 3 * V + 2 * W + return XYZ(X, Y, Z) + + def to_uvY(self): + U, V, W = self + u = U / sum(UVW) + v = V / sum(UVW) + return uvY(u, v, V) + +class uvY(Color): + full_name = "CIE 1960 uvY" + + @staticmethod + def from_XYZ(C): + X, Y, Z = C + u = 4 * X / (X + 15 * Y + 3 * Z) + v = 6 * Y / (X + 15 * Y + 3 * Z) + return uvY(u, v, Y) + + def to_UVW(self): + u, v, V = self + try: + U = V * u / v + W = -(V * v + V * u - V) / v + except ZeroDivisionError: + U = 0 + W = 0 + return UVW(U, V, W) + + def to_XYZ(self): + return self.to_UVW().to_XYZ() + +# +# CIE 1964 +# + +class UVWstar(Color): + full_name = "CIE 1964 U*V*W*" + + @classmethod + def from_uvY(cls, C, CAT=True): + u, v, Y = C + un, vn, _ = cls.white_uvY if CAT else (0, 0, 0) + + Wstar = 25 * Y ** (1/3) - 17 + Ustar = 13 * Wstar * (u - un) + Vstar = 13 * Wstar * (v - vn) + + return cls(Ustar, Vstar, Wstar) + + @classmethod + def from_XYZ(cls, C): + return cls.from_uvY(C.to(uvY)) + + def to_uvY(self, CAT=True): + Ustar, Vstar, Wstar = self + un, vn, _ = self.white_uvY if CAT else (0, 0, 0) + + u = Ustar / (13 * Wstar) + un + v = Vstar / (13 * Wstar) + vn + Y = (Wstar**3 + 51 * Wstar**2 + 867 * Wstar + 4913) / 15625 + + return uvY(u, v, Y) + + def to_XYZ(self): + return self.to_uvY().to(XYZ) + + + +# +# CIE 1976 +# + +class uvY76(Color): + full_name = "CIE 1976 u'v'Y" + + @staticmethod + def from_XYZ(C): + X, Y, Z = C + u = 4 * X / (X + 15 * Y + 3 * Z) + v = 9 * Y / (X + 15 * Y + 3 * Z) + return uvY76(u, v, Y) + + def to_XYZ(self): + u, v, Y = self + X = 9 * u / (4 * v) * Y + Z = (12 - 3 * u - 20 * v) / (4 * v) * Y + return XYZ(X, Y, Z) + +# The magic CIE 1976 function for mapping Y to L* +def CIE1976_f(t): + if t > (6/29) ** 3: + return t ** (1/3) + + return 841 * t / 108 + 4/29 + +# The inverse of the above +def CIE1976_f_inverse(t): + if t > 6/29: + return t ** 3 + + return (3132 * t - 432) / 24389 + +class Luvstar(Color): + full_name = "CIE 1976 L*u*v*" + + @classmethod + def from_uvY76(cls, C): + u, v, Y = C + un, vn, Yn = cls.white_uvY76 + + Lstar = 116 * CIE1976_f(Y / Yn) - 16 + ustar = 13 * Lstar * (u - un) + vstar = 13 * Lstar * (v - vn) + + return cls(Lstar, ustar, vstar) + + @classmethod + def from_XYZ(cls, C): + return cls.from_uvY76(C.to(uvY76)) + + def to_uvY76(self): + Lstar, ustar, vstar = self + un, vn, Yn = self.white_uvY76 + + u = ustar / (13 * Lstar) + un + v = vstar / (13 * Lstar) + vn + Y = Yn * CIE1976_f_inverse((Lstar + 16) / 116) + + return uvY76(u, v, Y) + + def to_XYZ(self): + return self.to_uvY76().to_XYZ() + +class Labstar(Color): + full_name = "CIE 1976 L*a*b*" + + @classmethod + def from_XYZ(cls, C): + X, Y, Z = C + Xn, Yn, Zn = cls.white + + Lstar = 116 * CIE1976_f(Y / Yn) - 16 + astar = 500 * (CIE1976_f(X / Xn) - CIE1976_f(Y / Yn)) + bstar = 200 * (CIE1976_f(Y / Yn) - CIE1976_f(Z / Zn)) + + return cls(Lstar, astar, bstar) + + def to_XYZ(self): + Lstar, astar, bstar = self + Xn, Yn, Zn = self.white + + X = Xn * CIE1976_f_inverse(astar / 500 + (Lstar + 16) / 116) + Y = Yn * CIE1976_f_inverse((Lstar + 16) / 116) + Z = Zn * CIE1976_f_inverse(-bstar / 200 + (Lstar + 16) / 116) + + return XYZ(X, Y, Z) + +# +# Some useful predefined color spaces +# + +class UVWstarD65(UVWstar): + white_uvY = uvY(Illuminants.D65) + +class LuvstarD65(Luvstar): + white_uvY76 = uvY76(Illuminants.D65) + +class LabstarD65(Labstar): + white = XYZ(Illuminants.D65).normed() + +class UVstarNormed(Color): + full_name = "CIE 1964 U*V*W*, normed (plots only!)" + + @staticmethod + def from_UVWstar(C): + if not issubclass(type(C), UVWstar): + raise TypeError(f"{type(C)} is not a subclass of UVWstar") + + Ustar, Vstar, Wstar = C + + Unorm = Ustar / Wstar + Vnorm = Vstar / Wstar + + return UVstarNormed(Unorm, Vnorm, Wstar) + + @staticmethod + def from_XYZ(C): + raise NotImplementedError("use the from_UVWstar method directly") + + def to_UVWstar(self): + Unorm, Vnorm, Wstar = self + + Ustar = Unorm * Wstar + Vstar = Vnorm * Wstar + + return UVWstarD65(Ustar, Vstar, Wstar) + + def to_XYZ(self): + return self.to_UVWstar().to_XYZ() + +class UVstarNormedD65(UVstarNormed): + @staticmethod + def from_XYZ(C): + return UVstarNormedD65.from_UVWstar(UVWstarD65(C)) + +# +# CCT +# + +def cct(C): + u, v, _ = uvY(C) + uv = np.array([u, v]) + + uv_planck = scipy.interpolate.interp1d( + tables2.locus_uv[:, 0], tables2.locus_uv[:, 1:3], axis=0, + bounds_error=False, fill_value="extrapolate") + + def delta(T): + return np.linalg.norm(uv_planck(T) - uv) + + res = scipy.optimize.minimize_scalar(delta, bounds=[1000, 20000]) + return res.x, res.fun + +def cct_McCamy(C): + x, y, _ = xyY(C) + + n = (x - 0.3320) / (y - 0.1858) + return -449 * n**3 + 3525 * n**2 - 6823.3 * n + 5520.33 diff --git a/crl/cri.py b/crl/cri.py new file mode 100644 index 0000000..af62b1f --- /dev/null +++ b/crl/cri.py @@ -0,0 +1,117 @@ +import numpy as np +import scipy.spatial +import crl.color as color +import crl.tables as tables + +class CRIError(Exception): + pass + +class CRIResult: + def __init__(self, method_name): + self.method_name = method_name + self.SCRIs = [] + self.tcs = [] + self.tcs_ref = [] + + def __str__(self): + ret = f"CRI result for {self.method_name}\n" + ret += f"\tXYZ = {self.XYZ}\n" + ret += f"\tCCT = {self.CCT} K (delta uv = {self.duv})\n" + SCRIs = ", ".join("%.1f" % SCRI for SCRI in self.SCRIs) + ret += f"\tSCRIs = [{SCRIs}]\n" + ret += f"\tCRI = {self.CRI}" + return ret + +def CAT(sample, ref, test): + def c(u, v, _): + return (4 - u - 10 * v) / v + def d(u, v, _): + return (1.708 * v - 1.481 * u + 0.404) / v + + cs, ds = c(*sample), d(*sample) + cr, dr = c(*ref), d(*ref) + ct, dt = c(*test), d(*test) + + u = (10.872 + 0.404 * cr / ct * cs - 4 * dr / dt * ds) \ + / (16.518 + 1.481 * cr / ct * cs - dr / dt * ds) + v = 5.52 / (16.518 + 1.481 * cr / ct * cs - dr / dt * ds) + + return color.uvY(u, v, sample[2]) + +def cri_Ra(S, observer=color.Observer_2deg, ignore_errors=False): + res = CRIResult("CRI Ra") + res.S = S.normed() + res.XYZ = color.XYZ(res.S, observer=observer) + res.CCT, res.duv = color.cct(res.XYZ) + + if res.duv > 5e-2 and not ignore_errors: + raise CRIError(f"spectrum not white enough with delta uv = {res.duv}") + + if res.CCT < 5000: + white = color.BlackBodySpectrum(res.CCT).normed() + else: + if res.CCT > 25000 and ignore_errors: + res.CCT = 25000 + white = color.CIEDaylightSpectrum(res.CCT).normed() + + res.XYZ_ref = color.XYZ(white, observer=observer) + + class UVWstarRef(color.UVWstar): + white_uvY = color.uvY(white, observer=observer) + + class UVWstar(color.UVWstar): + white_uvY = color.uvY(S, observer=observer) + + for i in range(14): + tcs = color.Spectrum(tables.tcs_ra[:, 0], tables.tcs_ra[:, 1 + i]) + + lit = color.uvY(color.CombinedSpectrum(tcs, res.S)) + lit = CAT(lit, UVWstarRef.white_uvY, UVWstar.white_uvY) + lit = UVWstarRef(lit) + lit_ref = UVWstarRef(color.CombinedSpectrum(tcs, white), observer=observer) + + res.tcs.append(lit) + res.tcs_ref.append(lit_ref) + + dE = np.linalg.norm(lit.array - lit_ref.array) + res.SCRIs.append(100 - 4.6 * dE) + + res.CRI = np.mean(res.SCRIs[:8]) + res.ECRI = np.mean(res.SCRIs) + return res + +def cri_GAI(spec, observer=color.Observer_2deg): + points = [] + for i in range(8): + tcs = color.Spectrum(color.tables.tcs_ra[:, 0], color.tables.tcs_ra[:, 1 + i]) + u, v, _ = color.uvY76(color.CombinedSpectrum(tcs, spec), observer=observer) + points.append([u, v]) + points = np.array(points) + hull = scipy.spatial.ConvexHull(points) + + # The magic number is the hull.volume of the E illuminant + GAI = hull.volume * 100 / 0.007351716795637625 + + return GAI, hull.points[hull.vertices] + +def cri_FSI(spec): + wvl = np.arange(380, 730, 1) + Y = spec.Yi(wvl) + dwvl = wvl[1] - wvl[0] + Y = spec.Yi(wvl) + Y /= np.sum(Y * dwvl) + + CEE = (wvl - 380) / (730 - 380) + + Is = [] + for i, _ in enumerate(wvl): + C = np.cumsum(Y * dwvl) + D = (C - CEE) ** 2 + Is.append(sum(D * dwvl)) + Y = np.roll(Y, 1) + + FSI = np.mean(Is) + return FSI + +def cri_FSCI(spec): + return 100 - 5.1 * cri_FSI(spec) diff --git a/crl/data.py b/crl/data.py new file mode 100644 index 0000000..69d69e2 --- /dev/null +++ b/crl/data.py @@ -0,0 +1,121 @@ +import re +import numpy as np + +class LoadError(Exception): + pass + + + + +def identify(contents): + if contents.startswith(b"SpectraSuite Data File"): + return "spectrasuite" + elif b"created by Plot Digitizer" in contents: + return "Plot Digitizer" + else: + return "unknown" + +def identify_csv(line): + line = line.strip().rstrip() + + point = "," + delim = "\s+" + + if "." in line: + point = "." + if "," in line: + delim = "," + + num_cols = len(re.findall(delim, line)) + 1 + if line[-1] == delim: + num_cols -= 1 + + re_int = "([\+-]?\d+)" + re_frac = "%s?(\d*)" % point + re_exp = "[eE]?([\+-]?\d*)" + + regex = delim.join([re_int + re_frac + re_exp] * num_cols) + + return num_cols, re.compile(regex) + +def parse_csv(lines): + num_cols, regex = identify_csv(lines[0]) + + data = np.empty((len(lines), num_cols), dtype="float") + + for i, line in enumerate(lines): + if not len(line.strip()): + continue + + rv = regex.match(line) + for j in range(num_cols): + str_int = rv.group(3 * j + 1) + str_frac = rv.group(3 * j + 2) + str_exp = rv.group(3 * j + 3) + + fint = float(str_int) + frac = float(str_frac) * 10 ** (-len(str_frac)) + if fint < 0: + frac = -frac + + if str_exp != "": + number = (fint + frac) * 10 ** (int(str_exp)) + else: + number = fint + frac + + data[i, j] = number + + return data + +re_spectrasuite_marker = re.compile("^>>>>>(.*)<<<<<") + +def parse_spectrasuite(lines): + data_start = None + data_end = None + + for i, line in enumerate(lines): + rv = re_spectrasuite_marker.match(line) + if rv is not None: + marker = rv.group(1) + + if marker == "Begin Processed Spectral Data": + data_start = i + 1 + elif marker == "End Processed Spectral Data": + data_end = i + + if data_start is None: + raise ValueError("Missing 'Begin Processed Spectral Data'") + if data_end is None: + raise ValueError("Missing 'End Processed Spectral Data'") + + return parse_csv(lines[data_start:data_end]) + +def parse_plot_digitizer(lines): + return parse_csv(lines[6:]) + +def load(path): + with open(path, "rb") as fd: + contents = fd.read() + + fmt = identify(contents) + + try: + lines = [line.decode("ascii") for line in contents.split(b"\n")] + except UnicodeDecodeError: + raise LoadError("This non-ASCII data format isn't supported") + + if fmt == "spectrasuite": + try: + return parse_spectrasuite(lines) + except Exception as exc: + raise LoadError("This SpectraSuite file couldn't be understood") + elif fmt == "Plot Digitizer": + try: + return parse_plot_digitizer(lines) + except Exception as exc: + raise LoadError("This Plot Digitizer file couldn't be understood") + else: + try: + return parse_csv(lines) + except Exception as exc: + raise LoadError("This data format isn't supported") diff --git a/crl/plots.py b/crl/plots.py new file mode 100644 index 0000000..81cde0c --- /dev/null +++ b/crl/plots.py @@ -0,0 +1,162 @@ +import numpy as np, PIL, os +from matplotlib import pyplot as plt, rcParams +from crl.color import * + +def assets(path): + return os.path.join(os.path.dirname(__file__), "assets", path) + +plot_data = { + xyY: { + "diagram_path": assets("diagram_xy.png"), + "diagram_bounds": [0, 0.75, 0, 0.85], + "xlabel": "$x$", + "ylabel": "$y$" + }, + uvY: { + "diagram_path": assets("diagram_uv.png"), + "diagram_bounds": [0, 0.7, 0, 0.4], + "xlabel": "$u$", + "ylabel": "$v$" + }, + uvY76: { + "diagram_path": assets("diagram_uv76.png"), + "diagram_bounds": [0, 0.65, 0, 0.63], + "xlabel": "$u'$", + "ylabel": "$v'$" + }, + UVstarNormedD65: { + "diagram_path": assets("diagram_UVWstar.png"), + "diagram_bounds": [-2.6, 5.6, -4, 1.1], + "xlabel": "$\\frac{U^*}{W^*}$", + "ylabel": "$\\frac{V^*}{W^*}$" + }, + LabstarD65: { + "diagram_path": assets("diagram_Labstar.png"), + "diagram_bounds": [-50, 50, -50, 50], + "xlabel": "$a^*$", + "ylabel": "$b^*$" + } +} + +def draw_isotherm(ax, CS, x, y, T, plot_space_scale, labels, label_scale): + u0, v0, _ = uvY(BlackBodySpectrum(T)) + ut, vt, _ = uvY(BlackBodySpectrum(T + 100)) # t stands for 'tangent' + duv = np.array([ut - u0, vt - v0]) + du, dv = np.matmul([[0, -1], [1, 0]], duv) # rotate 90 degrees + + annotate = False + X, Y = [], [] + for sign in [-1, 1]: + xp, yp, _ = CS.from_XYZ(uvY( + u0 + sign * du, + v0 + sign * dv, 1).to_XYZ()) + + dxy = np.array([xp - x, yp - y]) + + if T % 1000 == 500: + size = 0.006 + elif T <= 5000 or T == 10000: + size = 0.02 + annotate = True + else: + size = 0.012 + + dxy *= plot_space_scale * size / np.linalg.norm(dxy) + + X.append(x + dxy[0]) + Y.append(y + dxy[1]) + + ax.plot(X, Y, "k-", linewidth=1) + + if labels and annotate: + save = rcParams['font.size'] + rcParams['font.size'] *= label_scale + ax.annotate("%d" % T, xy=(X[1], Y[1]), + horizontalalignment="left", + verticalalignment="top") + rcParams['font.size'] = save + + +def chromaticity_diagram(CS, label_scale=1/1.5, ax=plt, + pures=True, pures_labels=True, + locus=True, isotherms=False, + isotherm_labels = False, isotherm_label_scale=1/1.7): + if CS not in plot_data: + raise ValueError("color triangle plots for %s are not supported" % CS.full_name) + + if CS == LabstarD65: + # These won't work in L*a*b* + pures = False + locus = False + + if not hasattr(CS, "diagram_image"): + img = PIL.Image.open(plot_data[CS]["diagram_path"]) + img.load() + CS.diagram_image = np.asarray(img, dtype="float") / 255 + + ax.imshow(CS.diagram_image, extent=plot_data[CS]["diagram_bounds"], \ + interpolation="bilinear") + + save = rcParams['font.size'] + rcParams['font.size'] *= label_scale + + plot_space_scale = 10 if CS == UVstarNormed else 1 + + if pures: + wvls = np.linspace(380, 780, 300) + outline = np.array([[*CS(PointSpectrum(wvl))] for wvl in wvls]) + ax.plot(outline[:, 0], outline[:, 1], 'k') + + def tick(wvl, l, label=False): + x, y, _ = CS(PointSpectrum(wvl)) + xe, ye, _ = CS(PointSpectrum(wvl + 5)) + l *= plot_space_scale + + dx = np.array([xe - x, ye - y]) + dx *= l / np.linalg.norm(dx) + dx = np.matmul([[0, -1], [1, 0]], dx) + + ax.plot((x, x + dx[0]), (y, y + dx[1]), 'k-') + + if pures_labels and label: + ax.annotate("%d" % wvl, (x, y), + xytext=np.array([x, y]) + dx * 2, + horizontalalignment="center", + verticalalignment="center") + + L = [380, 460, 470, 480, 490, 500, 520, 540, 560, 580, 600, 620] + + for wvl in range(400, 680, 5): + if wvl not in L: + if wvl % 10 == 0: + tick(wvl, 0.012) + else: + tick(wvl, 0.007) + for wvl in L: + tick(wvl, 0.02, True) + + if locus: + x = np.zeros(50) + y = np.zeros(np.size(x)) + for i in range(np.size(x)): + T = 1000 * 20 ** (i / (np.size(x) - 1)) + x[i], y[i], _ = CS(BlackBodySpectrum(T)) + ax.plot(x, y, "k-", linewidth=1) + + if type(isotherms) == list: + Ts = isotherms + else: + Ts = range(2000, 10001, 500) + for T in Ts: + x, y, _ = CS(BlackBodySpectrum(T)) + + if isotherms: + draw_isotherm(ax, CS, x, y, T, plot_space_scale, + isotherm_labels, isotherm_label_scale) + else: + ax.plot(x, y, "ko", markersize=2) + + rcParams['font.size'] = save + + ax.xlabel(plot_data[CS]["xlabel"]) + ax.ylabel(plot_data[CS]["ylabel"]) diff --git a/crl/tables2.py b/crl/tables2.py new file mode 100644 index 0000000..1f7a661 --- /dev/null +++ b/crl/tables2.py @@ -0,0 +1,1005 @@ +# TODO: autogenerate this file too +import numpy as np + +locus_uv = np.array([ + [1000, 0.447955, 0.35463, 3.93337e+06], + [1019.02, 0.443549, 0.355009, 6.10098e+06], + [1038.04, 0.439231, 0.355375, 9.31914e+06], + [1057.06, 0.435001, 0.355728, 1.40294e+07], + [1076.08, 0.430858, 0.356067, 2.08309e+07], + [1095.1, 0.4268, 0.356392, 3.05271e+07], + [1114.11, 0.422826, 0.356704, 4.41825e+07], + [1133.13, 0.418935, 0.357003, 6.31923e+07], + [1152.15, 0.415125, 0.357289, 8.93662e+07], + [1171.17, 0.411394, 0.357561, 1.25028e+08], + [1190.19, 0.407741, 0.357821, 1.73133e+08], + [1209.21, 0.404165, 0.358067, 2.37408e+08], + [1228.23, 0.400664, 0.358301, 3.22511e+08], + [1247.25, 0.397236, 0.358522, 4.34215e+08], + [1266.27, 0.39388, 0.358731, 5.79624e+08], + [1285.29, 0.390594, 0.358927, 7.67411e+08], + [1304.3, 0.387377, 0.35911, 1.00809e+09], + [1323.32, 0.384226, 0.359282, 1.31433e+09], + [1342.34, 0.381141, 0.359442, 1.70127e+09], + [1361.36, 0.37812, 0.35959, 2.18693e+09], + [1380.38, 0.375162, 0.359726, 2.79261e+09], + [1399.4, 0.372264, 0.359851, 3.54332e+09], + [1418.42, 0.369426, 0.359965, 4.46833e+09], + [1437.44, 0.366646, 0.360068, 5.60166e+09], + [1456.46, 0.363923, 0.36016, 6.98265e+09], + [1475.48, 0.361255, 0.360242, 8.65665e+09], + [1494.49, 0.358641, 0.360313, 1.06756e+10], + [1513.51, 0.35608, 0.360373, 1.30988e+10], + [1532.53, 0.35357, 0.360424, 1.59936e+10], + [1551.55, 0.35111, 0.360465, 1.94362e+10], + [1570.57, 0.3487, 0.360496, 2.35125e+10], + [1589.59, 0.346337, 0.360518, 2.83191e+10], + [1608.61, 0.344021, 0.360531, 3.39639e+10], + [1627.63, 0.34175, 0.360534, 4.05672e+10], + [1646.65, 0.339523, 0.360529, 4.82628e+10], + [1665.67, 0.33734, 0.360515, 5.71988e+10], + [1684.68, 0.335199, 0.360493, 6.75387e+10], + [1703.7, 0.3331, 0.360462, 7.94625e+10], + [1722.72, 0.331041, 0.360424, 9.31676e+10], + [1741.74, 0.329021, 0.360377, 1.0887e+11], + [1760.76, 0.327039, 0.360323, 1.26806e+11], + [1779.78, 0.325095, 0.360261, 1.47232e+11], + [1798.8, 0.323187, 0.360193, 1.70427e+11], + [1817.82, 0.321316, 0.360117, 1.96692e+11], + [1836.84, 0.319479, 0.360034, 2.26354e+11], + [1855.86, 0.317676, 0.359944, 2.59765e+11], + [1874.87, 0.315906, 0.359848, 2.97301e+11], + [1893.89, 0.314169, 0.359746, 3.3937e+11], + [1912.91, 0.312464, 0.359638, 3.86405e+11], + [1931.93, 0.31079, 0.359523, 4.38871e+11], + [1950.95, 0.309146, 0.359403, 4.97263e+11], + [1969.97, 0.307531, 0.359276, 5.62108e+11], + [1988.99, 0.305946, 0.359145, 6.33966e+11], + [2008.01, 0.304388, 0.359008, 7.13432e+11], + [2027.03, 0.302859, 0.358866, 8.01135e+11], + [2046.05, 0.301356, 0.358719, 8.9774e+11], + [2065.07, 0.29988, 0.358567, 1.00395e+12], + [2084.08, 0.29843, 0.35841, 1.1205e+12], + [2103.1, 0.297005, 0.358249, 1.24818e+12], + [2122.12, 0.295605, 0.358083, 1.38779e+12], + [2141.14, 0.294229, 0.357913, 1.5402e+12], + [2160.16, 0.292876, 0.357739, 1.7063e+12], + [2179.18, 0.291547, 0.357561, 1.88703e+12], + [2198.2, 0.29024, 0.357379, 2.08338e+12], + [2217.22, 0.288955, 0.357193, 2.29637e+12], + [2236.24, 0.287692, 0.357004, 2.52706e+12], + [2255.26, 0.28645, 0.356811, 2.77656e+12], + [2274.27, 0.285229, 0.356614, 3.04602e+12], + [2293.29, 0.284028, 0.356415, 3.33665e+12], + [2312.31, 0.282847, 0.356212, 3.64968e+12], + [2331.33, 0.281686, 0.356007, 3.9864e+12], + [2350.35, 0.280543, 0.355798, 4.34814e+12], + [2369.37, 0.279419, 0.355587, 4.73627e+12], + [2388.39, 0.278313, 0.355373, 5.15221e+12], + [2407.41, 0.277226, 0.355156, 5.59743e+12], + [2426.43, 0.276155, 0.354937, 6.07344e+12], + [2445.45, 0.275102, 0.354716, 6.58177e+12], + [2464.46, 0.274066, 0.354492, 7.12405e+12], + [2483.48, 0.273046, 0.354266, 7.70189e+12], + [2502.5, 0.272042, 0.354038, 8.317e+12], + [2521.52, 0.271054, 0.353809, 8.97109e+12], + [2540.54, 0.270081, 0.353577, 9.66594e+12], + [2559.56, 0.269124, 0.353343, 1.04034e+13], + [2578.58, 0.268181, 0.353108, 1.11852e+13], + [2597.6, 0.267253, 0.35287, 1.20134e+13], + [2616.62, 0.26634, 0.352632, 1.28898e+13], + [2635.64, 0.26544, 0.352392, 1.38165e+13], + [2654.65, 0.264554, 0.35215, 1.47954e+13], + [2673.67, 0.263681, 0.351907, 1.58286e+13], + [2692.69, 0.262822, 0.351663, 1.69183e+13], + [2711.71, 0.261976, 0.351417, 1.80665e+13], + [2730.73, 0.261142, 0.351171, 1.92754e+13], + [2749.75, 0.26032, 0.350923, 2.05472e+13], + [2768.77, 0.259511, 0.350674, 2.18842e+13], + [2787.79, 0.258714, 0.350425, 2.32886e+13], + [2806.81, 0.257929, 0.350174, 2.47628e+13], + [2825.83, 0.257155, 0.349923, 2.6309e+13], + [2844.84, 0.256392, 0.349671, 2.79298e+13], + [2863.86, 0.255641, 0.349418, 2.96273e+13], + [2882.88, 0.2549, 0.349165, 3.14042e+13], + [2901.9, 0.254171, 0.34891, 3.32628e+13], + [2920.92, 0.253451, 0.348656, 3.52057e+13], + [2939.94, 0.252742, 0.348401, 3.72353e+13], + [2958.96, 0.252043, 0.348145, 3.93542e+13], + [2977.98, 0.251354, 0.347889, 4.15649e+13], + [2997, 0.250675, 0.347633, 4.38702e+13], + [3016.02, 0.250005, 0.347376, 4.62724e+13], + [3035.04, 0.249345, 0.347119, 4.87744e+13], + [3054.05, 0.248693, 0.346862, 5.13787e+13], + [3073.07, 0.248051, 0.346604, 5.4088e+13], + [3092.09, 0.247418, 0.346346, 5.6905e+13], + [3111.11, 0.246794, 0.346089, 5.98324e+13], + [3130.13, 0.246178, 0.345831, 6.2873e+13], + [3149.15, 0.24557, 0.345573, 6.60294e+13], + [3168.17, 0.244971, 0.345315, 6.93043e+13], + [3187.19, 0.24438, 0.345057, 7.27007e+13], + [3206.21, 0.243797, 0.3448, 7.62212e+13], + [3225.23, 0.243222, 0.344542, 7.98685e+13], + [3244.24, 0.242654, 0.344284, 8.36456e+13], + [3263.26, 0.242094, 0.344027, 8.75552e+13], + [3282.28, 0.241542, 0.34377, 9.16001e+13], + [3301.3, 0.240997, 0.343512, 9.57831e+13], + [3320.32, 0.240459, 0.343256, 1.00107e+14], + [3339.34, 0.239928, 0.342999, 1.04575e+14], + [3358.36, 0.239404, 0.342743, 1.09189e+14], + [3377.38, 0.238887, 0.342487, 1.13952e+14], + [3396.4, 0.238377, 0.342231, 1.18868e+14], + [3415.42, 0.237873, 0.341976, 1.23939e+14], + [3434.43, 0.237376, 0.341721, 1.29168e+14], + [3453.45, 0.236885, 0.341466, 1.34557e+14], + [3472.47, 0.236401, 0.341212, 1.4011e+14], + [3491.49, 0.235923, 0.340958, 1.45829e+14], + [3510.51, 0.235451, 0.340705, 1.51717e+14], + [3529.53, 0.234984, 0.340453, 1.57777e+14], + [3548.55, 0.234524, 0.3402, 1.64012e+14], + [3567.57, 0.234069, 0.339949, 1.70425e+14], + [3586.59, 0.233621, 0.339697, 1.77017e+14], + [3605.61, 0.233177, 0.339447, 1.83793e+14], + [3624.62, 0.23274, 0.339197, 1.90754e+14], + [3643.64, 0.232307, 0.338947, 1.97904e+14], + [3662.66, 0.23188, 0.338698, 2.05245e+14], + [3681.68, 0.231459, 0.33845, 2.1278e+14], + [3700.7, 0.231042, 0.338202, 2.20512e+14], + [3719.72, 0.230631, 0.337955, 2.28443e+14], + [3738.74, 0.230224, 0.337708, 2.36576e+14], + [3757.76, 0.229823, 0.337463, 2.44914e+14], + [3776.78, 0.229426, 0.337218, 2.5346e+14], + [3795.8, 0.229034, 0.336973, 2.62215e+14], + [3814.81, 0.228647, 0.336729, 2.71183e+14], + [3833.83, 0.228265, 0.336486, 2.80366e+14], + [3852.85, 0.227887, 0.336244, 2.89767e+14], + [3871.87, 0.227513, 0.336002, 2.99388e+14], + [3890.89, 0.227144, 0.335761, 3.09232e+14], + [3909.91, 0.22678, 0.335521, 3.19302e+14], + [3928.93, 0.226419, 0.335282, 3.296e+14], + [3947.95, 0.226063, 0.335043, 3.40127e+14], + [3966.97, 0.225711, 0.334805, 3.50888e+14], + [3985.99, 0.225363, 0.334568, 3.61884e+14], + [4005.01, 0.225019, 0.334331, 3.73118e+14], + [4024.02, 0.224679, 0.334096, 3.84592e+14], + [4043.04, 0.224343, 0.333861, 3.96308e+14], + [4062.06, 0.224011, 0.333627, 4.08269e+14], + [4081.08, 0.223683, 0.333394, 4.20477e+14], + [4100.1, 0.223358, 0.333161, 4.32934e+14], + [4119.12, 0.223037, 0.33293, 4.45643e+14], + [4138.14, 0.22272, 0.332699, 4.58606e+14], + [4157.16, 0.222406, 0.332469, 4.71825e+14], + [4176.18, 0.222096, 0.33224, 4.85303e+14], + [4195.2, 0.22179, 0.332011, 4.9904e+14], + [4214.21, 0.221486, 0.331784, 5.13041e+14], + [4233.23, 0.221186, 0.331557, 5.27306e+14], + [4252.25, 0.22089, 0.331331, 5.41838e+14], + [4271.27, 0.220597, 0.331106, 5.56639e+14], + [4290.29, 0.220307, 0.330882, 5.71711e+14], + [4309.31, 0.22002, 0.330659, 5.87055e+14], + [4328.33, 0.219736, 0.330436, 6.02675e+14], + [4347.35, 0.219455, 0.330214, 6.18571e+14], + [4366.37, 0.219178, 0.329994, 6.34747e+14], + [4385.39, 0.218903, 0.329774, 6.51202e+14], + [4404.4, 0.218632, 0.329554, 6.67941e+14], + [4423.42, 0.218363, 0.329336, 6.84964e+14], + [4442.44, 0.218097, 0.329119, 7.02272e+14], + [4461.46, 0.217834, 0.328902, 7.19869e+14], + [4480.48, 0.217574, 0.328687, 7.37756e+14], + [4499.5, 0.217317, 0.328472, 7.55934e+14], + [4518.52, 0.217062, 0.328258, 7.74405e+14], + [4537.54, 0.21681, 0.328045, 7.93171e+14], + [4556.56, 0.216561, 0.327833, 8.12234e+14], + [4575.58, 0.216315, 0.327621, 8.31594e+14], + [4594.59, 0.216071, 0.327411, 8.51254e+14], + [4613.61, 0.215829, 0.327201, 8.71216e+14], + [4632.63, 0.21559, 0.326992, 8.9148e+14], + [4651.65, 0.215354, 0.326784, 9.12048e+14], + [4670.67, 0.215119, 0.326577, 9.32923e+14], + [4689.69, 0.214888, 0.326371, 9.54104e+14], + [4708.71, 0.214659, 0.326166, 9.75594e+14], + [4727.73, 0.214432, 0.325961, 9.97394e+14], + [4746.75, 0.214207, 0.325757, 1.0195e+15], + [4765.77, 0.213985, 0.325555, 1.04193e+15], + [4784.78, 0.213765, 0.325353, 1.06467e+15], + [4803.8, 0.213547, 0.325152, 1.08772e+15], + [4822.82, 0.213331, 0.324951, 1.11109e+15], + [4841.84, 0.213118, 0.324752, 1.13478e+15], + [4860.86, 0.212906, 0.324554, 1.15878e+15], + [4879.88, 0.212697, 0.324356, 1.18311e+15], + [4898.9, 0.21249, 0.324159, 1.20776e+15], + [4917.92, 0.212285, 0.323963, 1.23273e+15], + [4936.94, 0.212082, 0.323768, 1.25802e+15], + [4955.96, 0.211881, 0.323574, 1.28364e+15], + [4974.97, 0.211682, 0.32338, 1.30958e+15], + [4993.99, 0.211485, 0.323188, 1.33585e+15], + [5013.01, 0.21129, 0.322996, 1.36245e+15], + [5032.03, 0.211096, 0.322805, 1.38938e+15], + [5051.05, 0.210905, 0.322615, 1.41663e+15], + [5070.07, 0.210715, 0.322426, 1.44422e+15], + [5089.09, 0.210528, 0.322237, 1.47213e+15], + [5108.11, 0.210342, 0.32205, 1.50038e+15], + [5127.13, 0.210158, 0.321863, 1.52897e+15], + [5146.15, 0.209976, 0.321677, 1.55788e+15], + [5165.17, 0.209795, 0.321492, 1.58713e+15], + [5184.18, 0.209616, 0.321308, 1.61672e+15], + [5203.2, 0.209439, 0.321124, 1.64664e+15], + [5222.22, 0.209263, 0.320941, 1.6769e+15], + [5241.24, 0.20909, 0.32076, 1.70749e+15], + [5260.26, 0.208917, 0.320579, 1.73842e+15], + [5279.28, 0.208747, 0.320398, 1.7697e+15], + [5298.3, 0.208578, 0.320219, 1.80131e+15], + [5317.32, 0.208411, 0.32004, 1.83326e+15], + [5336.34, 0.208245, 0.319862, 1.86555e+15], + [5355.36, 0.208081, 0.319685, 1.89818e+15], + [5374.37, 0.207918, 0.319509, 1.93115e+15], + [5393.39, 0.207756, 0.319334, 1.96447e+15], + [5412.41, 0.207597, 0.319159, 1.99813e+15], + [5431.43, 0.207438, 0.318985, 2.03213e+15], + [5450.45, 0.207282, 0.318812, 2.06647e+15], + [5469.47, 0.207126, 0.31864, 2.10116e+15], + [5488.49, 0.206972, 0.318468, 2.13619e+15], + [5507.51, 0.20682, 0.318297, 2.17157e+15], + [5526.53, 0.206668, 0.318127, 2.20729e+15], + [5545.55, 0.206518, 0.317958, 2.24336e+15], + [5564.56, 0.20637, 0.31779, 2.27977e+15], + [5583.58, 0.206223, 0.317622, 2.31653e+15], + [5602.6, 0.206077, 0.317455, 2.35363e+15], + [5621.62, 0.205932, 0.317289, 2.39108e+15], + [5640.64, 0.205789, 0.317123, 2.42888e+15], + [5659.66, 0.205647, 0.316958, 2.46702e+15], + [5678.68, 0.205506, 0.316794, 2.50551e+15], + [5697.7, 0.205367, 0.316631, 2.54435e+15], + [5716.72, 0.205229, 0.316469, 2.58353e+15], + [5735.74, 0.205092, 0.316307, 2.62306e+15], + [5754.75, 0.204956, 0.316146, 2.66294e+15], + [5773.77, 0.204821, 0.315986, 2.70317e+15], + [5792.79, 0.204688, 0.315826, 2.74374e+15], + [5811.81, 0.204555, 0.315667, 2.78466e+15], + [5830.83, 0.204424, 0.315509, 2.82593e+15], + [5849.85, 0.204294, 0.315352, 2.86755e+15], + [5868.87, 0.204165, 0.315195, 2.90951e+15], + [5887.89, 0.204037, 0.315039, 2.95183e+15], + [5906.91, 0.20391, 0.314884, 2.99449e+15], + [5925.93, 0.203785, 0.314729, 3.0375e+15], + [5944.94, 0.20366, 0.314576, 3.08085e+15], + [5963.96, 0.203537, 0.314422, 3.12456e+15], + [5982.98, 0.203414, 0.31427, 3.16861e+15], + [6002, 0.203293, 0.314118, 3.21301e+15], + [6021.02, 0.203172, 0.313967, 3.25775e+15], + [6040.04, 0.203053, 0.313817, 3.30284e+15], + [6059.06, 0.202935, 0.313667, 3.34828e+15], + [6078.08, 0.202817, 0.313518, 3.39407e+15], + [6097.1, 0.202701, 0.31337, 3.4402e+15], + [6116.12, 0.202585, 0.313222, 3.48668e+15], + [6135.14, 0.202471, 0.313075, 3.53351e+15], + [6154.15, 0.202357, 0.312929, 3.58068e+15], + [6173.17, 0.202245, 0.312783, 3.6282e+15], + [6192.19, 0.202133, 0.312638, 3.67607e+15], + [6211.21, 0.202022, 0.312494, 3.72428e+15], + [6230.23, 0.201912, 0.31235, 3.77283e+15], + [6249.25, 0.201803, 0.312207, 3.82173e+15], + [6268.27, 0.201695, 0.312065, 3.87097e+15], + [6287.29, 0.201588, 0.311923, 3.92056e+15], + [6306.31, 0.201482, 0.311782, 3.97049e+15], + [6325.33, 0.201376, 0.311641, 4.02077e+15], + [6344.34, 0.201272, 0.311501, 4.07139e+15], + [6363.36, 0.201168, 0.311362, 4.12235e+15], + [6382.38, 0.201065, 0.311224, 4.17365e+15], + [6401.4, 0.200963, 0.311086, 4.2253e+15], + [6420.42, 0.200861, 0.310948, 4.27729e+15], + [6439.44, 0.200761, 0.310812, 4.32962e+15], + [6458.46, 0.200661, 0.310676, 4.38229e+15], + [6477.48, 0.200562, 0.31054, 4.4353e+15], + [6496.5, 0.200464, 0.310405, 4.48865e+15], + [6515.52, 0.200367, 0.310271, 4.54234e+15], + [6534.53, 0.20027, 0.310137, 4.59638e+15], + [6553.55, 0.200174, 0.310004, 4.65075e+15], + [6572.57, 0.200079, 0.309872, 4.70545e+15], + [6591.59, 0.199985, 0.30974, 4.7605e+15], + [6610.61, 0.199891, 0.309609, 4.81588e+15], + [6629.63, 0.199798, 0.309478, 4.8716e+15], + [6648.65, 0.199706, 0.309348, 4.92766e+15], + [6667.67, 0.199615, 0.309219, 4.98405e+15], + [6686.69, 0.199524, 0.30909, 5.04078e+15], + [6705.71, 0.199434, 0.308961, 5.09784e+15], + [6724.72, 0.199344, 0.308834, 5.15524e+15], + [6743.74, 0.199256, 0.308706, 5.21297e+15], + [6762.76, 0.199168, 0.30858, 5.27104e+15], + [6781.78, 0.19908, 0.308454, 5.32944e+15], + [6800.8, 0.198994, 0.308328, 5.38817e+15], + [6819.82, 0.198908, 0.308203, 5.44723e+15], + [6838.84, 0.198822, 0.308079, 5.50662e+15], + [6857.86, 0.198737, 0.307955, 5.56634e+15], + [6876.88, 0.198653, 0.307832, 5.6264e+15], + [6895.9, 0.19857, 0.307709, 5.68678e+15], + [6914.91, 0.198487, 0.307587, 5.74749e+15], + [6933.93, 0.198405, 0.307465, 5.80853e+15], + [6952.95, 0.198323, 0.307344, 5.86989e+15], + [6971.97, 0.198242, 0.307224, 5.93159e+15], + [6990.99, 0.198162, 0.307104, 5.99361e+15], + [7010.01, 0.198082, 0.306984, 6.05595e+15], + [7029.03, 0.198003, 0.306865, 6.11862e+15], + [7048.05, 0.197924, 0.306747, 6.18162e+15], + [7067.07, 0.197846, 0.306629, 6.24494e+15], + [7086.09, 0.197768, 0.306512, 6.30858e+15], + [7105.11, 0.197691, 0.306395, 6.37254e+15], + [7124.12, 0.197615, 0.306278, 6.43683e+15], + [7143.14, 0.197539, 0.306162, 6.50143e+15], + [7162.16, 0.197464, 0.306047, 6.56636e+15], + [7181.18, 0.197389, 0.305932, 6.6316e+15], + [7200.2, 0.197315, 0.305818, 6.69717e+15], + [7219.22, 0.197241, 0.305704, 6.76305e+15], + [7238.24, 0.197168, 0.305591, 6.82925e+15], + [7257.26, 0.197096, 0.305478, 6.89577e+15], + [7276.28, 0.197023, 0.305366, 6.96261e+15], + [7295.3, 0.196952, 0.305254, 7.02975e+15], + [7314.31, 0.196881, 0.305143, 7.09722e+15], + [7333.33, 0.19681, 0.305032, 7.165e+15], + [7352.35, 0.19674, 0.304921, 7.23309e+15], + [7371.37, 0.19667, 0.304812, 7.30149e+15], + [7390.39, 0.196601, 0.304702, 7.37021e+15], + [7409.41, 0.196533, 0.304593, 7.43924e+15], + [7428.43, 0.196465, 0.304485, 7.50857e+15], + [7447.45, 0.196397, 0.304377, 7.57822e+15], + [7466.47, 0.19633, 0.304269, 7.64818e+15], + [7485.49, 0.196263, 0.304162, 7.71844e+15], + [7504.5, 0.196197, 0.304056, 7.78902e+15], + [7523.52, 0.196131, 0.30395, 7.85989e+15], + [7542.54, 0.196066, 0.303844, 7.93108e+15], + [7561.56, 0.196001, 0.303739, 8.00257e+15], + [7580.58, 0.195936, 0.303634, 8.07436e+15], + [7599.6, 0.195872, 0.30353, 8.14646e+15], + [7618.62, 0.195809, 0.303426, 8.21886e+15], + [7637.64, 0.195745, 0.303322, 8.29157e+15], + [7656.66, 0.195683, 0.30322, 8.36457e+15], + [7675.68, 0.19562, 0.303117, 8.43788e+15], + [7694.69, 0.195559, 0.303015, 8.51148e+15], + [7713.71, 0.195497, 0.302913, 8.58539e+15], + [7732.73, 0.195436, 0.302812, 8.65959e+15], + [7751.75, 0.195375, 0.302711, 8.73409e+15], + [7770.77, 0.195315, 0.302611, 8.80889e+15], + [7789.79, 0.195255, 0.302511, 8.88398e+15], + [7808.81, 0.195196, 0.302412, 8.95937e+15], + [7827.83, 0.195137, 0.302313, 9.03505e+15], + [7846.85, 0.195078, 0.302214, 9.11103e+15], + [7865.87, 0.19502, 0.302116, 9.1873e+15], + [7884.88, 0.194962, 0.302018, 9.26386e+15], + [7903.9, 0.194905, 0.301921, 9.34071e+15], + [7922.92, 0.194848, 0.301824, 9.41786e+15], + [7941.94, 0.194791, 0.301727, 9.49529e+15], + [7960.96, 0.194735, 0.301631, 9.57301e+15], + [7979.98, 0.194679, 0.301535, 9.65102e+15], + [7999, 0.194623, 0.30144, 9.72932e+15], + [8018.02, 0.194568, 0.301345, 9.8079e+15], + [8037.04, 0.194513, 0.30125, 9.88677e+15], + [8056.06, 0.194458, 0.301156, 9.96593e+15], + [8075.08, 0.194404, 0.301062, 1.00454e+16], + [8094.09, 0.19435, 0.300969, 1.01251e+16], + [8113.11, 0.194297, 0.300876, 1.02051e+16], + [8132.13, 0.194244, 0.300784, 1.02854e+16], + [8151.15, 0.194191, 0.300691, 1.03659e+16], + [8170.17, 0.194138, 0.3006, 1.04468e+16], + [8189.19, 0.194086, 0.300508, 1.05279e+16], + [8208.21, 0.194034, 0.300417, 1.06093e+16], + [8227.23, 0.193983, 0.300327, 1.0691e+16], + [8246.25, 0.193932, 0.300236, 1.0773e+16], + [8265.27, 0.193881, 0.300146, 1.08552e+16], + [8284.28, 0.19383, 0.300057, 1.09377e+16], + [8303.3, 0.19378, 0.299968, 1.10205e+16], + [8322.32, 0.19373, 0.299879, 1.11036e+16], + [8341.34, 0.193681, 0.29979, 1.11869e+16], + [8360.36, 0.193631, 0.299702, 1.12705e+16], + [8379.38, 0.193582, 0.299615, 1.13544e+16], + [8398.4, 0.193534, 0.299527, 1.14385e+16], + [8417.42, 0.193485, 0.29944, 1.1523e+16], + [8436.44, 0.193437, 0.299354, 1.16076e+16], + [8455.46, 0.19339, 0.299268, 1.16926e+16], + [8474.47, 0.193342, 0.299182, 1.17778e+16], + [8493.49, 0.193295, 0.299096, 1.18633e+16], + [8512.51, 0.193248, 0.299011, 1.19491e+16], + [8531.53, 0.193202, 0.298926, 1.20351e+16], + [8550.55, 0.193155, 0.298842, 1.21214e+16], + [8569.57, 0.193109, 0.298757, 1.22079e+16], + [8588.59, 0.193063, 0.298674, 1.22947e+16], + [8607.61, 0.193018, 0.29859, 1.23818e+16], + [8626.63, 0.192973, 0.298507, 1.24691e+16], + [8645.65, 0.192928, 0.298424, 1.25567e+16], + [8664.66, 0.192883, 0.298342, 1.26446e+16], + [8683.68, 0.192839, 0.29826, 1.27327e+16], + [8702.7, 0.192795, 0.298178, 1.28211e+16], + [8721.72, 0.192751, 0.298096, 1.29097e+16], + [8740.74, 0.192707, 0.298015, 1.29986e+16], + [8759.76, 0.192664, 0.297935, 1.30877e+16], + [8778.78, 0.192621, 0.297854, 1.31771e+16], + [8797.8, 0.192578, 0.297774, 1.32667e+16], + [8816.82, 0.192536, 0.297694, 1.33566e+16], + [8835.84, 0.192493, 0.297615, 1.34468e+16], + [8854.85, 0.192451, 0.297535, 1.35372e+16], + [8873.87, 0.192409, 0.297456, 1.36278e+16], + [8892.89, 0.192368, 0.297378, 1.37187e+16], + [8911.91, 0.192327, 0.2973, 1.38099e+16], + [8930.93, 0.192285, 0.297222, 1.39013e+16], + [8949.95, 0.192245, 0.297144, 1.3993e+16], + [8968.97, 0.192204, 0.297067, 1.40848e+16], + [8987.99, 0.192164, 0.29699, 1.4177e+16], + [9007.01, 0.192123, 0.296913, 1.42694e+16], + [9026.03, 0.192084, 0.296837, 1.4362e+16], + [9045.05, 0.192044, 0.296761, 1.44549e+16], + [9064.06, 0.192004, 0.296685, 1.4548e+16], + [9083.08, 0.191965, 0.296609, 1.46414e+16], + [9102.1, 0.191926, 0.296534, 1.4735e+16], + [9121.12, 0.191888, 0.296459, 1.48288e+16], + [9140.14, 0.191849, 0.296385, 1.49229e+16], + [9159.16, 0.191811, 0.29631, 1.50172e+16], + [9178.18, 0.191773, 0.296236, 1.51118e+16], + [9197.2, 0.191735, 0.296163, 1.52066e+16], + [9216.22, 0.191697, 0.296089, 1.53016e+16], + [9235.24, 0.19166, 0.296016, 1.53969e+16], + [9254.25, 0.191622, 0.295943, 1.54924e+16], + [9273.27, 0.191585, 0.295871, 1.55881e+16], + [9292.29, 0.191548, 0.295798, 1.56841e+16], + [9311.31, 0.191512, 0.295726, 1.57803e+16], + [9330.33, 0.191475, 0.295654, 1.58768e+16], + [9349.35, 0.191439, 0.295583, 1.59734e+16], + [9368.37, 0.191403, 0.295512, 1.60703e+16], + [9387.39, 0.191367, 0.295441, 1.61675e+16], + [9406.41, 0.191332, 0.29537, 1.62648e+16], + [9425.43, 0.191296, 0.2953, 1.63624e+16], + [9444.44, 0.191261, 0.29523, 1.64602e+16], + [9463.46, 0.191226, 0.29516, 1.65583e+16], + [9482.48, 0.191191, 0.295091, 1.66566e+16], + [9501.5, 0.191157, 0.295021, 1.67551e+16], + [9520.52, 0.191122, 0.294952, 1.68538e+16], + [9539.54, 0.191088, 0.294883, 1.69527e+16], + [9558.56, 0.191054, 0.294815, 1.70519e+16], + [9577.58, 0.19102, 0.294747, 1.71513e+16], + [9596.6, 0.190986, 0.294679, 1.72509e+16], + [9615.62, 0.190953, 0.294611, 1.73507e+16], + [9634.63, 0.190919, 0.294544, 1.74508e+16], + [9653.65, 0.190886, 0.294476, 1.75511e+16], + [9672.67, 0.190853, 0.29441, 1.76516e+16], + [9691.69, 0.19082, 0.294343, 1.77523e+16], + [9710.71, 0.190788, 0.294276, 1.78532e+16], + [9729.73, 0.190755, 0.29421, 1.79544e+16], + [9748.75, 0.190723, 0.294144, 1.80557e+16], + [9767.77, 0.190691, 0.294079, 1.81573e+16], + [9786.79, 0.190659, 0.294013, 1.82591e+16], + [9805.81, 0.190627, 0.293948, 1.83611e+16], + [9824.82, 0.190596, 0.293883, 1.84633e+16], + [9843.84, 0.190564, 0.293818, 1.85658e+16], + [9862.86, 0.190533, 0.293754, 1.86684e+16], + [9881.88, 0.190502, 0.29369, 1.87713e+16], + [9900.9, 0.190471, 0.293626, 1.88744e+16], + [9919.92, 0.19044, 0.293562, 1.89776e+16], + [9938.94, 0.190409, 0.293499, 1.90811e+16], + [9957.96, 0.190379, 0.293435, 1.91848e+16], + [9976.98, 0.190349, 0.293372, 1.92887e+16], + [9996, 0.190318, 0.29331, 1.93928e+16], + [10015, 0.190289, 0.293247, 1.94972e+16], + [10034, 0.190259, 0.293185, 1.96017e+16], + [10053.1, 0.190229, 0.293123, 1.97064e+16], + [10072.1, 0.190199, 0.293061, 1.98114e+16], + [10091.1, 0.19017, 0.292999, 1.99165e+16], + [10110.1, 0.190141, 0.292938, 2.00218e+16], + [10129.1, 0.190112, 0.292877, 2.01274e+16], + [10148.1, 0.190083, 0.292816, 2.02331e+16], + [10167.2, 0.190054, 0.292755, 2.03391e+16], + [10186.2, 0.190026, 0.292694, 2.04452e+16], + [10205.2, 0.189997, 0.292634, 2.05516e+16], + [10224.2, 0.189969, 0.292574, 2.06581e+16], + [10243.2, 0.189941, 0.292514, 2.07649e+16], + [10262.3, 0.189913, 0.292455, 2.08718e+16], + [10281.3, 0.189885, 0.292395, 2.09789e+16], + [10300.3, 0.189857, 0.292336, 2.10863e+16], + [10319.3, 0.189829, 0.292277, 2.11938e+16], + [10338.3, 0.189802, 0.292218, 2.13015e+16], + [10357.4, 0.189774, 0.29216, 2.14095e+16], + [10376.4, 0.189747, 0.292102, 2.15176e+16], + [10395.4, 0.18972, 0.292043, 2.16259e+16], + [10414.4, 0.189693, 0.291986, 2.17344e+16], + [10433.4, 0.189666, 0.291928, 2.18431e+16], + [10452.5, 0.18964, 0.29187, 2.1952e+16], + [10471.5, 0.189613, 0.291813, 2.2061e+16], + [10490.5, 0.189587, 0.291756, 2.21703e+16], + [10509.5, 0.189561, 0.291699, 2.22797e+16], + [10528.5, 0.189534, 0.291643, 2.23894e+16], + [10547.5, 0.189508, 0.291586, 2.24992e+16], + [10566.6, 0.189482, 0.29153, 2.26092e+16], + [10585.6, 0.189457, 0.291474, 2.27194e+16], + [10604.6, 0.189431, 0.291418, 2.28298e+16], + [10623.6, 0.189406, 0.291362, 2.29404e+16], + [10642.6, 0.18938, 0.291307, 2.30512e+16], + [10661.7, 0.189355, 0.291252, 2.31621e+16], + [10680.7, 0.18933, 0.291196, 2.32732e+16], + [10699.7, 0.189305, 0.291142, 2.33845e+16], + [10718.7, 0.18928, 0.291087, 2.3496e+16], + [10737.7, 0.189255, 0.291032, 2.36077e+16], + [10756.8, 0.18923, 0.290978, 2.37196e+16], + [10775.8, 0.189206, 0.290924, 2.38316e+16], + [10794.8, 0.189182, 0.29087, 2.39438e+16], + [10813.8, 0.189157, 0.290816, 2.40562e+16], + [10832.8, 0.189133, 0.290763, 2.41688e+16], + [10851.9, 0.189109, 0.29071, 2.42816e+16], + [10870.9, 0.189085, 0.290657, 2.43945e+16], + [10889.9, 0.189061, 0.290604, 2.45076e+16], + [10908.9, 0.189037, 0.290551, 2.46209e+16], + [10927.9, 0.189014, 0.290498, 2.47343e+16], + [10946.9, 0.18899, 0.290446, 2.4848e+16], + [10966, 0.188967, 0.290394, 2.49618e+16], + [10985, 0.188944, 0.290342, 2.50758e+16], + [11004, 0.188921, 0.29029, 2.51899e+16], + [11023, 0.188897, 0.290238, 2.53043e+16], + [11042, 0.188875, 0.290186, 2.54188e+16], + [11061.1, 0.188852, 0.290135, 2.55334e+16], + [11080.1, 0.188829, 0.290084, 2.56483e+16], + [11099.1, 0.188806, 0.290033, 2.57633e+16], + [11118.1, 0.188784, 0.289982, 2.58785e+16], + [11137.1, 0.188761, 0.289932, 2.59939e+16], + [11156.2, 0.188739, 0.289881, 2.61094e+16], + [11175.2, 0.188717, 0.289831, 2.62251e+16], + [11194.2, 0.188695, 0.289781, 2.63409e+16], + [11213.2, 0.188673, 0.289731, 2.6457e+16], + [11232.2, 0.188651, 0.289681, 2.65732e+16], + [11251.3, 0.188629, 0.289632, 2.66895e+16], + [11270.3, 0.188607, 0.289582, 2.68061e+16], + [11289.3, 0.188586, 0.289533, 2.69227e+16], + [11308.3, 0.188564, 0.289484, 2.70396e+16], + [11327.3, 0.188543, 0.289435, 2.71566e+16], + [11346.3, 0.188521, 0.289386, 2.72738e+16], + [11365.4, 0.1885, 0.289338, 2.73912e+16], + [11384.4, 0.188479, 0.289289, 2.75087e+16], + [11403.4, 0.188458, 0.289241, 2.76263e+16], + [11422.4, 0.188437, 0.289193, 2.77442e+16], + [11441.4, 0.188416, 0.289145, 2.78622e+16], + [11460.5, 0.188396, 0.289097, 2.79803e+16], + [11479.5, 0.188375, 0.28905, 2.80986e+16], + [11498.5, 0.188354, 0.289002, 2.82171e+16], + [11517.5, 0.188334, 0.288955, 2.83357e+16], + [11536.5, 0.188314, 0.288908, 2.84545e+16], + [11555.6, 0.188293, 0.288861, 2.85735e+16], + [11574.6, 0.188273, 0.288814, 2.86926e+16], + [11593.6, 0.188253, 0.288767, 2.88118e+16], + [11612.6, 0.188233, 0.288721, 2.89312e+16], + [11631.6, 0.188213, 0.288675, 2.90508e+16], + [11650.7, 0.188193, 0.288628, 2.91705e+16], + [11669.7, 0.188173, 0.288582, 2.92904e+16], + [11688.7, 0.188154, 0.288537, 2.94104e+16], + [11707.7, 0.188134, 0.288491, 2.95306e+16], + [11726.7, 0.188115, 0.288445, 2.9651e+16], + [11745.7, 0.188095, 0.2884, 2.97715e+16], + [11764.8, 0.188076, 0.288355, 2.98921e+16], + [11783.8, 0.188057, 0.28831, 3.00129e+16], + [11802.8, 0.188038, 0.288265, 3.01338e+16], + [11821.8, 0.188019, 0.28822, 3.02549e+16], + [11840.8, 0.188, 0.288175, 3.03762e+16], + [11859.9, 0.187981, 0.288131, 3.04976e+16], + [11878.9, 0.187962, 0.288086, 3.06191e+16], + [11897.9, 0.187943, 0.288042, 3.07408e+16], + [11916.9, 0.187924, 0.287998, 3.08626e+16], + [11935.9, 0.187906, 0.287954, 3.09846e+16], + [11955, 0.187887, 0.28791, 3.11068e+16], + [11974, 0.187869, 0.287866, 3.1229e+16], + [11993, 0.187851, 0.287823, 3.13515e+16], + [12012, 0.187832, 0.28778, 3.1474e+16], + [12031, 0.187814, 0.287736, 3.15968e+16], + [12050.1, 0.187796, 0.287693, 3.17196e+16], + [12069.1, 0.187778, 0.28765, 3.18426e+16], + [12088.1, 0.18776, 0.287608, 3.19658e+16], + [12107.1, 0.187742, 0.287565, 3.20891e+16], + [12126.1, 0.187724, 0.287522, 3.22125e+16], + [12145.1, 0.187707, 0.28748, 3.23361e+16], + [12164.2, 0.187689, 0.287438, 3.24598e+16], + [12183.2, 0.187672, 0.287396, 3.25836e+16], + [12202.2, 0.187654, 0.287354, 3.27076e+16], + [12221.2, 0.187637, 0.287312, 3.28318e+16], + [12240.2, 0.187619, 0.28727, 3.29561e+16], + [12259.3, 0.187602, 0.287228, 3.30805e+16], + [12278.3, 0.187585, 0.287187, 3.3205e+16], + [12297.3, 0.187568, 0.287146, 3.33297e+16], + [12316.3, 0.187551, 0.287104, 3.34545e+16], + [12335.3, 0.187534, 0.287063, 3.35795e+16], + [12354.4, 0.187517, 0.287022, 3.37046e+16], + [12373.4, 0.1875, 0.286982, 3.38299e+16], + [12392.4, 0.187483, 0.286941, 3.39552e+16], + [12411.4, 0.187466, 0.2869, 3.40808e+16], + [12430.4, 0.18745, 0.28686, 3.42064e+16], + [12449.4, 0.187433, 0.28682, 3.43322e+16], + [12468.5, 0.187417, 0.28678, 3.44581e+16], + [12487.5, 0.1874, 0.28674, 3.45842e+16], + [12506.5, 0.187384, 0.2867, 3.47103e+16], + [12525.5, 0.187368, 0.28666, 3.48367e+16], + [12544.5, 0.187351, 0.28662, 3.49631e+16], + [12563.6, 0.187335, 0.286581, 3.50897e+16], + [12582.6, 0.187319, 0.286541, 3.52164e+16], + [12601.6, 0.187303, 0.286502, 3.53433e+16], + [12620.6, 0.187287, 0.286463, 3.54702e+16], + [12639.6, 0.187271, 0.286424, 3.55973e+16], + [12658.7, 0.187255, 0.286385, 3.57246e+16], + [12677.7, 0.187239, 0.286346, 3.58519e+16], + [12696.7, 0.187224, 0.286308, 3.59794e+16], + [12715.7, 0.187208, 0.286269, 3.61071e+16], + [12734.7, 0.187192, 0.286231, 3.62348e+16], + [12753.8, 0.187177, 0.286192, 3.63627e+16], + [12772.8, 0.187161, 0.286154, 3.64907e+16], + [12791.8, 0.187146, 0.286116, 3.66188e+16], + [12810.8, 0.187131, 0.286078, 3.67471e+16], + [12829.8, 0.187115, 0.28604, 3.68755e+16], + [12848.8, 0.1871, 0.286003, 3.7004e+16], + [12867.9, 0.187085, 0.285965, 3.71326e+16], + [12886.9, 0.18707, 0.285928, 3.72614e+16], + [12905.9, 0.187055, 0.28589, 3.73903e+16], + [12924.9, 0.18704, 0.285853, 3.75193e+16], + [12943.9, 0.187025, 0.285816, 3.76484e+16], + [12963, 0.18701, 0.285779, 3.77777e+16], + [12982, 0.186995, 0.285742, 3.79071e+16], + [13001, 0.186981, 0.285705, 3.80366e+16], + [13020, 0.186966, 0.285668, 3.81662e+16], + [13039, 0.186951, 0.285632, 3.82959e+16], + [13058.1, 0.186937, 0.285595, 3.84258e+16], + [13077.1, 0.186922, 0.285559, 3.85558e+16], + [13096.1, 0.186908, 0.285523, 3.86859e+16], + [13115.1, 0.186893, 0.285487, 3.88161e+16], + [13134.1, 0.186879, 0.285451, 3.89465e+16], + [13153.2, 0.186865, 0.285415, 3.9077e+16], + [13172.2, 0.18685, 0.285379, 3.92076e+16], + [13191.2, 0.186836, 0.285343, 3.93383e+16], + [13210.2, 0.186822, 0.285308, 3.94691e+16], + [13229.2, 0.186808, 0.285272, 3.96e+16], + [13248.2, 0.186794, 0.285237, 3.97311e+16], + [13267.3, 0.18678, 0.285201, 3.98623e+16], + [13286.3, 0.186766, 0.285166, 3.99936e+16], + [13305.3, 0.186752, 0.285131, 4.0125e+16], + [13324.3, 0.186738, 0.285096, 4.02565e+16], + [13343.3, 0.186725, 0.285061, 4.03882e+16], + [13362.4, 0.186711, 0.285027, 4.05199e+16], + [13381.4, 0.186697, 0.284992, 4.06518e+16], + [13400.4, 0.186684, 0.284957, 4.07838e+16], + [13419.4, 0.18667, 0.284923, 4.09159e+16], + [13438.4, 0.186657, 0.284889, 4.10481e+16], + [13457.5, 0.186643, 0.284854, 4.11804e+16], + [13476.5, 0.18663, 0.28482, 4.13129e+16], + [13495.5, 0.186617, 0.284786, 4.14454e+16], + [13514.5, 0.186603, 0.284752, 4.15781e+16], + [13533.5, 0.18659, 0.284719, 4.17109e+16], + [13552.6, 0.186577, 0.284685, 4.18437e+16], + [13571.6, 0.186564, 0.284651, 4.19767e+16], + [13590.6, 0.186551, 0.284618, 4.21099e+16], + [13609.6, 0.186538, 0.284584, 4.22431e+16], + [13628.6, 0.186525, 0.284551, 4.23764e+16], + [13647.6, 0.186512, 0.284518, 4.25099e+16], + [13666.7, 0.186499, 0.284485, 4.26434e+16], + [13685.7, 0.186486, 0.284452, 4.27771e+16], + [13704.7, 0.186473, 0.284419, 4.29108e+16], + [13723.7, 0.18646, 0.284386, 4.30447e+16], + [13742.7, 0.186448, 0.284353, 4.31787e+16], + [13761.8, 0.186435, 0.28432, 4.33128e+16], + [13780.8, 0.186422, 0.284288, 4.3447e+16], + [13799.8, 0.18641, 0.284255, 4.35813e+16], + [13818.8, 0.186397, 0.284223, 4.37157e+16], + [13837.8, 0.186385, 0.284191, 4.38503e+16], + [13856.9, 0.186372, 0.284159, 4.39849e+16], + [13875.9, 0.18636, 0.284126, 4.41196e+16], + [13894.9, 0.186348, 0.284094, 4.42545e+16], + [13913.9, 0.186335, 0.284063, 4.43894e+16], + [13932.9, 0.186323, 0.284031, 4.45244e+16], + [13952, 0.186311, 0.283999, 4.46596e+16], + [13971, 0.186299, 0.283967, 4.47949e+16], + [13990, 0.186286, 0.283936, 4.49302e+16], + [14009, 0.186274, 0.283904, 4.50657e+16], + [14028, 0.186262, 0.283873, 4.52013e+16], + [14047, 0.18625, 0.283842, 4.53369e+16], + [14066.1, 0.186238, 0.283811, 4.54727e+16], + [14085.1, 0.186227, 0.28378, 4.56086e+16], + [14104.1, 0.186215, 0.283749, 4.57445e+16], + [14123.1, 0.186203, 0.283718, 4.58806e+16], + [14142.1, 0.186191, 0.283687, 4.60168e+16], + [14161.2, 0.186179, 0.283656, 4.61531e+16], + [14180.2, 0.186168, 0.283625, 4.62895e+16], + [14199.2, 0.186156, 0.283595, 4.64259e+16], + [14218.2, 0.186144, 0.283564, 4.65625e+16], + [14237.2, 0.186133, 0.283534, 4.66992e+16], + [14256.3, 0.186121, 0.283504, 4.6836e+16], + [14275.3, 0.18611, 0.283473, 4.69729e+16], + [14294.3, 0.186098, 0.283443, 4.71098e+16], + [14313.3, 0.186087, 0.283413, 4.72469e+16], + [14332.3, 0.186076, 0.283383, 4.73841e+16], + [14351.4, 0.186064, 0.283353, 4.75214e+16], + [14370.4, 0.186053, 0.283324, 4.76587e+16], + [14389.4, 0.186042, 0.283294, 4.77962e+16], + [14408.4, 0.186031, 0.283264, 4.79338e+16], + [14427.4, 0.186019, 0.283235, 4.80714e+16], + [14446.4, 0.186008, 0.283205, 4.82092e+16], + [14465.5, 0.185997, 0.283176, 4.8347e+16], + [14484.5, 0.185986, 0.283147, 4.8485e+16], + [14503.5, 0.185975, 0.283117, 4.8623e+16], + [14522.5, 0.185964, 0.283088, 4.87612e+16], + [14541.5, 0.185953, 0.283059, 4.88994e+16], + [14560.6, 0.185942, 0.28303, 4.90377e+16], + [14579.6, 0.185931, 0.283001, 4.91761e+16], + [14598.6, 0.185921, 0.282973, 4.93147e+16], + [14617.6, 0.18591, 0.282944, 4.94533e+16], + [14636.6, 0.185899, 0.282915, 4.9592e+16], + [14655.7, 0.185888, 0.282887, 4.97308e+16], + [14674.7, 0.185878, 0.282858, 4.98696e+16], + [14693.7, 0.185867, 0.28283, 5.00086e+16], + [14712.7, 0.185856, 0.282801, 5.01477e+16], + [14731.7, 0.185846, 0.282773, 5.02869e+16], + [14750.8, 0.185835, 0.282745, 5.04261e+16], + [14769.8, 0.185825, 0.282717, 5.05655e+16], + [14788.8, 0.185814, 0.282689, 5.07049e+16], + [14807.8, 0.185804, 0.282661, 5.08444e+16], + [14826.8, 0.185794, 0.282633, 5.09841e+16], + [14845.8, 0.185783, 0.282605, 5.11238e+16], + [14864.9, 0.185773, 0.282577, 5.12636e+16], + [14883.9, 0.185763, 0.28255, 5.14034e+16], + [14902.9, 0.185752, 0.282522, 5.15434e+16], + [14921.9, 0.185742, 0.282495, 5.16835e+16], + [14940.9, 0.185732, 0.282467, 5.18237e+16], + [14960, 0.185722, 0.28244, 5.19639e+16], + [14979, 0.185712, 0.282413, 5.21042e+16], + [14998, 0.185702, 0.282385, 5.22447e+16], + [15017, 0.185692, 0.282358, 5.23852e+16], + [15036, 0.185682, 0.282331, 5.25258e+16], + [15055.1, 0.185672, 0.282304, 5.26664e+16], + [15074.1, 0.185662, 0.282277, 5.28072e+16], + [15093.1, 0.185652, 0.282251, 5.29481e+16], + [15112.1, 0.185642, 0.282224, 5.3089e+16], + [15131.1, 0.185632, 0.282197, 5.323e+16], + [15150.2, 0.185622, 0.28217, 5.33712e+16], + [15169.2, 0.185612, 0.282144, 5.35124e+16], + [15188.2, 0.185603, 0.282117, 5.36536e+16], + [15207.2, 0.185593, 0.282091, 5.3795e+16], + [15226.2, 0.185583, 0.282065, 5.39365e+16], + [15245.2, 0.185574, 0.282038, 5.4078e+16], + [15264.3, 0.185564, 0.282012, 5.42196e+16], + [15283.3, 0.185554, 0.281986, 5.43614e+16], + [15302.3, 0.185545, 0.28196, 5.45031e+16], + [15321.3, 0.185535, 0.281934, 5.4645e+16], + [15340.3, 0.185526, 0.281908, 5.4787e+16], + [15359.4, 0.185516, 0.281882, 5.4929e+16], + [15378.4, 0.185507, 0.281856, 5.50712e+16], + [15397.4, 0.185497, 0.281831, 5.52134e+16], + [15416.4, 0.185488, 0.281805, 5.53557e+16], + [15435.4, 0.185479, 0.28178, 5.5498e+16], + [15454.5, 0.185469, 0.281754, 5.56405e+16], + [15473.5, 0.18546, 0.281729, 5.5783e+16], + [15492.5, 0.185451, 0.281703, 5.59256e+16], + [15511.5, 0.185442, 0.281678, 5.60683e+16], + [15530.5, 0.185432, 0.281653, 5.62111e+16], + [15549.5, 0.185423, 0.281627, 5.6354e+16], + [15568.6, 0.185414, 0.281602, 5.64969e+16], + [15587.6, 0.185405, 0.281577, 5.66399e+16], + [15606.6, 0.185396, 0.281552, 5.67831e+16], + [15625.6, 0.185387, 0.281527, 5.69262e+16], + [15644.6, 0.185378, 0.281503, 5.70695e+16], + [15663.7, 0.185369, 0.281478, 5.72128e+16], + [15682.7, 0.18536, 0.281453, 5.73563e+16], + [15701.7, 0.185351, 0.281428, 5.74998e+16], + [15720.7, 0.185342, 0.281404, 5.76433e+16], + [15739.7, 0.185333, 0.281379, 5.7787e+16], + [15758.8, 0.185324, 0.281355, 5.79307e+16], + [15777.8, 0.185316, 0.28133, 5.80745e+16], + [15796.8, 0.185307, 0.281306, 5.82184e+16], + [15815.8, 0.185298, 0.281282, 5.83624e+16], + [15834.8, 0.185289, 0.281257, 5.85064e+16], + [15853.9, 0.185281, 0.281233, 5.86505e+16], + [15872.9, 0.185272, 0.281209, 5.87947e+16], + [15891.9, 0.185263, 0.281185, 5.8939e+16], + [15910.9, 0.185255, 0.281161, 5.90834e+16], + [15929.9, 0.185246, 0.281137, 5.92278e+16], + [15948.9, 0.185237, 0.281113, 5.93723e+16], + [15968, 0.185229, 0.28109, 5.95169e+16], + [15987, 0.18522, 0.281066, 5.96615e+16], + [16006, 0.185212, 0.281042, 5.98062e+16], + [16025, 0.185203, 0.281019, 5.9951e+16], + [16044, 0.185195, 0.280995, 6.00959e+16], + [16063.1, 0.185187, 0.280972, 6.02409e+16], + [16082.1, 0.185178, 0.280948, 6.03859e+16], + [16101.1, 0.18517, 0.280925, 6.0531e+16], + [16120.1, 0.185161, 0.280902, 6.06762e+16], + [16139.1, 0.185153, 0.280878, 6.08214e+16], + [16158.2, 0.185145, 0.280855, 6.09667e+16], + [16177.2, 0.185137, 0.280832, 6.11121e+16], + [16196.2, 0.185128, 0.280809, 6.12576e+16], + [16215.2, 0.18512, 0.280786, 6.14031e+16], + [16234.2, 0.185112, 0.280763, 6.15487e+16], + [16253.3, 0.185104, 0.28074, 6.16944e+16], + [16272.3, 0.185096, 0.280717, 6.18402e+16], + [16291.3, 0.185088, 0.280694, 6.1986e+16], + [16310.3, 0.185079, 0.280672, 6.21319e+16], + [16329.3, 0.185071, 0.280649, 6.22779e+16], + [16348.3, 0.185063, 0.280626, 6.24239e+16], + [16367.4, 0.185055, 0.280604, 6.257e+16], + [16386.4, 0.185047, 0.280581, 6.27162e+16], + [16405.4, 0.185039, 0.280559, 6.28625e+16], + [16424.4, 0.185031, 0.280537, 6.30088e+16], + [16443.4, 0.185024, 0.280514, 6.31552e+16], + [16462.5, 0.185016, 0.280492, 6.33017e+16], + [16481.5, 0.185008, 0.28047, 6.34482e+16], + [16500.5, 0.185, 0.280448, 6.35948e+16], + [16519.5, 0.184992, 0.280425, 6.37415e+16], + [16538.5, 0.184984, 0.280403, 6.38882e+16], + [16557.6, 0.184977, 0.280381, 6.4035e+16], + [16576.6, 0.184969, 0.280359, 6.41819e+16], + [16595.6, 0.184961, 0.280338, 6.43289e+16], + [16614.6, 0.184953, 0.280316, 6.44759e+16], + [16633.6, 0.184946, 0.280294, 6.4623e+16], + [16652.7, 0.184938, 0.280272, 6.47701e+16], + [16671.7, 0.18493, 0.280251, 6.49174e+16], + [16690.7, 0.184923, 0.280229, 6.50646e+16], + [16709.7, 0.184915, 0.280207, 6.5212e+16], + [16728.7, 0.184908, 0.280186, 6.53594e+16], + [16747.7, 0.1849, 0.280164, 6.55069e+16], + [16766.8, 0.184893, 0.280143, 6.56545e+16], + [16785.8, 0.184885, 0.280122, 6.58021e+16], + [16804.8, 0.184878, 0.2801, 6.59498e+16], + [16823.8, 0.18487, 0.280079, 6.60976e+16], + [16842.8, 0.184863, 0.280058, 6.62454e+16], + [16861.9, 0.184855, 0.280037, 6.63933e+16], + [16880.9, 0.184848, 0.280016, 6.65412e+16], + [16899.9, 0.18484, 0.279994, 6.66893e+16], + [16918.9, 0.184833, 0.279973, 6.68373e+16], + [16937.9, 0.184826, 0.279953, 6.69855e+16], + [16957, 0.184818, 0.279932, 6.71337e+16], + [16976, 0.184811, 0.279911, 6.7282e+16], + [16995, 0.184804, 0.27989, 6.74303e+16], + [17014, 0.184797, 0.279869, 6.75788e+16], + [17033, 0.184789, 0.279849, 6.77272e+16], + [17052.1, 0.184782, 0.279828, 6.78758e+16], + [17071.1, 0.184775, 0.279807, 6.80244e+16], + [17090.1, 0.184768, 0.279787, 6.8173e+16], + [17109.1, 0.184761, 0.279766, 6.83218e+16], + [17128.1, 0.184754, 0.279746, 6.84706e+16], + [17147.1, 0.184747, 0.279725, 6.86194e+16], + [17166.2, 0.184739, 0.279705, 6.87684e+16], + [17185.2, 0.184732, 0.279685, 6.89173e+16], + [17204.2, 0.184725, 0.279664, 6.90664e+16], + [17223.2, 0.184718, 0.279644, 6.92155e+16], + [17242.2, 0.184711, 0.279624, 6.93647e+16], + [17261.3, 0.184704, 0.279604, 6.95139e+16], + [17280.3, 0.184697, 0.279584, 6.96632e+16], + [17299.3, 0.18469, 0.279564, 6.98126e+16], + [17318.3, 0.184684, 0.279544, 6.9962e+16], + [17337.3, 0.184677, 0.279524, 7.01115e+16], + [17356.4, 0.18467, 0.279504, 7.0261e+16], + [17375.4, 0.184663, 0.279484, 7.04106e+16], + [17394.4, 0.184656, 0.279465, 7.05603e+16], + [17413.4, 0.184649, 0.279445, 7.071e+16], + [17432.4, 0.184642, 0.279425, 7.08598e+16], + [17451.5, 0.184636, 0.279405, 7.10096e+16], + [17470.5, 0.184629, 0.279386, 7.11595e+16], + [17489.5, 0.184622, 0.279366, 7.13095e+16], + [17508.5, 0.184615, 0.279347, 7.14595e+16], + [17527.5, 0.184609, 0.279327, 7.16096e+16], + [17546.5, 0.184602, 0.279308, 7.17598e+16], + [17565.6, 0.184595, 0.279289, 7.191e+16], + [17584.6, 0.184589, 0.279269, 7.20602e+16], + [17603.6, 0.184582, 0.27925, 7.22106e+16], + [17622.6, 0.184575, 0.279231, 7.23609e+16], + [17641.6, 0.184569, 0.279212, 7.25114e+16], + [17660.7, 0.184562, 0.279192, 7.26619e+16], + [17679.7, 0.184556, 0.279173, 7.28124e+16], + [17698.7, 0.184549, 0.279154, 7.29631e+16], + [17717.7, 0.184543, 0.279135, 7.31137e+16], + [17736.7, 0.184536, 0.279116, 7.32645e+16], + [17755.8, 0.18453, 0.279097, 7.34153e+16], + [17774.8, 0.184523, 0.279079, 7.35661e+16], + [17793.8, 0.184517, 0.27906, 7.3717e+16], + [17812.8, 0.18451, 0.279041, 7.3868e+16], + [17831.8, 0.184504, 0.279022, 7.4019e+16], + [17850.9, 0.184497, 0.279003, 7.41701e+16], + [17869.9, 0.184491, 0.278985, 7.43212e+16], + [17888.9, 0.184485, 0.278966, 7.44724e+16], + [17907.9, 0.184478, 0.278948, 7.46236e+16], + [17926.9, 0.184472, 0.278929, 7.4775e+16], + [17945.9, 0.184466, 0.278911, 7.49263e+16], + [17965, 0.184459, 0.278892, 7.50777e+16], + [17984, 0.184453, 0.278874, 7.52292e+16], + [18003, 0.184447, 0.278855, 7.53807e+16], + [18022, 0.184441, 0.278837, 7.55323e+16], + [18041, 0.184434, 0.278819, 7.5684e+16], + [18060.1, 0.184428, 0.278801, 7.58357e+16], + [18079.1, 0.184422, 0.278782, 7.59874e+16], + [18098.1, 0.184416, 0.278764, 7.61392e+16], + [18117.1, 0.18441, 0.278746, 7.62911e+16], + [18136.1, 0.184404, 0.278728, 7.6443e+16], + [18155.2, 0.184397, 0.27871, 7.6595e+16], + [18174.2, 0.184391, 0.278692, 7.6747e+16], + [18193.2, 0.184385, 0.278674, 7.68991e+16], + [18212.2, 0.184379, 0.278656, 7.70512e+16], + [18231.2, 0.184373, 0.278638, 7.72034e+16], + [18250.3, 0.184367, 0.27862, 7.73556e+16], + [18269.3, 0.184361, 0.278603, 7.75079e+16], + [18288.3, 0.184355, 0.278585, 7.76603e+16], + [18307.3, 0.184349, 0.278567, 7.78127e+16], + [18326.3, 0.184343, 0.27855, 7.79651e+16], + [18345.3, 0.184337, 0.278532, 7.81176e+16], + [18364.4, 0.184331, 0.278514, 7.82702e+16], + [18383.4, 0.184325, 0.278497, 7.84228e+16], + [18402.4, 0.184319, 0.278479, 7.85755e+16], + [18421.4, 0.184313, 0.278462, 7.87282e+16], + [18440.4, 0.184307, 0.278444, 7.8881e+16], + [18459.5, 0.184302, 0.278427, 7.90338e+16], + [18478.5, 0.184296, 0.27841, 7.91867e+16], + [18497.5, 0.18429, 0.278392, 7.93396e+16], + [18516.5, 0.184284, 0.278375, 7.94926e+16], + [18535.5, 0.184278, 0.278358, 7.96456e+16], + [18554.6, 0.184272, 0.278341, 7.97987e+16], + [18573.6, 0.184267, 0.278323, 7.99518e+16], + [18592.6, 0.184261, 0.278306, 8.0105e+16], + [18611.6, 0.184255, 0.278289, 8.02582e+16], + [18630.6, 0.184249, 0.278272, 8.04115e+16], + [18649.6, 0.184244, 0.278255, 8.05649e+16], + [18668.7, 0.184238, 0.278238, 8.07183e+16], + [18687.7, 0.184232, 0.278221, 8.08717e+16], + [18706.7, 0.184227, 0.278204, 8.10252e+16], + [18725.7, 0.184221, 0.278187, 8.11787e+16], + [18744.7, 0.184215, 0.278171, 8.13323e+16], + [18763.8, 0.18421, 0.278154, 8.1486e+16], + [18782.8, 0.184204, 0.278137, 8.16397e+16], + [18801.8, 0.184198, 0.27812, 8.17934e+16], + [18820.8, 0.184193, 0.278104, 8.19472e+16], + [18839.8, 0.184187, 0.278087, 8.2101e+16], + [18858.9, 0.184182, 0.27807, 8.22549e+16], + [18877.9, 0.184176, 0.278054, 8.24089e+16], + [18896.9, 0.184171, 0.278037, 8.25629e+16], + [18915.9, 0.184165, 0.278021, 8.27169e+16], + [18934.9, 0.18416, 0.278004, 8.2871e+16], + [18954, 0.184154, 0.277988, 8.30251e+16], + [18973, 0.184149, 0.277972, 8.31793e+16], + [18992, 0.184143, 0.277955, 8.33336e+16], + [19011, 0.184138, 0.277939, 8.34878e+16], + [19030, 0.184132, 0.277923, 8.36422e+16], + [19049, 0.184127, 0.277906, 8.37965e+16], + [19068.1, 0.184122, 0.27789, 8.3951e+16], + [19087.1, 0.184116, 0.277874, 8.41054e+16], + [19106.1, 0.184111, 0.277858, 8.426e+16], + [19125.1, 0.184105, 0.277842, 8.44145e+16], + [19144.1, 0.1841, 0.277826, 8.45692e+16], + [19163.2, 0.184095, 0.27781, 8.47238e+16], + [19182.2, 0.184089, 0.277794, 8.48785e+16], + [19201.2, 0.184084, 0.277778, 8.50333e+16], + [19220.2, 0.184079, 0.277762, 8.51881e+16], + [19239.2, 0.184073, 0.277746, 8.5343e+16], + [19258.3, 0.184068, 0.27773, 8.54979e+16], + [19277.3, 0.184063, 0.277714, 8.56528e+16], + [19296.3, 0.184058, 0.277698, 8.58078e+16], + [19315.3, 0.184052, 0.277683, 8.59628e+16], + [19334.3, 0.184047, 0.277667, 8.61179e+16], + [19353.4, 0.184042, 0.277651, 8.62731e+16], + [19372.4, 0.184037, 0.277636, 8.64282e+16], + [19391.4, 0.184032, 0.27762, 8.65835e+16], + [19410.4, 0.184027, 0.277604, 8.67387e+16], + [19429.4, 0.184021, 0.277589, 8.68941e+16], + [19448.4, 0.184016, 0.277573, 8.70494e+16], + [19467.5, 0.184011, 0.277558, 8.72048e+16], + [19486.5, 0.184006, 0.277542, 8.73603e+16], + [19505.5, 0.184001, 0.277527, 8.75158e+16], + [19524.5, 0.183996, 0.277511, 8.76713e+16], + [19543.5, 0.183991, 0.277496, 8.78269e+16], + [19562.6, 0.183986, 0.277481, 8.79826e+16], + [19581.6, 0.183981, 0.277465, 8.81382e+16], + [19600.6, 0.183976, 0.27745, 8.8294e+16], + [19619.6, 0.183971, 0.277435, 8.84497e+16], + [19638.6, 0.183966, 0.27742, 8.86055e+16], + [19657.7, 0.183961, 0.277405, 8.87614e+16], + [19676.7, 0.183956, 0.277389, 8.89173e+16], + [19695.7, 0.183951, 0.277374, 8.90732e+16], + [19714.7, 0.183946, 0.277359, 8.92292e+16], + [19733.7, 0.183941, 0.277344, 8.93853e+16], + [19752.8, 0.183936, 0.277329, 8.95413e+16], + [19771.8, 0.183931, 0.277314, 8.96975e+16], + [19790.8, 0.183926, 0.277299, 8.98536e+16], + [19809.8, 0.183921, 0.277284, 9.00098e+16], + [19828.8, 0.183916, 0.277269, 9.01661e+16], + [19847.8, 0.183911, 0.277255, 9.03224e+16], + [19866.9, 0.183906, 0.27724, 9.04787e+16], + [19885.9, 0.183901, 0.277225, 9.06351e+16], + [19904.9, 0.183897, 0.27721, 9.07915e+16], + [19923.9, 0.183892, 0.277195, 9.0948e+16], + [19942.9, 0.183887, 0.277181, 9.11045e+16], + [19962, 0.183882, 0.277166, 9.12611e+16], + [19981, 0.183877, 0.277151, 9.14176e+16], + [20000, 0.183873, 0.277137, 9.15743e+16], +]) |