def __init__(self, data, header=None, params=None): '''Creates a new spectral library array Arguments: `data` (array-like): Array with shape `CxB`, where `C` is the number of spectra in the library and `B` is the number of bands for each spectrum. `header` (dict): Optional dict of ENVI header parameters. `params` (Params): Optional SpyFile Params object ''' from spectral.spectral import BandInfo self.spectra = data (n_spectra, n_bands) = data.shape if header is None: header = {} header = header.copy() self.bands = BandInfo() centers = header.pop('wavelength', None) if centers is not None: if len(centers) != n_bands: raise ValueError('Number of band centers does not match data') self.bands.centers = [float(c) for c in centers] fwhm = header.pop('fwhm', None) if fwhm is not None: if len(fwhm) != n_bands: raise ValueError('Number of fwhm values does not match data') self.bands.bandwidths = [float(f) for f in fwhm] names = header.pop('spectra names', None) if names is not None: if len(names) != n_spectra: raise ValueError( 'Number of spectrum names does not match data') self.names = names else: self.names = [str(i + 1) for i in range(n_spectra)] self.bands.band_unit = header.get('wavelength units', "<unspecified>") self.bands.band_quantity = "Wavelength" self.params = params self.metadata = header.copy() self.metadata['data ignore value'] = 'NaN'
def __init__(self, data, header, params): from spectral.spectral import BandInfo self.spectra = data self.bands = BandInfo() if 'wavelength' in header: try: self.bands.centers = [float(b) for b in header['wavelength']] except: pass if 'fwhm' in header: try: self.bands.bandwidths = [float(f) for f in header['fwhm']] except: pass if 'spectra names' in header: self.names = header['spectra names'] else: self.names = [''] * self.bands.shape[0] self.bands.band_unit = header.get('wavelength units', "") self.bands.band_quantity = "Wavelength" self.params = params self.metadata = {} self.metadata.update(header) self.metadata['data ignore value'] = 'NaN'