private List<Product> createCollocatedProducts(List<Product> dailyGroupedProducts) { final ArrayList<Product> collocatedProducts = new ArrayList<Product>(); final HashMap<String, Object> projectionParameters = createProjectionParameters(); for (Product product : dailyGroupedProducts) { HashMap<String, Product> productToBeReprojectedMap = new HashMap<String, Product>(); productToBeReprojectedMap.put("source", product); productToBeReprojectedMap.put("collocateWith", timeSeriesDataProduct); final Product collocatedProduct = GPF.createProduct("Reproject", projectionParameters, productToBeReprojectedMap); Band band; if (sourceBandName != null) { band = collocatedProduct.getBand(sourceBandName); } else { band = collocatedProduct.addBand(BAND_MATH_EXPRESSION_BAND_NAME, bandMathsExpression); } if (StringUtils.isNotNullAndNotEmpty(validPixelExpression)) { band.setValidPixelExpression(validPixelExpression); } collocatedProducts.add(collocatedProduct); } return collocatedProducts; }
private void setBandProperties(Band band, String validMaskExpression) { band.setDescription(bandDescription); band.setUnit(bandUnit); band.setSpectralWavelength(bandWavelength); band.setGeophysicalNoDataValue(noDataValue); band.setNoDataValueUsed(noDataValueUsed); band.setValidPixelExpression(validMaskExpression); }
private Band addBand(RasterDataNode raster, TimeCoding rasterTimeCoding, String bandName) { final Band band = new Band(bandName, raster.getDataType(), tsProduct.getSceneRasterWidth(), tsProduct.getSceneRasterHeight()); band.setSourceImage(raster.getSourceImage()); ProductUtils.copyRasterDataNodeProperties(raster, band); // todo copy also referenced band in valid pixel expression band.setValidPixelExpression(null); rasterTimeMap.put(band, rasterTimeCoding); tsProduct.addBand(band); return band; }
private static void setGeneralBandProperties(Band band, Element element, Product product) { if (band != null) { final String validMaskExpression = getValidMaskExpression(element); if (validMaskExpression != null && validMaskExpression.trim().length() > 0) { band.setValidPixelExpression(validMaskExpression); } setUnit(element, band); setSpectralWaveLength(element, band); setSpectralBandWidth(element, band); setSolarFlux(element, band); setSpectralBandIndex(element, band); setScaling(element, band); setFlagCoding(element, band, product); setIndexCoding(element, band, product); setNoDataValueUsed(element, band); setNoDataValue(element, band); } }
private Band addBand(Product product, BandReader bandReader, int channelIndex) { final Band band = product.addBand(bandReader.getBandName(), bandReader.getDataType()); band.setScalingFactor(bandReader.getScalingFactor()); band.setUnit(bandReader.getBandUnit()); band.setDescription(bandReader.getBandDescription()); band.setSpectralBandIndex(channelIndex + 1); band.setValidPixelExpression(band.getName() + " != NaN"); bandReaderMap.put(band, bandReader); return band; }
private Product createProduct(FlagCoding fc, int i) { Product p3 = new Product("p" + i, "t" + i, 16, 16); p3.setRefNo(i); p3.getFlagCodingGroup().add(fc); p3.addBand("f", ProductData.TYPE_UINT8).setSampleCoding(fc); p3.addBand("q", ProductData.TYPE_UINT32); p3.addBand("l", ProductData.TYPE_UINT32).setValidPixelExpression("f.LAND && !f.INVALID"); p3.addBand("w", ProductData.TYPE_UINT32).setValidPixelExpression("f.WATER && !f.INVALID"); p3.addBand("c", ProductData.TYPE_UINT32).setValidPixelExpression("f.CLOUD && !f.INVALID"); return p3; }
private static void readBeamBandAttributes(Variable variable, Band band) { // todo se -- units for bandwidth and wavelength Attribute attribute = variable.findAttribute(BANDWIDTH); if (attribute != null) { band.setSpectralBandwidth(attribute.getNumericValue().floatValue()); } attribute = variable.findAttribute(WAVELENGTH); if (attribute != null) { band.setSpectralWavelength(attribute.getNumericValue().floatValue()); } attribute = variable.findAttribute(SPECTRAL_BAND_INDEX); if (attribute != null) { band.setSpectralBandIndex(attribute.getNumericValue().intValue()); } attribute = variable.findAttribute(VALID_PIXEL_EXPRESSION); if (attribute != null) { band.setValidPixelExpression(attribute.getStringValue()); } attribute = variable.findAttribute(SOLAR_FLUX); if (attribute != null) { band.setSolarFlux(attribute.getNumericValue().floatValue()); } band.setName(ReaderUtils.getRasterName(variable)); }
private void addRciAndMaskBands(final Product product) { final String units = chrisFile.getGlobalAttribute(ChrisConstants.ATTR_NAME_CALIBRATION_DATA_UNITS); for (int i = 0; i < spectralBandCount; ++i) { final String name = MessageFormat.format("radiance_{0}", i + 1); final Band band = product.addBand(name, ProductData.TYPE_INT32); band.setSpectralBandIndex(i); band.setSpectralWavelength(chrisFile.getWavelength(i)); band.setSpectralBandwidth(chrisFile.getBandwidth(i)); band.setUnit(units); band.setDescription(MessageFormat.format("Radiance for spectral band {0}", i + 1)); band.setValidPixelExpression(MessageFormat.format("mask_{0} != {1}", i + 1, Flags.DROPOUT.getMask())); rciBands[i] = band; } for (int i = 0; i < spectralBandCount; ++i) { final String name = MessageFormat.format("mask_{0}", i + 1); final Band band = product.addBand(name, ProductData.TYPE_INT16); band.setSpectralBandIndex(i); band.setSpectralWavelength(chrisFile.getWavelength(i)); band.setSpectralBandwidth(chrisFile.getBandwidth(i)); band.setDescription(MessageFormat.format("Quality mask for spectral band {0}", i + 1)); maskBands[i] = band; } product.setAutoGrouping("radiance:mask"); }
@Test public void testNoDataParameter_WithExpression() throws IOException { parameterMap.put("crs", UTM33N_CODE); parameterMap.put("noDataValue", 42.0); final Band srcBand = sourceProduct.getBand(FLOAT_BAND_NAME); srcBand.setValidPixelExpression("fneq("+FLOAT_BAND_NAME + ",299)"); final Product targetPoduct = createReprojectedProduct(); assertNoDataValue(targetPoduct.getBand(FLOAT_BAND_NAME), new PixelPos(23.5f, 13.5f), 42.0, 42.0); }
private void addTargetBands(Product product) { for (Variable outputVariable : variables) { Band band = product.addBand(outputVariable.getName(), ProductData.TYPE_FLOAT32); band.setDescription(outputVariable.getExpression()); final String countBandName = getCountBandName(outputVariable); band.setValidPixelExpression(String.format("%s > 0", Tokenizer.createExternalName(countBandName))); Band countBand = product.addBand(countBandName, ProductData.TYPE_INT32); countBand.setDescription(String.format("Count of %s", outputVariable.getName())); } if (conditions != null) { for (Condition condition : conditions) { if (condition.isOutput()) { Band band = product.addBand(condition.getName(), ProductData.TYPE_INT32); band.setDescription(condition.getExpression()); } } } }
@Test public void testNoDataIsReplaced_WithNaN() throws IOException { parameterMap.put("crs", UTM33N_CODE); final Band srcBand = sourceProduct.getBand(FLOAT_BAND_NAME); srcBand.setValidPixelExpression("fneq("+FLOAT_BAND_NAME + ",299)"); final Product targetPoduct = createReprojectedProduct(); assertNoDataValue(targetPoduct.getBand(FLOAT_BAND_NAME), new PixelPos(23.5f, 13.5f), Float.NaN, Float.NaN); }
@Test public void testNoDataParameter_WithExpressionAndValue() throws IOException { parameterMap.put("crs", UTM33N_CODE); parameterMap.put("noDataValue", 42.0); final Band srcBand = sourceProduct.getBand(FLOAT_BAND_NAME); srcBand.setNoDataValue(299); srcBand.setNoDataValueUsed(true); srcBand.setValidPixelExpression("fneq("+FLOAT_BAND_NAME + ",299)"); final Product targetPoduct = createReprojectedProduct(); assertNoDataValue(targetPoduct.getBand(FLOAT_BAND_NAME), new PixelPos(23.5f, 13.5f), 42.0, 42.0); }
@Override protected void configureTargetProduct(ProductConfigurer productConfigurer) { super.configureTargetProduct(productConfigurer); final String validPixelExpression = createValidMaskExpression(); final Band lineHeightBand = productConfigurer.addBand(lineHeightBandName, ProductData.TYPE_FLOAT32); final Band signalBand = sourceProduct.getBand(signalBandName); lineHeightBand.setUnit(signalBand.getUnit()); lineHeightBand.setDescription("Line height band"); lineHeightBand.setValidPixelExpression(validPixelExpression); lineHeightBand.setNoDataValueUsed(true); lineHeightBand.setNoDataValue(invalidFlhMciValue); ProductUtils.copySpectralBandProperties(signalBand, lineHeightBand); if (slope) { final Band slopeBand = productConfigurer.addBand(slopeBandName, ProductData.TYPE_FLOAT32); slopeBand.setUnit(signalBand.getUnit() + " nm-1"); slopeBand.setDescription("Baseline slope band"); slopeBand.setNoDataValueUsed(true); slopeBand.setNoDataValue(Double.NaN); slopeBand.setValidPixelExpression(validPixelExpression); } ProductUtils.copyFlagBands(sourceProduct, productConfigurer.getTargetProduct(), true); }
@Test public void testNoDataIsPreservedFloat_withExpression() throws IOException { parameterMap.put("crs", UTM33N_CODE); final Band srcBand = sourceProduct.getBand(FLOAT_BAND_NAME); srcBand.setNoDataValue(299); srcBand.setNoDataValueUsed(true); srcBand.setValidPixelExpression("fneq("+FLOAT_BAND_NAME + ",299)"); final Product targetPoduct = createReprojectedProduct(); assertNoDataValue(targetPoduct.getBand(FLOAT_BAND_NAME), new PixelPos(23.5f, 13.5f), 299.0, 299.0); }
protected Band createBand(BandReader bandReader, int channel) { final Band band = new Band(bandReader.getBandName(), bandReader .getDataType(), avhrrFile.getProductWidth(), avhrrFile .getProductHeight()); band.setScalingFactor(bandReader.getScalingFactor()); band.setUnit(bandReader.getBandUnit()); band.setDescription(bandReader.getBandDescription()); band.setSpectralBandIndex(channel); band.setSpectralBandwidth(CH_BANDWIDTHS[channel]); band.setSpectralWavelength(CH_WAVELENGTHS[channel]); band.setValidPixelExpression(CH_VALID_MASK_EXPRESSIONS[channel]); band.setNoDataValue(NO_DATA_VALUE); band.setNoDataValueUsed(true); bandReaders.put(band, bandReader); return band; }
"Replaced old valid pixel expression '" + oldExpression + "' by '" + newExpression + "'."); band.setValidPixelExpression(newExpression);
@Test public void testNoDataIfExpressionIsGiven_Int() throws IOException { parameterMap.put("crs", WGS84_CODE); final Band srcBand = sourceProduct.getBand(INT_BAND_NAME); srcBand.setValidPixelExpression("(X-0.5) != 4"); final Product targetPoduct = createReprojectedProduct(); final Band targetBand = targetPoduct.getBand(INT_BAND_NAME); assertNoDataValue(targetBand, new PixelPos(4.5f, 0.5f), 0, 0.0); assertNoDataValue(targetBand, new PixelPos(4.5f, 1.5f), 0, 0.0); assertNoDataValue(targetBand, new PixelPos(4.5f, 18.5f), 0, 0.0); assertNoDataValue(targetBand, new PixelPos(5.5f, 18.5f), 0, 90.0); }
@Test public void testReferencedRastersAreIncluded() throws Exception { final Product sp = createTestProduct(100, 100); sp.getBand("radiance_1").setValidPixelExpression("radiance_2 > 0"); final String[] bandNames = {"radiance_1", "radiance_3"}; SubsetOp op = new SubsetOp(); op.setSourceProduct(sp); op.setBandNames(bandNames); Product tp = op.getTargetProduct(); assertEquals(3, tp.getNumBands()); assertNotNull(tp.getBand("radiance_1")); assertEquals("radiance_2 > 0", tp.getBand("radiance_1").getValidPixelExpression()); assertNotNull(tp.getBand("radiance_2")); assertNotNull(tp.getBand("radiance_3")); }
public void testNodeDataChangedEventFired() { Band b = p.addBand("b", ProductData.TYPE_FLOAT32); assertEquals(false, b.isNoDataValueUsed()); assertEquals(0.0, b.getNoDataValue(), 1e-15); assertEquals(null, b.getValidPixelExpression()); assertEquals(null, b.getValidMaskExpression()); ChangeDetector detector = new ChangeDetector(); p.addProductNodeListener(detector); assertEquals(0, detector.nodeDataChanges); b.setNoDataValue(-1.0); assertEquals(0, detector.nodeDataChanges); b.setNoDataValueUsed(true); assertEquals(1, detector.nodeDataChanges); b.setNoDataValue(-1.0); assertEquals(1, detector.nodeDataChanges); b.setNoDataValueUsed(false); assertEquals(2, detector.nodeDataChanges); b.setNoDataValue(-999.0); assertEquals(2, detector.nodeDataChanges); b.setNoDataValueUsed(true); assertEquals(3, detector.nodeDataChanges); b.setValidPixelExpression("a >= 0 && a <= 1"); assertEquals(4, detector.nodeDataChanges); }
band1.setSpectralWavelength(23.45f); band1.setSpectralBandIndex(0); band1.setValidPixelExpression("Flags1.Flag1C"); band1.setStx(createStx()); product.addBand(band1);