def _get_rsr(self): """ Get the relative spectral responses from file, find the bandname, and convert to the requested wave-spave (wavelength or wave number) """ sensor = RelativeSpectralResponse(self.platform_name, self.instrument) if self.wavespace == WAVE_NUMBER: LOG.debug("Converting to wavenumber...") self.rsr, info = convert2wavenumber(sensor.rsr) else: self.rsr = sensor.rsr info = {'unit': sensor.unit, 'si_scale': sensor.si_scale} self._wave_unit = info['unit'] self._wave_si_scale = info['si_scale'] if isinstance(self.band, str): self.bandname = BANDNAMES.get(self.instrument, BANDNAMES['generic']).get(self.band, self.band) elif isinstance(self.band, Number): self.bandwavelength = self.band self.bandname = get_bandname_from_wavelength(self.instrument, self.band, self.rsr) self.wavelength_or_wavenumber = (self.rsr[self.bandname][self.detector][self.wavespace] * self._wave_si_scale) self.response = self.rsr[self.bandname][self.detector]['response'] # Get the integral of the spectral response curve: self.rsr_integral = np.trapz(self.response, self.wavelength_or_wavenumber)
def _get_rsr(self): """Get the relative spectral responses. Get the relative spectral responses from file, find the bandname, and convert to the requested wave-spave (wavelength or wave number) """ sensor = RelativeSpectralResponse(self.platform_name, self.instrument) if self.wavespace == WAVE_NUMBER: LOG.debug("Converting to wavenumber...") self.rsr, info = convert2wavenumber(sensor.rsr) else: self.rsr = sensor.rsr info = {'unit': sensor.unit, 'si_scale': sensor.si_scale} self._wave_unit = info['unit'] self._wave_si_scale = info['si_scale'] if isinstance(self.band, str): self.bandname = BANDNAMES.get(self.instrument, BANDNAMES['generic']).get( self.band, self.band) elif isinstance(self.band, Number): self.bandwavelength = self.band self.bandname = get_bandname_from_wavelength( self.instrument, self.band, self.rsr) self.wavelength_or_wavenumber = ( self.rsr[self.bandname][self.detector][self.wavespace] * self._wave_si_scale) self.response = self.rsr[self.bandname][self.detector]['response'] # Get the integral of the spectral response curve: self.rsr_integral = np.trapz(self.response, self.wavelength_or_wavenumber)
def test_convert2wavenumber(self): """Testing the conversion of rsr from wavelength to wavenumber.""" newrsr, info = utils.convert2wavenumber(TEST_RSR) unit = info['unit'] self.assertEqual(unit, 'cm-1') self.assertTrue('wavenumber' in newrsr['20']['det-1']) self.assertFalse('wavelength' in newrsr['20']['det-1']) wvn_res = RESULT_RSR['20']['det-1']['wavenumber'] wvn = newrsr['20']['det-1']['wavenumber'] self.assertTrue(np.allclose(wvn_res, wvn))
def test_convert2wavenumber(self): """Testing the conversion of rsr from wavelength to wavenumber """ newrsr, info = utils.convert2wavenumber(TEST_RSR) unit = info['unit'] self.assertEqual(unit, 'cm-1') self.assertTrue('wavenumber' in newrsr['20']['det-1']) self.assertFalse('wavelength' in newrsr['20']['det-1']) wvn_res = RESULT_RSR['20']['det-1']['wavenumber'] wvn = newrsr['20']['det-1']['wavenumber'] self.assertTrue(np.allclose(wvn_res, wvn))
def get_rsr(self): """Get all spectral responses for the sensor""" from pyspectral.utils import convert2wavenumber from pyspectral.rsr_reader import RelativeSpectralResponse sensor = RelativeSpectralResponse(self.platform_name, self.instrument) LOG.debug("Wavenumber? %s", str(self.wavespace)) if self.wavespace == WAVE_NUMBER: LOG.debug("Converting to wavenumber...") self.rsr, info = convert2wavenumber(sensor.rsr) else: self.rsr = sensor.rsr info = {'unit': sensor.unit, 'si_scale': sensor.si_scale} self._wave_unit = info['unit'] self._wave_si_scale = info['si_scale']
def get_rsr(self): """Get all spectral responses for the sensor""" from pyspectral.utils import convert2wavenumber from pyspectral.rsr_reader import RelativeSpectralResponse sensor = RelativeSpectralResponse(self.platform, self.satnumber, self.instrument) LOG.debug("Wavenumber? " + str(self.wavespace)) if self.wavespace == WAVE_NUMBER: LOG.debug("Converting to wavenumber...") self.rsr, info = convert2wavenumber(sensor.rsr) else: self.rsr = sensor.rsr info = {'unit': sensor.unit, 'si_scale': sensor.si_scale} self._wave_unit = info['unit'] self._wave_si_scale = info['si_scale']
def convert(self): """Convert spectral response functions from wavelength to wavenumber""" from pyspectral.utils import convert2wavenumber if self._wavespace == WAVL: rsr, info = convert2wavenumber(self.rsr) for band in rsr.keys(): for det in rsr[band].keys(): self.rsr[band][det]['wavenumber'] = rsr[ band][det]['wavenumber'] self.rsr[band][det]['response'] = rsr[ band][det]['response'] self.unit = info['unit'] self.si_scale = info['si_scale'] self._wavespace = WAVN else: raise NotImplementedError("Conversion from wavenumber to " + "wavelength not supported yet")
def convert(self): """Convert spectral response functions from wavelength to wavenumber.""" if self._wavespace == WAVE_LENGTH: rsr, info = convert2wavenumber(self.rsr) for band in rsr.keys(): for det in rsr[band].keys(): self.rsr[band][det][WAVE_NUMBER] = rsr[ band][det][WAVE_NUMBER] self.rsr[band][det]['response'] = rsr[ band][det]['response'] self.unit = info['unit'] self.si_scale = info['si_scale'] self._wavespace = WAVE_NUMBER for band in rsr.keys(): for det in rsr[band].keys(): self.rsr[band][det]['central_wavenumber'] = \ get_central_wave(self.rsr[band][det][WAVE_NUMBER], self.rsr[band][det]['response']) del self.rsr[band][det][WAVE_LENGTH] else: errmsg = "Conversion from {wn} to {wl} not supported yet".format(wn=WAVE_NUMBER, wl=WAVE_LENGTH) raise NotImplementedError(errmsg)
def convert(self): """Convert spectral response functions from wavelength to wavenumber""" from pyspectral.utils import (convert2wavenumber, get_central_wave) if self._wavespace == WAVE_LENGTH: rsr, info = convert2wavenumber(self.rsr) for band in rsr.keys(): for det in rsr[band].keys(): self.rsr[band][det][WAVE_NUMBER] = rsr[ band][det][WAVE_NUMBER] self.rsr[band][det]['response'] = rsr[ band][det]['response'] self.unit = info['unit'] self.si_scale = info['si_scale'] self._wavespace = WAVE_NUMBER for band in rsr.keys(): for det in rsr[band].keys(): self.rsr[band][det]['central_wavenumber'] = \ get_central_wave(self.rsr[band][det][WAVE_NUMBER], self.rsr[band][det]['response']) del self.rsr[band][det][WAVE_LENGTH] else: errmsg = "Conversion from {wn} to {wl} not supported yet".format(wn=WAVE_NUMBER, wl=WAVE_LENGTH) raise NotImplementedError(errmsg)