Source code for pycif.plugins.transforms.complex.satellites.apply_AK

import numpy as np
from logging import info


[docs] def apply_ak( sim_ak, aks, pwgt, drycols, qa0, chosen_level=-1, use_drycols=False, scale_factor=1, log_space=False, normalize_columns=False ): """Apply the corresponding AK values """ if not log_space: prior_profile = qa0[chosen_level] if chosen_level != -1 \ else np.nansum(qa0 * pwgt, axis=0) y0 = np.nansum( (sim_ak * drycols - qa0) * aks * pwgt, axis=0 ) + prior_profile if not normalize_columns: pass elif use_drycols: y0 /= np.nansum(drycols, axis=0) else: y0 /= np.nansum(pwgt * aks, axis=0) y0 *= scale_factor else: prior_profile = np.log(qa0[chosen_level]) if chosen_level != -1 \ else np.nansum(pwgt * np.where(qa0 > 0, np.log(qa0), 0), axis=0) y0 = np.nansum( (np.where(sim_ak > 0, np.log(sim_ak), 0) * drycols - np.where(qa0 > 0, np.log(qa0), 0)) * aks * pwgt, axis=0 ) + prior_profile if not normalize_columns: pass elif use_drycols: y0 /= np.nansum(drycols, axis=0) else: y0 /= np.nansum(pwgt * aks, axis=0) y0 = np.exp(y0) y0 *= scale_factor return y0
[docs] def apply_ak_tl( sim_ak_tl, sim_ak, aks, pwgt, drycols, qa0, chosen_level=-1, use_drycols=False, scale_factor=1, log_space=False, normalize_columns=False ): if not log_space: y0_tl = np.nansum((sim_ak_tl * drycols) * aks * pwgt, axis=0) if not normalize_columns: pass elif use_drycols: y0_tl /= np.nansum(drycols, axis=0) else: y0_tl /= np.nansum(pwgt * aks, axis=0) y0_tl *= scale_factor else: y0 = apply_ak(sim_ak, aks, pwgt, drycols, qa0, chosen_level=chosen_level, use_drycols=use_drycols, scale_factor=scale_factor, log_space=log_space, normalize_columns=normalize_columns) y0_tl = np.nansum( np.where( sim_ak > 0, sim_ak_tl / sim_ak * drycols, 0 ) * aks * pwgt, axis=0 ) if not normalize_columns: pass elif use_drycols: y0_tl /= np.nansum(drycols, axis=0) else: y0_tl /= np.nansum(pwgt * aks, axis=0) y0_tl *= y0 return y0_tl
[docs] def apply_ak_ad( obs_incr, sim_ak, aks, pwgt, drycols, qa0, chosen_level=-1, use_drycols=False, scale_factor=1, log_space=False, normalize_columns=False ): if not log_space: obs_incr_out = obs_incr * scale_factor if not normalize_columns: pass elif use_drycols: obs_incr_out /= np.nansum(drycols, axis=0) else: obs_incr_out /= np.nansum(pwgt * aks, axis=0) obs_incr_out = (obs_incr_out * drycols) * aks * pwgt else: y0 = apply_ak(sim_ak, aks, pwgt, drycols, qa0, chosen_level=chosen_level, use_drycols=use_drycols, scale_factor=scale_factor, log_space=log_space, normalize_columns=normalize_columns) obs_incr_out = obs_incr * y0 if not normalize_columns: pass elif use_drycols: obs_incr_out /= np.nansum(drycols, axis=0) else: obs_incr_out /= np.nansum(pwgt * aks, axis=0) obs_incr_out = np.where( sim_ak > 0, ((obs_incr_out / sim_ak * drycols) * aks * pwgt), 0 ) return obs_incr_out