Source code for isofit.configs.sections.output_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

from typing import Dict, List, Type

import numpy as np

from isofit.configs.base_config import BaseConfigSection


[docs] class OutputConfig(BaseConfigSection): """ Output file(s) configuration. """ def __init__(self, sub_configdic: dict = None): self._estimated_state_file_header = ( "statevector", "{State Parameter, Value}", "{}", ) self._estimated_state_file_type = str self.estimated_state_file = None self._estimated_reflectance_file_header = ( "wavelength", "{Wavelength (nm), Lambertian Reflectance}", "{0.0,1.0}", ) self._estimated_reflectance_file_type = str self.estimated_reflectance_file = None self._estimated_emission_file_header = ( "wavelength", "{Wavelength (nm), Emitted Radiance (uW nm-1 cm-2 sr-1)}", "{}", ) self._estimated_emission_file_type = str self.estimated_emission_file = None self._modeled_radiance_file_header = ( "wavelength", "{Wavelength (nm), Modeled Radiance (uW nm-1 cm-2 sr-1)}", "{}", ) self._modeled_radiance_file_type = str self.modeled_radiance_file = None self._apparent_reflectance_file_header = ( "wavelength", "{Wavelength (nm), Apparent Surface Reflectance}", "{}", ) self._apparent_reflectance_file_type = str self.apparent_reflectance_file = None self._path_radiance_file_header = ( "wavelength", "{Wavelength (nm), Path Radiance (uW nm-1 cm-2 sr-1)}", "{}", ) self._path_radiance_file_type = str self.path_radiance_file = None self._simulated_measurement_file_header = ( "wavelength", "{Wavelength (nm), Simulated Radiance (uW nm-1 cm-2 sr-1)}", "{}", ) self._simulated_measurement_file_type = str self.simulated_measurement_file = None self._algebraic_inverse_file_header = ( "wavelength", "{Wavelength (nm), Apparent Surface Reflectance}", "{}", ) self._algebraic_inverse_file_type = str self.algebraic_inverse_file = None self._atmospheric_coefficients_file_header = ( "atm_coeffs", "{Wavelength (nm), Atmospheric Optical Parameters}", "{}", ) self._atmospheric_coefficients_file_type = str self.atmospheric_coefficients_file = None self._radiometry_correction_file_header = ( "wavelength", "{Wavelength (nm), Radiometric Correction Factors}", "{}", ) self._radiometry_correction_file_type = str self.radiometry_correction_file = None self._spectral_calibration_file_header = ("wavelength", "{}", "{}") self._spectral_calibration_file_type = str self.spectral_calibration_file = None self._posterior_uncertainty_file_header = ( "statevector", "{State Parameter, Value}", "{}", ) self._posterior_uncertainty_file_type = str self.posterior_uncertainty_file = None self._plot_surface_components_type = bool self.plot_surface_components = False self._mcmc_samples_file_type = str self.mcmc_samples_file = None self.set_config_options(sub_configdic) def _check_config_validity(self) -> List[str]: errors = list() # TODO: add flags for rile overright, and make sure files don't exist if not checked? return errors
[docs] def get_all_output_file_names(self): keys = [] for key in self._get_nontype_attributes(): if hasattr(self, "_{}_header".format(key)): keys.append(key) return keys
[docs] def get_output_files(self): names = self.get_all_output_file_names() elements = [getattr(self, name) for name in names] headers = [getattr(self, "_{}_header".format(name)) for name in names] valid = [x is not None for x in elements] elements = [elements[x] for x in range(len(elements)) if valid[x]] headers = [headers[x] for x in range(len(headers)) if valid[x]] names = [names[x] for x in range(len(names)) if valid[x]] order = np.argsort(names) elements = [elements[idx] for idx in order] headers = [headers[idx] for idx in order] names = [names[idx] for idx in order] return elements, headers, names