Source code for isofit.configs.sections.statevector_config

#! /usr/bin/env python3
#
#  Copyright 2018 California Institute of Technology
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#
# ISOFIT: Imaging Spectrometer Optimal FITting
# Author: Philip G. Brodrick, philip.brodrick@jpl.nasa.gov

import logging
from typing import Dict, List, Type

import numpy as np

from isofit.configs.base_config import BaseConfigSection


[docs] class StateVectorElementConfig(BaseConfigSection): """ State vector element configuration. """ def __init__(self, sub_configdic: dict = None): self._bounds_type = list() self.bounds = [np.nan, np.nan] self._scale_type = float self.scale = np.nan self._prior_mean_type = float self.prior_mean = np.nan self._prior_sigma_type = float self.prior_sigma = np.nan self._init_type = float self.init = np.nan self.set_config_options(sub_configdic) def _check_config_validity(self) -> List[str]: errors = list() return errors
[docs] class StateVectorConfig(BaseConfigSection): """ State vector configuration. """ def __init__(self, sub_configdic: dict = None): self._H2OSTR_type = StateVectorElementConfig self.H2OSTR: StateVectorElementConfig = None self._AOT550_type = StateVectorElementConfig self.AOT550: StateVectorElementConfig = None self._AERFRAC_1_type = StateVectorElementConfig self.AERFRAC_1: StateVectorElementConfig = None self._AERFRAC_2_type = StateVectorElementConfig self.AERFRAC_2: StateVectorElementConfig = None self._AERFRAC_3_type = StateVectorElementConfig self.AERFRAC_3: StateVectorElementConfig = None self._GROW_FWHM_type = StateVectorElementConfig self.GROW_FWHM: StateVectorElementConfig = None self._WL_SHIFT_type = StateVectorElementConfig self.WL_SHIFT: StateVectorElementConfig = None self._WL_SPACE_type = StateVectorElementConfig self.WL_SPACE: StateVectorElementConfig = None self._AIRT_DELTA_K_type = StateVectorElementConfig self.AIRT_DELTA_K: StateVectorElementConfig = None assert len(self.get_all_elements()) == len(self._get_nontype_attributes()) self._set_statevector_config_options(sub_configdic) def _check_config_validity(self): errors = list() return errors def _set_statevector_config_options(self, configdic): # TODO: update using methods below if configdic is not None: for key in configdic: sv = StateVectorElementConfig(configdic[key]) setattr(self, key, sv)
[docs] def get_all_bounds(self): bounds = [] for element, name in zip(*self.get_elements()): bounds.append(element.bounds) return bounds
[docs] def get_all_scales(self): scales = [] for element, name in zip(*self.get_elements()): scales.append(element.scale) return scales
[docs] def get_all_inits(self): inits = [] for element, name in zip(*self.get_elements()): inits.append(element.init) return inits
[docs] def get_all_prior_means(self): prior_means = [] for element, name in zip(*self.get_elements()): prior_means.append(element.prior_mean) return prior_means
[docs] def get_all_prior_sigmas(self): prior_sigmas = [] for element, name in zip(*self.get_elements()): prior_sigmas.append(element.prior_sigma) return prior_sigmas