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

from isofit.configs.base_config import BaseConfigSection


[docs] class InputConfig(BaseConfigSection): def __init__(self, sub_configdic: dict = None): """ Input file(s) configuration. """ self._measured_radiance_file_type = str self.measured_radiance_file = None """ str: Input radiance file. Can be either a .mat, .txt, or ENVI formatted binary cube. Used for inverse-modeling (radiance -> reflectance). """ self._reference_reflectance_file_type = str self.reference_reflectance_file = None """ str: Input reference reflectance (to be compared against) file. Can be either a .mat, .txt, or ENVI formatted binary cube. Used for radiometric calibration. """ self._reflectance_file_type = str self.reflectance_file = None """ str: Input reflectance file. Can be either a .mat, .txt, or ENVI formatted binary cube. Used for forward-modeling (reflectance -> radiance). """ self._obs_file_type = str self.obs_file = None """ str: Input 'obs', or observation, file. Can be either a .mat, .txt, or ENVI formatted binary cube. Provides information about the conditions during observaiton. Assumed to be in the band-wise format: {path length, to-sensor azimuth, to-sensor zenith, to-sun azimuth, to-sun zenith, phase, slope, aspect, cosine i, UTC time} """ self._glt_file_type = str self.glt_file = None """ str: Input glt file. Can be either a .mat, .txt, or ENVI formatted binary cube. Provides (x,y) offset information for the spatial location of raw-space input files """ self._loc_file_type = str self.loc_file = None """ str: Input 'loc', or location, file. Can be either a .mat, .txt, or ENVI formatted binary cube. Provides per-pixel lat, long, and elevation information. """ self._background_reflectance_file_type = str self.background_reflectance_file = None """ str: Background reflectance file used for spatial inference. Should be an ENVI formatted binary cube that is the same dimensions as the input data cube. """ self._radiometry_correction_file_type = str self.radiometry_correction_file = None """ str: Input radiometric correction file. Can be either a .mat, .txt, or ENVI formatted binary cube. Used to make minor channelized corrections to account for slight systematic errors not captured in calibration. """ self.set_config_options(sub_configdic) def _check_config_validity(self) -> List[str]: errors = list() # Check that all input files exist for key in self._get_nontype_attributes(): value = getattr(self, key) if value is not None: if os.path.isfile(value) is False: errors.append( "Config value Input->{}: {} not found".format(key, value) ) # TODO: check that the right combination of input files exists # Recursive call to any sub-config-module errors for key in self.__dict__.keys(): value = getattr(self, key) if callable(key): errors.extend(value.check_config_validity()) return errors