public static void convert(final Product product, final String iBandName, final String qBandName, final String phaseBandName) { final Band iBand = product.getBand(iBandName); final String expression = "atan2(" + qBandName + ',' + iBandName + ')'; final VirtualBand virtBand = new VirtualBand(phaseBandName, ProductData.TYPE_FLOAT32, iBand.getRasterWidth(), iBand.getRasterHeight(), expression); virtBand.setUnit(Unit.PHASE); virtBand.setDescription("Phase from complex data"); virtBand.setNoDataValueUsed(true); virtBand.setOwner(product); product.addBand(virtBand); }
@Override protected void onOK() { String uncertaintyExpression = targetExprArea.getText(); Product targetProduct = sourceBand.getProduct(); int width = sourceBand.getRasterWidth(); int height = sourceBand.getRasterHeight(); ProductNodeGroup<Band> bandGroup = targetProduct.getBandGroup(); VirtualBand uncertaintyBand = new VirtualBand(getBandName(), ProductData.TYPE_FLOAT32, width, height, uncertaintyExpression); uncertaintyBand.setDescription("Uncertainty propagated from band " + sourceBand.getName() + " = " + sourceBand.getExpression()); uncertaintyBand.setUnit(sourceBand.getUnit()); uncertaintyBand.setNoDataValue(Double.NaN); uncertaintyBand.setNoDataValueUsed(true); uncertaintyBand.setValidPixelExpression(sourceBand.getValidPixelExpression()); ProductUtils.copySpectralBandProperties(sourceBand, uncertaintyBand); bandGroup.add(uncertaintyBand); sourceBand.addAncillaryVariable(uncertaintyBand, relation); UndoRedo.Manager undoManager = SnapApp.getDefault().getUndoManager(targetProduct); if (undoManager != null) { undoManager.addEdit(new UndoableProductNodeInsertion<>(bandGroup, uncertaintyBand)); } hide(); uncertaintyBand.setModified(true); if (SnapApp.getDefault().getPreferences().getBoolean(BandMathsDialog.PREF_KEY_AUTO_SHOW_NEW_BANDS, true)) { OpenImageViewAction.openImageView(uncertaintyBand); } }
MultiLevelImage createSourceImage(Band computedBand, Band realBand) { if (computedBand instanceof VirtualBand) { return VirtualBand.createSourceImage(realBand, ((VirtualBand) computedBand).getExpression()); }else { return computedBand.getSourceImage(); } }
private String createDescription(Band computedBand) { if (computedBand instanceof VirtualBand) { VirtualBand virtualBand = (VirtualBand) computedBand; String oldDescription = virtualBand.getDescription(); String newDescription = oldDescription == null ? "" : oldDescription.trim(); String formerExpressionDescription = "(expression was '" + virtualBand.getExpression() + "')"; newDescription = newDescription.isEmpty() ? formerExpressionDescription : newDescription + " " + formerExpressionDescription; return newDescription; } else { return computedBand.getDescription(); } }
String expression = srcBand.getExpression(); final VirtualBand virtBand = new VirtualBand(trgBandName, srcBand.getDataType(), srcBand.getRasterWidth(), srcBand.getRasterHeight(), expression); virtBand.setUnit(srcBand.getUnit()); virtBand.setDescription(srcBand.getDescription()); virtBand.setNoDataValue(srcBand.getNoDataValue()); virtBand.setNoDataValueUsed(srcBand.isNoDataValueUsed()); targetProduct.addBand(virtBand);
final VirtualBand band = new VirtualBand(meanImageBandName, ProductData.TYPE_FLOAT32, sourceProduct.getSceneRasterWidth(), sourceProduct.getSceneRasterHeight(), expression); band.setUnit(unit); band.setDescription("Mean image"); sourceProduct.addBand(band);
public static Band[] pauliVirtualBands(final Product product) { final VirtualBand r = new VirtualBand("pauli_r", ProductData.TYPE_FLOAT32, product.getSceneRasterWidth(), product.getSceneRasterHeight(), "((i_HH-i_VV)*(i_HH-i_VV)+(q_HH-q_VV)*(q_HH-q_VV))/2"); final VirtualBand g = new VirtualBand("pauli_g", ProductData.TYPE_FLOAT32, product.getSceneRasterWidth(), product.getSceneRasterHeight(), "((i_HV+i_VH)*(i_HV+i_VH)+(q_HV+q_VH)*(q_HV+q_VH))/2"); final VirtualBand b = new VirtualBand("pauli_b", ProductData.TYPE_FLOAT32, product.getSceneRasterWidth(), product.getSceneRasterHeight(), "((i_HH+i_VV)*(i_HH+i_VV)+(q_HH+q_VV)*(q_HH+q_VV))/2"); return new Band[] {r, g, b}; }
public static Product createProduct6() { try { Product product = new Product("Test_Product_6_SceneRasterTransforms", "Test_Type_6_SceneRasterTransforms", 512, 512); product.getMetadataRoot().addElement(new MetadataElement("Global_Attributes")); product.getMetadataRoot().addElement(new MetadataElement("Local_Attributes")); product.setModified(false); final String a_expression = "sin(4 * PI * sqrt( sq(X/1000.0 - 1) + sq(Y/500.0 - 1) ))"; final Band band_a = new VirtualBand("Band_A", ProductData.TYPE_FLOAT32, 2048, 1024, a_expression); final AffineTransform a_forward = new AffineTransform(); a_forward.scale(0.25, 0.5); final AffineTransform a_inverse = a_forward.createInverse(); band_a.setModelToSceneTransform(new AffineTransform2D(a_forward)); band_a.setSceneToModelTransform(new AffineTransform2D(a_inverse)); product.addBand(band_a); final String b_expression = "sin(4 * PI * sqrt( 2.0 * abs(X/1000.0 * Y/500.0) ))"; final VirtualBand band_b = new VirtualBand("Band_B", ProductData.TYPE_FLOAT32, 128, 256, b_expression); final AffineTransform b_forward = new AffineTransform(); b_forward.scale(2.0, 2.0); b_forward.translate(128, 0); final AffineTransform b_inverse = b_forward.createInverse(); band_b.setModelToSceneTransform(new AffineTransform2D(b_forward)); band_b.setSceneToModelTransform(new AffineTransform2D(b_inverse)); band_b.setNoDataValue(Double.NaN); band_b.setNoDataValueUsed(true); product.addBand(band_b); return product; } catch (NoninvertibleTransformException e) { return null; } }
public static Product createProduct5() { try { Product product = new Product("Test_Product_5_CRS", "Test_Type_5_CRS", 512, 512); product.getMetadataRoot().addElement(new MetadataElement("Global_Attributes")); product.getMetadataRoot().addElement(new MetadataElement("Local_Attributes")); product.setModified(false); product.addBand("Band_A", "sin(4 * PI * sqrt( sq(X/1000.0 - 1) + sq(Y/500.0 - 1) ))"); product.setSceneGeoCoding(new CrsGeoCoding(DefaultGeographicCRS.WGS84, 512, 512, 0, 10, 1, 1)); final String b_expression = "sin(4 * PI * sqrt( 2.0 * abs(X/1000.0 * Y/500.0) ))"; final VirtualBand band_b = new VirtualBand("Band_B", ProductData.TYPE_FLOAT32, 1024, 256, b_expression); band_b.setGeoCoding(new CrsGeoCoding(DefaultGeographicCRS.WGS84, 1024, 256, 0, 10, 0.5, 2.0)); band_b.setNoDataValueUsed(true); product.addBand(band_b); return product; } catch (FactoryException | TransformException e) { return null; } }
public static Band createVirtualBand(final Product product, final String expression, final String name) { int width = product.getSceneRasterWidth(); int height = product.getSceneRasterHeight(); try { final RasterDataNode[] refRasters = BandArithmetic.getRefRasters(expression, product); if (refRasters.length > 0) { width = refRasters[0].getRasterWidth(); height = refRasters[0].getRasterHeight(); } } catch (ParseException e) { throw new IllegalArgumentException("Invalid expression: " + expression); } final VirtualBand virtBand = new VirtualBand(name, ProductData.TYPE_FLOAT64, width, height, expression); virtBand.setNoDataValueUsed(true); product.addBand(virtBand); return virtBand; }
@Override protected void setUp() throws Exception { final Product product = new Product("x", "y", 2, 3); r = new VirtualBand("r", ProductData.TYPE_FLOAT32, 2, 3, "0"); g = new VirtualBand("g", ProductData.TYPE_FLOAT32, 2, 3, "0"); b = new VirtualBand("b", ProductData.TYPE_FLOAT32, 2, 3, "0"); product.addBand(r); product.addBand(g); product.addBand(b); r.ensureRasterData(); g.ensureRasterData(); b.ensureRasterData(); }
band = new VirtualBand(getBandName(), ProductData.TYPE_FLOAT32, width, height, getExpression()); setBandProperties(band, validMaskExpression); } else { expression = "(" + validMaskExpression + ") ? (" + expression + ") : NaN"; band.setSourceImage(VirtualBand.createSourceImage(band, expression));
private static List<RasterDataNode> getReferencedVirtualBands(final RasterDataNode node) { final Product product = node.getProduct(); final List<RasterDataNode> rasterList = new ArrayList<RasterDataNode>(); if (product != null) { for (int i = 0; i < product.getNumBands(); i++) { final Band band = product.getBandAt(i); if (band instanceof VirtualBand) { final VirtualBand virtualBand = (VirtualBand) band; if (isNodeReferencedByExpression(node, virtualBand.getExpression())) { rasterList.add(virtualBand); } } } } return rasterList; }
private String generateUncertaintyExpression() throws ParseException, UnsupportedOperationException { StandardUncertaintyGenerator propagator = new StandardUncertaintyGenerator(order, false); return propagator.generateUncertainty(sourceBand.getProduct(), relation, sourceBand.getExpression()); }
if(vBand instanceof VirtualBand) { final VirtualBand virtBand = (VirtualBand)vBand; String expression = virtBand.getExpression().replaceAll(trgBand.getName(), newBandName); virtBand.setExpression(expression);
final VirtualBand band = new VirtualBand(betaBandName, ProductData.TYPE_FLOAT32, trgBand.getRasterWidth(), trgBand.getRasterHeight(), expression); band.setUnit(unit); band.setDescription("Beta0 image"); trgProduct.addBand(band);
protected static RasterDataNode addVirtualBand(Product product, String bandName, int dataType, String expression) { final Band band = new VirtualBand(bandName, dataType, 10, 10, expression); product.addBand(band); return band; }
static Product findFirstExpressionSourceProduct(Product productToBeClosed, Set<Product> productsStillOpen) { for (Product openProduct : productsStillOpen) { Band[] bands = openProduct.getBands(); for (Band band : bands) { if (band instanceof VirtualBand) { VirtualBand virtualBand = (VirtualBand) band; try { RasterDataNode[] nodes = openProduct.getRefRasterDataNodes(virtualBand.getExpression()); for (RasterDataNode node : nodes) { if (productToBeClosed.equals(node.getProduct())) { return openProduct; } } } catch (ParseException e) { // ok } } } } return null; } }
public static void convert(final Product product, final String iBandName, final String qBandName, final String targetBandName) { final Band iBand = product.getBand(iBandName); final String expression = iBandName + " * " + iBandName + " + " + qBandName + " * " + qBandName; final VirtualBand virtBand = new VirtualBand(targetBandName, ProductData.TYPE_FLOAT32, iBand.getRasterWidth(), iBand.getRasterHeight(), expression); virtBand.setUnit(Unit.INTENSITY); virtBand.setDescription("Intensity from complex data"); virtBand.setNoDataValueUsed(true); virtBand.setOwner(product); product.addBand(virtBand); }
final VirtualBand band = new VirtualBand(gammeBandName, ProductData.TYPE_FLOAT32, trgBand.getRasterWidth(), trgBand.getRasterHeight(), expression); band.setUnit(unit); band.setDescription("Gamma0 image"); trgProduct.addBand(band);