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; }
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); }
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); }
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; }
String[] flagNames = srcFC.getFlagNames(); FlagCoding contextFC = new FlagCoding(flagCodingName); for (String flagName : flagNames) { contextFC.addFlag(flagName, srcFC.getFlagMask(flagName), srcFC.getFlag(flagName).getDescription()); Band contextBand = contextProduct.addBand(srcBand.getName(), srcBand.getDataType()); if (srcBand.isFlagBand()) { contextBand.setSampleCoding(contextProduct.getFlagCodingGroup().get(srcBand.getFlagCoding().getName()));
/** * 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); } }
flagsCoding = new FlagCoding(bandName); } else { String flagName = null; flagsCoding.addFlag(flagName, flagMask, description); if (flagsCoding == null || flagsCoding.getNumAttributes() == 0) { throw new DDDBException("database resource is empty: file " + filePath); /*I18N*/
private static FlagCoding createCloudFlagCoding(Product outputProduct) { MetadataAttribute cloudAttr; final FlagCoding flagCoding = new FlagCoding(CLOUD_FLAG_BAND); flagCoding.setDescription("Cloud Flag Coding"); cloudAttr = new MetadataAttribute("cloudy", ProductData.TYPE_UINT8); cloudAttr.getData().setElemInt(FLAG_CLOUDY); cloudAttr.setDescription("is with more than 80% cloudy"); flagCoding.addAttribute(cloudAttr); outputProduct.addMask(cloudAttr.getName(), flagCoding.getName() + "." + cloudAttr.getName(), cloudAttr.getDescription(), createBitmaskColor(1, 3), 0.5); cloudAttr = new MetadataAttribute("cloudfree", ProductData.TYPE_UINT8); cloudAttr.getData().setElemInt(FLAG_CLOUDFREE); cloudAttr.setDescription("is with less than 20% cloudy"); flagCoding.addAttribute(cloudAttr); outputProduct.addMask(cloudAttr.getName(), flagCoding.getName() + "." + cloudAttr.getName(), cloudAttr.getDescription(), createBitmaskColor(2, 3), 0.5); cloudAttr = new MetadataAttribute("cloud_uncertain", ProductData.TYPE_UINT8); cloudAttr.getData().setElemInt(FLAG_UNCERTAIN); cloudAttr.setDescription("is with between 20% and 80% cloudy"); flagCoding.addAttribute(cloudAttr); outputProduct.addMask(cloudAttr.getName(), flagCoding.getName() + "." + cloudAttr.getName(), cloudAttr.getDescription(), createBitmaskColor(3, 3), 0.5); return flagCoding; }
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); }
@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()); }
final FlagCoding sourceChild = new FlagCoding("child"); sourceChild.addFlag("a", 1, "condition a is true"); sourceChild.addFlag("b", 2, "condition b is true"); source.addElement(sourceChild); assertNotSame(sourceChild.getAttribute("a"), targetChild.getAttribute("a")); assertNotSame(sourceChild.getAttribute("b"), targetChild.getAttribute("b")); assertNotSame(sourceChild.getAttribute("a").getData(), targetChild.getAttribute("a").getData()); assertNotSame(sourceChild.getAttribute("b").getData(), targetChild.getAttribute("b").getData()); assertMetadataAttributeEqualityInt(sourceChild.getFlag("a"), targetChild.getAttribute("a")); assertMetadataAttributeEqualityInt(sourceChild.getFlag("b"), targetChild.getAttribute("b"));
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; }
@Override public void visit(FlagCoding flagCoding) { visitedList.add(flagCoding.getName()); }
protected void addFlagAndBitmaskDef(FlagCoding fc, String flagName, String flagDesc, int shift) { final double rf1 = 0.0; final double gf1 = 1.0; final double bf1 = 0.5; final double a = 2.0 * Math.PI * (shift / 6.0); final float r = (float) (0.5 + 0.5 * Math.sin(a + rf1 * Math.PI)); final float g = (float) (0.5 + 0.5 * Math.sin(a + gf1 * Math.PI)); final float b = (float) (0.5 + 0.5 * Math.sin(a + bf1 * Math.PI)); final Color color = new Color(r, g, b); fc.addFlag(flagName, 1 << shift, flagDesc); product.addMask(flagName, fc.getName() + "." + flagName, flagDesc, color, 0.4); }
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); }
/** * Adds the confidence flags to the coding passed in. */ private FlagCoding addConfidenceFlagsToCoding(FlagCoding coding) { coding.addFlag(AtsrGSSTConstants.NADIR_SST_VALID_FLAG_NAME, AtsrGSSTConstants.NADIR_SST_VALID_FLAG_MASK, AtsrGSSTConstants.NADIR_SST_VALID_FLAG_DESCRIPTION); coding.addFlag(AtsrGSSTConstants.NADIR_SST_37_FLAG_NAME, AtsrGSSTConstants.NADIR_SST_37_FLAG_MASK, AtsrGSSTConstants.NADIR_SST_37_FLAG_DESCRIPTION); coding.addFlag(AtsrGSSTConstants.DUAL_SST_VALID_FLAG_NAME, AtsrGSSTConstants.DUAL_SST_VALID_FLAG_MASK, AtsrGSSTConstants.DUAL_SST_VALID_FLAG_DESCRIPTION); coding.addFlag(AtsrGSSTConstants.DUAL_SST_37_FLAG_NAME, AtsrGSSTConstants.DUAL_SST_37_FLAG_MASK, AtsrGSSTConstants.DUAL_SST_37_FLAG_DESCRIPTION); coding.addFlag(AtsrGSSTConstants.LAND_FLAG_NAME, AtsrGSSTConstants.LAND_FLAG_MASK, AtsrGSSTConstants.LAND_FLAG_DESCRIPTION); coding.addFlag(AtsrGSSTConstants.NADIR_CLOUDY_FLAG_NAME, AtsrGSSTConstants.NADIR_CLOUDY_FLAG_MASK, AtsrGSSTConstants.NADIR_CLOUDY_FLAG_DESCRIPTION); coding.addFlag(AtsrGSSTConstants.NADIR_BLANKING_FLAG_NAME, AtsrGSSTConstants.NADIR_BLANKING_FLAG_MASK, AtsrGSSTConstants.NADIR_BLANKING_FLAG_DESCRIPTION); coding.addFlag(AtsrGSSTConstants.NADIR_COSMETIC_FLAG_NAME, AtsrGSSTConstants.NADIR_COSMETIC_FLAG_MASK, AtsrGSSTConstants.NADIR_COSMETIC_FLAG_DESCRIPTION); coding.addFlag(AtsrGSSTConstants.FORWARD_CLOUDY_FLAG_NAME, AtsrGSSTConstants.FORWARD_CLOUDY_FLAG_MASK, AtsrGSSTConstants.FORWARD_CLOUDY_FLAG_DESCRIPTION); coding.addFlag(AtsrGSSTConstants.FORWARD_BLANKING_FLAG_NAME, AtsrGSSTConstants.FORWARD_BLANKING_FLAG_MASK, AtsrGSSTConstants.FORWARD_BLANKING_FLAG_DESCRIPTION); coding.addFlag(AtsrGSSTConstants.FORWARD_COSMETIC_FLAG_NAME, AtsrGSSTConstants.FORWARD_COSMETIC_FLAG_MASK, AtsrGSSTConstants.FORWARD_COSMETIC_FLAG_DESCRIPTION); return coding; }
private void resetFlagTableModel() { flagModel.clear(); if (currentRaster != null) { for (Band band : currentFlagBands) { final FlagCoding flagCoding = band.getFlagCoding(); final int numFlags = flagCoding.getNumAttributes(); final String bandNameDot = band.getName() + "."; for (int j = 0; j < numFlags; j++) { String name = bandNameDot + flagCoding.getAttributeAt(j).getName(); flagModel.addRow(name, "", ""); } } } }
public void writeFlagCoding(Band band, NFileWriteable ncFile) throws IOException { final FlagCoding flagCoding = band.getFlagCoding(); if (flagCoding != null) { final String[] flagNames = flagCoding.getFlagNames(); final StringBuilder descriptions = new StringBuilder(); for (String flagName : flagNames) { final MetadataAttribute flag = flagCoding.getFlag(flagName); if (flag != null) { final String description = flag.getDescription(); if (description != null) { descriptions.append(description); } } descriptions.append(DESCRIPTION_SEPARATOR); } String variableName = ReaderUtils.getVariableName(band); ncFile.findVariable(variableName).addAttribute(FLAG_CODING_NAME, flagCoding.getName()); ncFile.findVariable(variableName).addAttribute(FLAG_DESCRIPTIONS, descriptions.toString().trim()); } }
public static FlagCoding readFlagCoding(ProfileReadContext ctx, String variableName) { final FlagCoding flagCoding = CfFlagCodingPart.readFlagCoding(ctx, variableName); if (flagCoding != null) { final Variable variable = ctx.getNetcdfFile().getRootGroup().findVariable(variableName); final Attribute descriptionsAtt = variable.findAttributeIgnoreCase(FLAG_DESCRIPTIONS); if (descriptionsAtt != null) { final String[] descriptions = descriptionsAtt.getStringValue().split(DESCRIPTION_SEPARATOR); if (flagCoding.getNumAttributes() == descriptions.length) { for (int i = 0; i < descriptions.length; i++) { flagCoding.getAttributeAt(i).setDescription(descriptions[i]); } } } final Attribute nameAtt = variable.findAttributeIgnoreCase(FLAG_CODING_NAME); if (nameAtt != null) { flagCoding.setName(nameAtt.getStringValue()); } } return flagCoding; }
assertEquals(0, flagCoding.getNumElements()); assertEquals(31, flagCoding.getNumAttributes()); MetadataAttribute[] attributes = flagCoding.getAttributes();