Source code for isofit.configs.sections.surface_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 os
from typing import Dict, List, Type

import numpy as np

from isofit.configs.base_config import BaseConfigSection


[docs] class SurfaceConfig(BaseConfigSection): """ Instrument configuration. """ def __init__(self, sub_configdic: dict = None): self._surface_file_type = str self.surface_file = None self._surface_category_type = str self.surface_category = None self._wavelength_file_type = str self.wavelength_file = None # Multicomponent Surface self._select_on_init_type = bool self.select_on_init = True """bool: This field, if present and set to true, forces us to use any initialization state and never change. The state is preserved in the geometry object so that this object stays stateless""" self._selection_metric_type = str self.selection_metric = "Euclidean" # Surface Thermal self._emissivity_for_surface_T_init_type = float self.emissivity_for_surface_T_init = 0.98 """ Initial Value recommended by Glynn Hulley.""" self._surface_T_prior_sigma_degK_type = float self.surface_T_prior_sigma_degK = 1.0 self.set_config_options(sub_configdic) def _check_config_validity(self) -> List[str]: errors = list() valid_surface_categories = [ "surface", "multicomponent_surface", "glint_surface", "thermal_surface", "lut_surface", ] if self.surface_category is None: errors.append("surface->surface_category must be specified") elif self.surface_category not in valid_surface_categories: errors.append( "surface->surface_category: {} not in valid surface categories: {}".format( self.surface_category, valid_surface_categories ) ) if self.surface_category is None: errors.append("surface->surface_category must be specified") valid_normalize_categories = ["Euclidean", "RMS", "None"] if self.normalize not in valid_normalize_categories: errors.append( "surface->normalize: {} not in valid normalize choices: {}".format( self.normalize, valid_normalize_categories ) ) return errors