private void copyStx(RasterDataNode sourceRaster, RasterDataNode targetRaster) { final Stx sourceStx = sourceRaster.getStx(); final Histogram sourceHistogram = sourceStx.getHistogram(); final Histogram targetHistogram = new Histogram( sourceStx.getHistogramBinCount(), sourceHistogram.getLowValue(0), sourceHistogram.getHighValue(0), 1); System.arraycopy( sourceHistogram.getBins(0), 0, targetHistogram.getBins(0), 0, sourceStx.getHistogramBinCount()); final Stx targetStx = new Stx( sourceStx.getMinimum(), sourceStx.getMaximum(), sourceStx.getMean(), sourceStx.getStandardDeviation(), sourceStx.getCoefficientOfVariation(), sourceStx.getEquivalentNumberOfLooks(), sourceStx.isLogHistogram(), sourceStx.isIntHistogram(), targetHistogram, sourceStx.getResolutionLevel()); targetRaster.setStx(targetStx); }
private Integer createBandH5D(Band band) throws IOException { final int w = band.getRasterWidth(); final int h = band.getRasterHeight(); long[] dims = new long[] {h, w}; int datasetID = -1; int fileTypeID = -1; int fileSpaceID = -1; try { fileTypeID = createH5TypeID(band.getDataType()); fileSpaceID = H5.H5Screate_simple(2, dims, null); datasetID = H5.H5Dcreate( _fileID, "/bands/" + band.getName(), fileTypeID, fileSpaceID, HDF5Constants.H5P_DEFAULT); try { // @todo 1 nf/tb - MEMOPT: add min, max here createScalarAttribute(datasetID, "raster_width", band.getRasterWidth()); createScalarAttribute(datasetID, "raster_height", band.getRasterHeight()); createScalarAttribute(datasetID, "scaling_factor", band.getScalingFactor()); createScalarAttribute(datasetID, "scaling_offset", band.getScalingOffset()); createScalarAttribute(datasetID, "log10_scaled", band.isLog10Scaled() ? "true" : "false"); createScalarAttribute(datasetID, "unit", band.getUnit()); createScalarAttribute(datasetID, "description", band.getDescription()); if (band.getSpectralBandIndex() >= 0) { createScalarAttribute(datasetID, "spectral_band_index", band.getSpectralBandIndex() + 1); createScalarAttribute(datasetID, "solar_flux", band.getSolarFlux()); createScalarAttribute(datasetID, "bandwidth", band.getSpectralBandwidth()); createScalarAttribute(datasetID, "wavelength", band.getSpectralWavelength()); } if (band.getFlagCoding() != null) { createScalarAttribute(datasetID, "flag_coding", band.getFlagCoding().getName()); } createScalarAttribute(datasetID, "CLASS", "IMAGE"); createScalarAttribute(datasetID, "IMAGE_VERSION", 1.2F); if (band.isStxSet()) { final Stx stx = band.getStx(); createScalarAttribute(datasetID, "min_sample", stx.getMinimum()); createScalarAttribute(datasetID, "max_sample", stx.getMaximum()); } if (band.getImageInfo() != null) { final ColorPaletteDef paletteDef = band.getImageInfo().getColorPaletteDef(); float[] minmax = new float[] { (float) paletteDef.getMinDisplaySample(), (float) paletteDef.getMaxDisplaySample() }; createArrayAttribute(datasetID, "IMAGE_MINMAXRANGE", minmax); } } catch (IOException e) { /* ignore IOException because these attributes are not very essential... */ Debug.trace("failed to create attribute: " + e.getMessage()); } } catch (HDF5Exception e) { closeH5D(datasetID); throw new ProductIOException(createErrorMessage(e)); } finally { closeH5S(fileSpaceID); closeH5T(fileTypeID); } return datasetID; }