/** * Creates the flag codings for nadir and (optionally) forward bands */ private void createFlagCodings() { _flagCodingNadir = new FlagCoding(AtsrConstants.NADIR_FLAGS_NAME); _flagCodingNadir = addCloudAndLandFlagsToCoding(_flagCodingNadir); if (!getHeader().isNadirOnly()) { _flagCodingForward = new FlagCoding(AtsrConstants.FORWARD_FLAGS_NAME); _flagCodingForward = addCloudAndLandFlagsToCoding(_flagCodingForward); } }
/** * Creates the flag codings for nadir and (optionally) forward bands */ private void createFlagCodings() { _flagCodingConfidence = new FlagCoding(AtsrGSSTConstants.CONFIDENCE_FLAGS_NAME); _flagCodingConfidence = addConfidenceFlagsToCoding(_flagCodingConfidence); if (getHeader().areFlagsPresent()) { _flagCodingNadir = new FlagCoding(AtsrConstants.NADIR_FLAGS_NAME); _flagCodingNadir = addCloudAndLandFlagsToCoding(_flagCodingNadir); if (!getHeader().isNadirOnly()) { _flagCodingForward = new FlagCoding(AtsrConstants.FORWARD_FLAGS_NAME); _flagCodingForward = addCloudAndLandFlagsToCoding(_flagCodingForward); } } }
private static FlagCoding createFlagCoding(String codingName, int[] maskValues, String[] flagNames) { if (maskValues != null && flagNames != null && maskValues.length == flagNames.length) { final FlagCoding coding = new FlagCoding(codingName); for (int i = 0; i < maskValues.length; i++) { final String sampleName = replaceNonWordCharacters(flagNames[i]); final int sampleValue = maskValues[i]; coding.addSample(sampleName, sampleValue, ""); } if (coding.getNumAttributes() > 0) { return coding; } } return null; }
private static FlagCoding createFlagCoding(String codingName, int[] maskValues, String[] flagNames) { if (maskValues != null && flagNames != null && maskValues.length == flagNames.length) { final FlagCoding coding = new FlagCoding(codingName); for (int i = 0; i < maskValues.length; i++) { final String sampleName = replaceNonWordCharacters(flagNames[i]); final int sampleValue = maskValues[i]; coding.addSample(sampleName, sampleValue, ""); } if (coding.getNumAttributes() > 0) { return coding; } } return null; }
private static void addFlagCoding(Product product, FlagCoding flagCoding, String flagCodingName) { final FlagCoding targetFlagCoding = new FlagCoding(flagCodingName); targetFlagCoding.setDescription(flagCoding.getDescription()); ProductUtils.copyMetadata(flagCoding, targetFlagCoding); product.getFlagCodingGroup().add(targetFlagCoding); }
private static void addFlagCoding(Product product, FlagCoding flagCoding) { final FlagCoding targetFlagCoding = new FlagCoding(flagCoding.getName()); targetFlagCoding.setDescription(flagCoding.getDescription()); ProductUtils.copyMetadata(flagCoding, targetFlagCoding); product.getFlagCodingGroup().add(targetFlagCoding); }
private static void addFlagCoding(Product product) { final FlagCoding flagCoding = new FlagCoding("Flags"); flagCoding.addFlag("land", 1, "Land Flag"); flagCoding.addFlag("bright", 2, "Bright Flag"); product.getFlagCodingGroup().add(flagCoding); }
private FlagCoding createFlagCoding() { FlagCoding fc = new FlagCoding("flags"); fc.addFlag("INVALID", 0x01, "Invalid"); fc.addFlag("LAND", 0x02, "Land"); fc.addFlag("WATER", 0x04, "Water"); fc.addFlag("CLOUD", 0x08, "Cloud"); return fc; }
protected void addFlagCodingsToProduct(Product product) { final ProductNodeGroup<FlagCoding> flagCodingGroup = getSourceProduct().getFlagCodingGroup(); for (int i = 0; i < flagCodingGroup.getNodeCount(); i++) { FlagCoding sourceFlagCoding = flagCodingGroup.get(i); FlagCoding destFlagCoding = new FlagCoding(sourceFlagCoding.getName()); destFlagCoding.setDescription(sourceFlagCoding.getDescription()); cloneFlags(sourceFlagCoding, destFlagCoding); product.getFlagCodingGroup().add(destFlagCoding); } }
/** * Copies the given source flag coding to the target product. * If it exists already, the method simply returns the existing instance. * * @param sourceFlagCoding the source flag coding * @param target the target product * * @return The flag coding. */ public static FlagCoding copyFlagCoding(FlagCoding sourceFlagCoding, Product target) { FlagCoding flagCoding = target.getFlagCodingGroup().get(sourceFlagCoding.getName()); if (flagCoding == null) { flagCoding = new FlagCoding(sourceFlagCoding.getName()); flagCoding.setDescription(sourceFlagCoding.getDescription()); target.getFlagCodingGroup().add(flagCoding); copyMetadata(sourceFlagCoding, flagCoding); } return flagCoding; }
protected void addFlagCodingAndBitmaskDef() { BandReader bandReader = avhrrFile.createFlagBandReader(); Band flagsBand = new Band(bandReader.getBandName(), bandReader .getDataType(), avhrrFile.getProductWidth(), avhrrFile .getProductHeight()); FlagCoding fc = new FlagCoding(bandReader.getBandName()); fc.setDescription("Flag coding for AVHRR data quality"); addFlagAndBitmaskDef(fc, FLAG_QS, FLAG_QS_DESC, 0); addFlagAndBitmaskDef(fc, FLAG_SCANLINE, FLAG_SCANLINE_DESC, 1); addFlagAndBitmaskDef(fc, FLAG_3B, FLAG_SCANLINE_DESC, 2); addFlagAndBitmaskDef(fc, FLAG_4, FLAG_SCANLINE_DESC, 3); addFlagAndBitmaskDef(fc, FLAG_5, FLAG_SCANLINE_DESC, 4); addFlagAndBitmaskDef(fc, FLAG_SYNC, FLAG_SYNC_DESC, 5); flagsBand.setSampleCoding(fc); product.getFlagCodingGroup().add(fc); product.addBand(flagsBand); bandReaders.put(flagsBand, bandReader); }
private static void attachSynthesisQualityFlagBand(Product probavProduct, Product flagProduct) { FlagCoding probavSmFlagCoding = new FlagCoding(ProbaVConstants.SM_FLAG_BAND_NAME); ProbaVUtils.addSynthesisQualityFlags(probavSmFlagCoding); ProbaVUtils.addSynthesisQualityMasks(probavProduct); probavProduct.getFlagCodingGroup().add(probavSmFlagCoding); final Band smFlagBand = probavProduct.addBand(ProbaVConstants.SM_FLAG_BAND_NAME, ProductData.TYPE_INT16); smFlagBand.setDescription("PROBA-V Synthesis SM Flags"); smFlagBand.setSampleCoding(probavSmFlagCoding); ProbaVSynthesisBitMaskOp bitMaskOp = new ProbaVSynthesisBitMaskOp(); bitMaskOp.setParameterDefaultValues(); bitMaskOp.setSourceProduct("sourceProduct", flagProduct); Product bitMaskProduct = bitMaskOp.getTargetProduct(); smFlagBand.setSourceImage(bitMaskProduct.getBand(ProbaVConstants.SM_FLAG_BAND_NAME).getSourceImage()); }
private static void attachL1cQualityFlagBand(Product probavProduct, Product flagProduct, String sourceQualityBandName) { final String targetQualityFlagBandName = sourceQualityBandName + "_FLAGS"; FlagCoding probavL1cQualityFlagCoding = new FlagCoding(targetQualityFlagBandName); ProbaVUtils.addL1cQualityFlags(probavL1cQualityFlagCoding, sourceQualityBandName); ProbaVUtils.addL1cQualityMasks(probavProduct, sourceQualityBandName, targetQualityFlagBandName); probavProduct.getFlagCodingGroup().add(probavL1cQualityFlagCoding); final Band l1cQualityFlagBand = probavProduct.addBand(targetQualityFlagBandName, ProductData.TYPE_UINT8); l1cQualityFlagBand.setDescription("PROBA-V L1C Quality Flags"); l1cQualityFlagBand.setSampleCoding(probavL1cQualityFlagCoding); ProbaVL1cBitMaskOp bitMaskOp = new ProbaVL1cBitMaskOp(); bitMaskOp.setParameterDefaultValues(); bitMaskOp.setParameter("sourceQualityBandName", sourceQualityBandName); bitMaskOp.setParameter("targetQualityFlagBandName", targetQualityFlagBandName); bitMaskOp.setSourceProduct("sourceProduct", flagProduct); Product bitMaskProduct = bitMaskOp.getTargetProduct(); l1cQualityFlagBand.setSourceImage(bitMaskProduct.getBand(targetQualityFlagBandName).getSourceImage()); }
private static FlagCoding createNdviFlagCoding() { FlagCoding ndviFlagCoding = new FlagCoding("ndvi_flags"); ndviFlagCoding.setDescription("NDVI Flag Coding"); MetadataAttribute attribute; attribute = new MetadataAttribute(NDVI_ARITHMETIC_FLAG_NAME, ProductData.TYPE_INT32); attribute.getData().setElemInt(NDVI_ARITHMETIC_FLAG_VALUE); attribute.setDescription("NDVI value calculation failed due to an arithmetic exception"); ndviFlagCoding.addAttribute(attribute); attribute = new MetadataAttribute(NDVI_LOW_FLAG_NAME, ProductData.TYPE_INT32); attribute.getData().setElemInt(NDVI_LOW_FLAG_VALUE); attribute.setDescription("NDVI value is too low"); ndviFlagCoding.addAttribute(attribute); attribute = new MetadataAttribute(NDVI_HIGH_FLAG_NAME, ProductData.TYPE_INT32); attribute.getData().setElemInt(NDVI_HIGH_FLAG_VALUE); attribute.setDescription("NDVI value is too high"); ndviFlagCoding.addAttribute(attribute); return ndviFlagCoding; }
private FlagCoding createFlagCoding(String bandName) { FlagCoding flagCoding = new FlagCoding(bandName); flagCoding.addFlag("designated_fill", 1, "Designated Fill"); flagCoding.addFlag("dropped_frame", 2, "Dropped Frame"); flagCoding.addFlag("terrain_occlusion", 4, "Terrain Occlusion"); flagCoding.addFlag("reserved_1", 8, "Reserved for a future 1-bit class artifact designation"); flagCoding.addFlag("water_confidence_one", 16, "Water confidence bit one"); flagCoding.addFlag("water_confidence_two", 32, "Water confidence bit two"); flagCoding.addFlag("reserved_2_one", 64, "Reserved for a future 2-bit class artifact designation"); flagCoding.addFlag("reserved_2_two", 128, "Reserved for a future 2-bit class artifact designation"); flagCoding.addFlag("vegetation_confidence_one", 256, "Vegetation confidence bit one"); flagCoding.addFlag("vegetation_confidence_two", 512, "Vegetation confidence bit two"); flagCoding.addFlag("snow_ice_confidence_one", 1024, "Snow/ice confidence bit one"); flagCoding.addFlag("snow_ice_confidence_two", 2048, "Snow/ice confidence bit two"); flagCoding.addFlag("cirrus_confidence_one", 4096, "Cirrus confidence bit one"); flagCoding.addFlag("cirrus_confidence_two", 8192, "Cirrus confidence bit two"); flagCoding.addFlag("cloud_confidence_one", 16384, "Cloud confidence bit one"); flagCoding.addFlag("cloud_confidence_two", 32768, "Cloud confidence bit two"); return flagCoding; }
public void testFlagCoding() { final FlagCoding fc = new FlagCoding("FC"); fc.addFlag("F1", 0x040, ""); fc.addFlag("F2", 0x800, ""); assertEquals(2, fc.getNumAttributes()); assertEquals(0x040, fc.getFlagMask("F1")); assertEquals(0x800, fc.getFlagMask("F2")); testIntValuesAllowedOnly(fc); testScalarValuesAllowedOnly(fc); }
@Test public void testEnsureValidMask() throws ParseException, IOException { final Product product = new Product("n", "t", 18, 2); final Band flagsBand = product.addBand("flags", ProductData.TYPE_INT8); final FlagCoding flagCoding = new FlagCoding("fc"); final int f1Mask = 1; flagCoding.addFlag("f1", f1Mask, ""); flagsBand.setSampleCoding(flagCoding); product.getFlagCodingGroup().add(flagCoding); final byte[] elems = new byte[]{ 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, }; flagsBand.setDataElems(elems); product.setModified(false); final Term term = product.parseExpression("flags.f1"); final BitRaster validMask = product.createValidMask(term, ProgressMonitor.NULL); for (int i = 0; i < elems.length; i++) { assertEquals(elems[i] == 1, validMask.isSet(i)); } }
public void testValidMaskExpressionIsAdjustedIfNodeNameChanged() { final RasterDataNode rasterDataNode = createRasterDataNode(); rasterDataNode.setValidPixelExpression("flagsBand.f1 || not flagsBand.f2"); final Product product = new Product("p", "NoType", rasterDataNode.getRasterWidth(), rasterDataNode.getRasterHeight()); addRasterDataNodeToProduct(product, rasterDataNode); final FlagCoding flagCoding = new FlagCoding("f"); flagCoding.addFlag("f1", 0x01, "descr"); flagCoding.addFlag("f2", 0x02, "descr"); final Band flagsBand = product.addBand("flagsBand", ProductData.TYPE_INT8); flagsBand.setSampleCoding(flagCoding); product.getFlagCodingGroup().add(flagCoding); flagsBand.setName("flags"); final String currentExpression = rasterDataNode.getValidPixelExpression(); final String expectedExpression = "flags.f1 || not flags.f2"; assertEquals("name is not changed", expectedExpression, currentExpression); }
private Product createProduct() { Product product = new Product("test", "test", PW, PH); TiePointGrid latGrid = new TiePointGrid("latGrid", GW, GH, 0.5f, 0.5f, S, S, createLatGridData()); TiePointGrid lonGrid = new TiePointGrid("lonGrid", GW, GH, 0.5f, 0.5f, S, S, createLonGridData()); product.addTiePointGrid(latGrid); product.addTiePointGrid(lonGrid); Band latBand = product.addBand("latBand", ProductData.TYPE_FLOAT32); Band lonBand = product.addBand("lonBand", ProductData.TYPE_FLOAT32); latBand.setRasterData(ProductData.createInstance(createBandData(latGrid))); lonBand.setRasterData(ProductData.createInstance(createBandData(lonGrid))); final FlagCoding flagCoding = new FlagCoding("flags"); flagCoding.addFlag("valid", 0, "valid pixel"); product.getFlagCodingGroup().add(flagCoding); Band flagomatBand = product.addBand("flagomat", ProductData.TYPE_UINT8); flagomatBand.setRasterData(ProductData.createInstance(ProductData.TYPE_UINT8, PW * PH)); flagomatBand.setSampleCoding(flagCoding); product.setGeoCoding(new TiePointGeoCoding(latGrid, lonGrid, Datum.WGS_84)); return product; }
@Test public void testCopyFlagCoding() { final FlagCoding originalFlagCoding = new FlagCoding("sesame street character flags"); originalFlagCoding.addFlag("erni", 1, "erni flag"); originalFlagCoding.addFlag("bert", 2, "bert flag"); originalFlagCoding.addFlag("bibo", 4, "bert flag"); final Product product = new Product("S", "S", 0, 0); ProductUtils.copyFlagCoding(originalFlagCoding, product); final ProductNodeGroup<FlagCoding> flagCodingGroup = product.getFlagCodingGroup(); assertNotNull(flagCodingGroup); assertEquals(1, flagCodingGroup.getNodeCount()); final FlagCoding actualFlagCoding = flagCodingGroup.get("sesame street character flags"); assertNotNull(actualFlagCoding); assertNotSame(originalFlagCoding, actualFlagCoding); assertMetadataAttributeEqualityInt(originalFlagCoding.getFlag("erni"), actualFlagCoding.getFlag("erni")); assertMetadataAttributeEqualityInt(originalFlagCoding.getFlag("bert"), actualFlagCoding.getFlag("bert")); assertMetadataAttributeEqualityInt(originalFlagCoding.getFlag("bibo"), actualFlagCoding.getFlag("bibo")); // try to copy the same coding a second time ProductUtils.copyFlagCoding(originalFlagCoding, product); assertEquals(1, flagCodingGroup.getNodeCount()); }