org.esa.beam.framework.datamodel
Class VirtualBand

java.lang.Object
  extended by com.bc.ceres.core.ExtensibleObject
      extended by org.esa.beam.framework.datamodel.ProductNode
          extended by org.esa.beam.framework.datamodel.DataNode
              extended by org.esa.beam.framework.datamodel.RasterDataNode
                  extended by org.esa.beam.framework.datamodel.AbstractBand
                      extended by org.esa.beam.framework.datamodel.Band
                          extended by org.esa.beam.framework.datamodel.VirtualBand
All Implemented Interfaces:
com.bc.ceres.core.Extensible, Scaling
Direct Known Subclasses:
ProductSceneView.RGBChannel

public class VirtualBand
extends Band

A band contains the data for geophysical parameter in remote sensing data products. Bands are two-dimensional images which hold their pixel values (samples) in a buffer of the type ProductData. The band class is just a container for attached metadata of the band, currently:

The band can contain a buffer to the real data, but this buffer must be read explicitely, to keep the memory fingerprint small, the data is not read automatically.

The several getPixel and readPixel methods of this class do not necessarily return the values contained in the data buffer of type ProductData. If the scalingFactor, scalingOffset or log10Scaled are set a conversion of the form scalingFactor * rawSample + scalingOffset is applied to the raw samples before the getPixel and readPixel methods return the actual pixel values. If the log10Scaled property is true then the conversion is pow(10, scalingFactor * rawSample + scalingOffset). The several setPixel and writePixel perform the inverse operations in this case.

Version:
$Revision$ $Date$
Author:
Norman Fomferra
See Also:
ProductData

Nested Class Summary
 
Nested classes/interfaces inherited from class org.esa.beam.framework.datamodel.RasterDataNode
RasterDataNode.RasterDataDoubleList, RasterDataNode.RasterDataProcessor
 
Field Summary
static String PROPERTY_NAME_EXPRESSION
           
static String PROPERTY_NAME_WRITE_DATA
          Deprecated. since 4.9, no replacement
 
Fields inherited from class org.esa.beam.framework.datamodel.Band
PROPERTY_NAME_SAMPLE_CODING, PROPERTY_NAME_SOLAR_FLUX, PROPERTY_NAME_SPECTRAL_BAND_INDEX, PROPERTY_NAME_SPECTRAL_BANDWIDTH, PROPERTY_NAME_SPECTRAL_WAVELENGTH
 
Fields inherited from class org.esa.beam.framework.datamodel.AbstractBand
VIEW_MODE_FORWARD, VIEW_MODE_NADIR, VIEW_MODE_ORTHO
 
Fields inherited from class org.esa.beam.framework.datamodel.RasterDataNode
INVALID_POS_TEXT, IO_ERROR_TEXT, NO_DATA_TEXT, NOT_LOADED_TEXT, PROPERTY_NAME_GEOCODING, PROPERTY_NAME_IMAGE_INFO, PROPERTY_NAME_LOG_10_SCALED, PROPERTY_NAME_NO_DATA_VALUE, PROPERTY_NAME_NO_DATA_VALUE_USED, PROPERTY_NAME_ROI_DEFINITION, PROPERTY_NAME_SCALING_FACTOR, PROPERTY_NAME_SCALING_OFFSET, PROPERTY_NAME_STX, PROPERTY_NAME_VALID_PIXEL_EXPRESSION
 
Fields inherited from class org.esa.beam.framework.datamodel.DataNode
PROPERTY_NAME_DATA, PROPERTY_NAME_READ_ONLY, PROPERTY_NAME_SYNTHETIC, PROPERTY_NAME_UNIT
 
Fields inherited from class org.esa.beam.framework.datamodel.ProductNode
PROPERTY_NAME_DESCRIPTION, PROPERTY_NAME_NAME
 
Fields inherited from interface org.esa.beam.framework.datamodel.Scaling
IDENTITY
 
Constructor Summary
VirtualBand(String name, int dataType, int width, int height, String expression)
          Constructs a new Band.
 
Method Summary
 void acceptVisitor(ProductVisitor visitor)
          Accepts the given visitor.
protected  RenderedImage createSourceImage()
          Creates the source image associated with this RasterDataNode.
static com.bc.ceres.glevel.MultiLevelImage createVirtualSourceImage(RasterDataNode raster, String expression)
          Non-API.
 void dispose()
          Releases all of the resources used by this object instance and all of its owned children.
 String getExpression()
           
 long getRawStorageSize(ProductSubsetDef subsetDef)
          Gets an estimated raw storage size in bytes of this product node.
 void setExpression(String expression)
           
 void setPixelDouble(int x, int y, double pixelValue)
          Sets the pixel value at the given pixel coordinate to the given pixel value.
 void setPixelFloat(int x, int y, float pixelValue)
          Sets the pixel at the given pixel coordinate to the given pixel value.
 void setPixelInt(int x, int y, int pixelValue)
          Sets the pixel at the given pixel co-ordinate to the given pixel value.
 String toString()
          Creates a string defining this band object.
 void updateExpression(String oldExternalName, String newExternalName)
          Asks a product node to replace all occurences of and references to the node name given by oldExternalName with oldExternalName.
 void writePixels(int x, int y, int w, int h, double[] pixels, com.bc.ceres.core.ProgressMonitor pm)
          Retrieves the range of pixels specified by the coordinates as double array.
 void writePixels(int x, int y, int w, int h, float[] pixels, com.bc.ceres.core.ProgressMonitor pm)
          Retrieves the range of pixels specified by the coordinates as float array.
 void writePixels(int x, int y, int w, int h, int[] pixels, com.bc.ceres.core.ProgressMonitor pm)
          Retrieves the range of pixels specified by the coordinates as integer array.
 
Methods inherited from class org.esa.beam.framework.datamodel.Band
computeStxImpl, createDefaultImageInfo, getFlagCoding, getIndexCoding, getSampleCoding, getSolarFlux, getSpectralBandIndex, getSpectralBandwidth, getSpectralWavelength, isFlagBand, isIndexBand, readRasterData, readRasterDataFully, removeFromFile, setSampleCoding, setSolarFlux, setSpectralBandIndex, setSpectralBandwidth, setSpectralWavelength, writeRasterData, writeRasterDataFully
 
Methods inherited from class org.esa.beam.framework.datamodel.AbstractBand
computeBand, ensureMinLengthArray, ensureMinLengthArray, ensureMinLengthArray, ensureRasterData, getPixelDouble, getPixelFloat, getPixelInt, getPixels, getPixels, getPixels, getSceneRasterData, getViewModeId, loadRasterData, readPixels, readPixels, readPixels, setPixels, setPixels, setPixels, unloadRasterData
 
Methods inherited from class org.esa.beam.framework.datamodel.RasterDataNode
canBeOrthorectified, checkCompatibleRasterData, clearNoDataValue, createColorIndexedImage, createCompatibleRasterData, createCompatibleRasterData, createCompatibleSceneRasterData, createDefaultImageInfo, createPixelValidator, createPointing, createRgbImage, createTransectProfileData, fireImageInfoChanged, getBitmaskDefs, getGeoCoding, getGeophysicalDataType, getGeophysicalImage, getGeophysicalNoDataValue, getImageInfo, getImageInfo, getImageInfo, getNoDataValue, getOverlayMaskGroup, getPixels, getPixels, getPixels, getPixelString, getPointing, getRasterData, getRasterHeight, getRasterWidth, getRoiMaskGroup, getSampleFloat, getSampleInt, getScalingFactor, getScalingOffset, getSceneRasterHeight, getSceneRasterWidth, getSourceImage, getStx, getStx, getValidMaskExpression, getValidMaskImage, getValidPixelExpression, getValidShape, hasIntPixels, hasRasterData, isCompatibleRasterData, isFloatingPointType, isGeophysicalImageSet, isLog10Scaled, isNoDataValueSet, isNoDataValueUsed, isPixelValid, isPixelValid, isPixelValid, isScalingApplied, isSourceImageSet, isStxSet, isValidMaskImageSet, isValidMaskProperty, isValidMaskUsed, loadRasterData, processRasterData, quantizeRasterData, quantizeRasterData, readPixels, readPixels, readPixels, readRasterData, readRasterDataFully, readValidMask, resetValidMask, scale, scaleInverse, setGeoCoding, setGeophysicalNoDataValue, setImageInfo, setImageInfo, setLog10Scaled, setModified, setNoDataValue, setNoDataValueUsed, setRasterData, setScalingFactor, setScalingOffset, setSourceImage, setSourceImage, setStx, setValidPixelExpression, writePixels, writePixels, writePixels, writeRasterData, writeRasterDataFully
 
Methods inherited from class org.esa.beam.framework.datamodel.DataNode
checkDataCompatibility, createCompatibleProductData, fireProductNodeDataChanged, getData, getDataElems, getDataElemSize, getDataType, getNumDataElems, getUnit, isReadOnly, isSynthetic, setData, setDataElems, setReadOnly, setSynthetic, setUnit
 
Methods inherited from class org.esa.beam.framework.datamodel.ProductNode
fireProductNodeChanged, fireProductNodeChanged, getDescription, getDisplayName, getName, getOwner, getProduct, getProductReader, getProductReaderSafe, getProductRefString, getProductSafe, getProductWriter, getProductWriterSafe, getRawStorageSize, isModified, isPartOfSubset, isValidNodeName, setDescription, setName, setOwner
 
Methods inherited from class com.bc.ceres.core.ExtensibleObject
getExtension
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

PROPERTY_NAME_EXPRESSION

public static final String PROPERTY_NAME_EXPRESSION
See Also:
Constant Field Values

PROPERTY_NAME_WRITE_DATA

@Deprecated
public static final String PROPERTY_NAME_WRITE_DATA
Deprecated. since 4.9, no replacement
See Also:
Constant Field Values
Constructor Detail

VirtualBand

public VirtualBand(String name,
                   int dataType,
                   int width,
                   int height,
                   String expression)
Constructs a new Band.

Parameters:
name - the name of the new object
dataType - the raster data type, must be one of the multiple ProductData.TYPE_X constants, with the exception of ProductData.TYPE_UINT32
width - the width of the raster in pixels
height - the height of the raster in pixels
expression - the expression code
Method Detail

getExpression

public String getExpression()

setExpression

public void setExpression(String expression)

updateExpression

public void updateExpression(String oldExternalName,
                             String newExternalName)
Asks a product node to replace all occurences of and references to the node name given by oldExternalName with oldExternalName. Such references most often occur in band arithmetic expressions.

Overrides:
updateExpression in class RasterDataNode
Parameters:
oldExternalName - The old node name.
newExternalName - The new node name.

setPixelInt

public void setPixelInt(int x,
                        int y,
                        int pixelValue)
Description copied from class: AbstractBand
Sets the pixel at the given pixel co-ordinate to the given pixel value.

Overrides:
setPixelInt in class AbstractBand
Parameters:
x - The X co-ordinate of the pixel location
y - The Y co-ordinate of the pixel location
pixelValue - the new pixel value

setPixelFloat

public void setPixelFloat(int x,
                          int y,
                          float pixelValue)
Description copied from class: AbstractBand
Sets the pixel at the given pixel coordinate to the given pixel value.

Overrides:
setPixelFloat in class AbstractBand
Parameters:
x - The X co-ordinate of the pixel location
y - The Y co-ordinate of the pixel location
pixelValue - the new pixel value

setPixelDouble

public void setPixelDouble(int x,
                           int y,
                           double pixelValue)
Description copied from class: AbstractBand
Sets the pixel value at the given pixel coordinate to the given pixel value.

Overrides:
setPixelDouble in class AbstractBand
Parameters:
x - The X co-ordinate of the pixel location
y - The Y co-ordinate of the pixel location
pixelValue - the new pixel value

writePixels

public void writePixels(int x,
                        int y,
                        int w,
                        int h,
                        int[] pixels,
                        com.bc.ceres.core.ProgressMonitor pm)
                 throws IOException
Retrieves the range of pixels specified by the coordinates as integer array. Reads the data from disk if ot is not in memory yet. If the data is loaded, just copies the data..

Overrides:
writePixels in class AbstractBand
Parameters:
x - x offset into the band
y - y offset into the band
w - width of the pixel array to be read
h - height of the pixel array to be read.
pixels - integer array to be filled with data
pm - a monitor to inform the user about progress
Throws:
IOException

writePixels

public void writePixels(int x,
                        int y,
                        int w,
                        int h,
                        float[] pixels,
                        com.bc.ceres.core.ProgressMonitor pm)
                 throws IOException
Retrieves the range of pixels specified by the coordinates as float array. Reads the data from disk if ot is not in memory yet. If the data is loaded, just copies the data..

Overrides:
writePixels in class AbstractBand
Parameters:
x - x offset into the band
y - y offset into the band
w - width of the pixel array to be read
h - height of the pixel array to be read.
pixels - float array to be filled with data
pm - a monitor to inform the user about progress
Throws:
IOException

writePixels

public void writePixels(int x,
                        int y,
                        int w,
                        int h,
                        double[] pixels,
                        com.bc.ceres.core.ProgressMonitor pm)
                 throws IOException
Retrieves the range of pixels specified by the coordinates as double array. Reads the data from disk if ot is not in memory yet. If the data is loaded, just copies the data..

Overrides:
writePixels in class AbstractBand
Parameters:
x - x offset into the band
y - y offset into the band
w - width of the pixel array to be read
h - height of the pixel array to be read.
pixels - double array to be filled with data
pm - a monitor to inform the user about progress
Throws:
IOException

acceptVisitor

public void acceptVisitor(ProductVisitor visitor)
Accepts the given visitor. This method implements the well known 'Visitor' design pattern of the gang-of-four. The visitor pattern allows to define new operations on the product data model without the need to add more code to it. The new operation is implemented by the visitor.

The method simply calls visitor.visit(this).

Overrides:
acceptVisitor in class Band
Parameters:
visitor - the visitor, must not be null

getRawStorageSize

public long getRawStorageSize(ProductSubsetDef subsetDef)
Gets an estimated raw storage size in bytes of this product node.

Overrides:
getRawStorageSize in class Band
Parameters:
subsetDef - if not null the subset may limit the size returned
Returns:
the size in bytes.

toString

public String toString()
Creates a string defining this band object.

Overrides:
toString in class Band

dispose

public void dispose()
Releases all of the resources used by this object instance and all of its owned children. Its primary use is to allow the garbage collector to perform a vanilla job.

This method should be called only if it is for sure that this object instance will never be used again. The results of referencing an instance of this class after a call to dispose() are undefined.

Overrides of this method should always call super.dispose(); after disposing this instance.

Overrides:
dispose in class Band

createSourceImage

protected RenderedImage createSourceImage()
Description copied from class: RasterDataNode
Creates the source image associated with this RasterDataNode. This shall preferably be a MultiLevelImage instance.

Overrides:
createSourceImage in class Band
Returns:
A new source image instance.

createVirtualSourceImage

public static com.bc.ceres.glevel.MultiLevelImage createVirtualSourceImage(RasterDataNode raster,
                                                                           String expression)
Non-API.

Parameters:
raster - The raster data node.
expression - The band-arithmetic expression.
Returns:
A multi-level image.


Copyright © 2002-2012 Brockmann Consult GmbH. All Rights Reserved.