Source code for cortecs.fit.fit_polynomial
"""
Module for fitting polynomial functions in temperature and pressure to opacity functions.
"""
import jax.numpy as jnp
import numpy as np
# todo: loop over all wavelengths.
[docs]
def prep_polynomial(cross_section, **kargs):
pass
# @jax.jit
[docs]
def fit_polynomial(
Z,
P,
T,
prep_res,
plot=False,
):
"""
fits a polynomial to the opacity data.
Inputs
-------
:Z: (n_temp x n_pres) it's an array.
:P: pressure grid
:T: temperature grid
:prep_res: (n_temp x n_pres) PCA components
:plot: (bool) whether to plot the fit.
:savename: (str) if not None, the PCA components will be saved to this filename.
Returns
-------
:coeff: (nc x pixels) PCA coefficients
"""
X, Y = jnp.meshgrid(jnp.log10(T), jnp.log10(P), copy=True)
X = X.flatten()
Y = Y.flatten()
# took out the y**2 term
A = jnp.array(
[
X * 0 + 1,
X,
Y,
X**2,
X**2 * Y,
X**2 * Y**2,
X * Y**2,
X * Y,
X * Y**3,
Y**4,
Y**5,
Y**6,
Y**7,
Y**12,
X * Y**9,
np.power(X, 1 / 4),
]
).T
B = Z.flatten()
coeff, _, _, _ = np.linalg.lstsq(A, B, rcond=-1)
return coeff
[docs]
def save_polynomial(savename, coeff):
"""
Saves the polynomial coefficients to a file.
Inputs
-------
:savename: (str) if not None, the PCA components will be saved to this filename.
:coeff: (nc x ntemp) PCA coefficients
"""
np.savetxt(savename + ".txt", coeff)