Class Product

  • All Implemented Interfaces:
    Extensible

    public class Product
    extends ProductNode
    Product instances are an in-memory representation of a remote sensing data product. The product is more an abstract hull containing references to the data of the product or readers to retrieve the data on demand. The product itself does not hold the remote sensing data. Data products can contain multiple geophysical parameters stored as bands and can also have multiple metadata attributes. Also, a Product can contain any number of TiePointGrids holding the tie point data.

    Every product can also have a product reader and writer assigned to it. The reader represents the data source from which a product was created, whereas the writer represents the data sink. Both, the source and the sink must not necessarily store data in the same format. Furthermore, it is not mandatory for a product to have both of them.

    • Constructor Detail

      • Product

        public Product​(String name,
                       String type,
                       int sceneRasterWidth,
                       int sceneRasterHeight)
        Creates a new product without any reader (in-memory product)
        Parameters:
        name - the product name
        type - the product type
        sceneRasterWidth - the scene width in pixels for this data product
        sceneRasterHeight - the scene height in pixels for this data product
      • Product

        public Product​(String name,
                       String type,
                       int sceneRasterWidth,
                       int sceneRasterHeight,
                       ProductReader reader)
        Constructs a new product with the given name and the given reader.
        Parameters:
        name - the product identifier
        type - the product type
        sceneRasterWidth - the scene width in pixels for this data product
        sceneRasterHeight - the scene height in pixels for this data product
        reader - the reader used to create this product and read data from it.
        See Also:
        ProductReader
      • Product

        public Product​(String name,
                       String type)
        Constructs a new product with the given name and type.
        Parameters:
        name - the product identifier
        type - the product type
      • Product

        public Product​(String name,
                       String type,
                       ProductReader reader)
        Constructs a new product with the given name, type and the reader.
        Parameters:
        name - the product identifier
        type - the product type
        reader - the reader used to create this product and read data from it.
        See Also:
        ProductReader
    • Method Detail

      • findImageToModelTransform

        public static AffineTransform findImageToModelTransform​(GeoCoding geoCoding)
        Finds an appropriate transformation from image coordinates used by the given geo-coding (if any) into "model" coordinates used to render (e.g. display, print or otherwise visualise) the image together with other features such as geometric shapes or other images. Model coordinates are different from image coordinates for rectified images where model coordinate units are defined by a geodetic/geographic coordinate reference system (map CRS, map-projected images). In this case the model CRS equals the map CRS in use. Model coordinates are also different from image coordinates for images in satellite view that use a linearily downsampled or upsampled version of a common reference grid. WARNING: Note that this method is only useful, if it can be ensured that the given geo-coding's image-to-map transform is an affine transformation. In all other cases, the method returns the identity transformation which might not be what you expect and what might not be even correct.
        Parameters:
        geoCoding - The geo-coding or null.
        Returns:
        An affine image-to-map transformation derived from the given geo-coding. If geoCoding is null or an affine image-to-map transformation cannot be derived the identity transform is returned.
        Since:
        SNAP 2.0
        See Also:
        findModelCRS(org.esa.snap.core.datamodel.GeoCoding), GeoCoding.getImageToMapTransform(), RasterDataNode.getImageToModelTransform(), MultiLevelModel.getImageToModelTransform(int)
      • findModelCRS

        public static org.opengis.referencing.crs.CoordinateReferenceSystem findModelCRS​(GeoCoding geoCoding)
        Finds a coordinate reference system (CRS) that is appropriate as a scene CRS.

        Finds a "model" coordinate reference system for the given geo-coding (if any) that provides the units for ccordinates to be rendered (e.g. display, print or otherwise visualise) a geo-coded image together with other features such as geometric shapes or other images. Model coordinates are different from image coordinates for rectified images where model coordinate units are defined by a geodetic/geographic coordinate reference system (map CRS, map-projected images). In this case the model CRS equals the map CRS in use. Model coordinates are also different from image coordinates for images in satellite view that use a linearily downsampled or upsampled version of a common reference grid.

        If the geo-coding's image-to-map transform is an affine transform, then the returned CRS is the geo-coding's map CRS, otherwise it is its image CRS. If the geo-coding is null, a default image CRS is returned (DEFAULT_IMAGE_CRS).

        Parameters:
        geoCoding - The geo-coding or null.
        Returns:
        An appropriate "model" coordinate reference system.
        Since:
        SNAP 2.0
        See Also:
        findImageToModelTransform(org.esa.snap.core.datamodel.GeoCoding), RasterDataNode.getImageToModelTransform(), MultiLevelModel.getImageToModelTransform(int)
      • getSceneCRS

        public org.opengis.referencing.crs.CoordinateReferenceSystem getSceneCRS()
        Gets the scene coordinate reference system (scene CRS). It provides a common coordinate system

        If no scene CRS has been set so far, the method will use the product's scene geo-coding, if any. If the scene geo-coding's image-to-map transform is an affine transform, then the scene CRS returned is the map CRS, otherwise it is the image CRS. If the product doesn't have any scene geo-coding, a default image CRS is returned.

        Returns:
        The scene coordinate reference system.
        Since:
        SNAP 2.0
        See Also:
        setSceneCRS(CoordinateReferenceSystem)
      • setSceneCRS

        public void setSceneCRS​(org.opengis.referencing.crs.CoordinateReferenceSystem sceneCRS)
        Sets the scene coordinate reference system.
        Parameters:
        sceneCRS - The scene coordinate reference system.
        Since:
        SNAP 2.0
        See Also:
        getSceneCRS()
      • isSceneCrsASharedModelCrs

        public boolean isSceneCrsASharedModelCrs()
        Tests if all the raster data nodes contained in this product share the same model coordinate reference system which is equal to the scene coordinate reference system used by this product. WARNING: This method belongs to a preliminary API and may change in an incompatible way or may even be removed in a next SNAP release.
        Returns:
        true, if so.
        Since:
        SNAP 2.0
      • isSceneCrsEqualToModelCrsOf

        public boolean isSceneCrsEqualToModelCrsOf​(RasterDataNode rasterDataNode)
        Tests if the given raster data node uses this product's scene coordinate reference system as model coordinate reference system. WARNING: This method belongs to a preliminary API and may change in an incompatible way or may even be removed in a next SNAP release.
        Parameters:
        rasterDataNode - A raster data node.
        Returns:
        true, if so.
        Since:
        SNAP 2.0
      • getFileLocation

        public File getFileLocation()
        Retrieves the disk location of this product. The return value can be null when the product has no disk location (pure virtual memory product)
        Returns:
        the file location, may be null
      • setFileLocation

        public void setFileLocation​(File fileLocation)
        Sets the file location for this product.
        Parameters:
        fileLocation - the file location, may be null
      • getProductType

        public String getProductType()
        Gets the product type string.
        Returns:
        the product type string
      • setProductType

        public void setProductType​(String productType)
        Sets the product type of this product.
        Parameters:
        productType - the product type.
      • getProductReader

        public ProductReader getProductReader()
        Returns the reader which was used to create this product in-memory represention from an external source and which will be used to (re-)load band rasters.
        Overrides:
        getProductReader in class ProductNode
        Returns:
        the product reader, can be null
      • setProductReader

        public void setProductReader​(ProductReader reader)
        Sets the product reader which will be used to create this product in-memory represention from an external source and which will be used to (re-)load band rasters.
        Parameters:
        reader - the product reader.
        Throws:
        IllegalArgumentException - if the given reader is null.
      • getProductWriter

        public ProductWriter getProductWriter()
        Returns the writer which will be used to write modifications of this product's in-memory represention to an external destination.
        Overrides:
        getProductWriter in class ProductNode
        Returns:
        the product writer, can be null
      • setProductWriter

        public void setProductWriter​(ProductWriter writer)
        Sets the writer which will be used to write modifications of this product's in-memory represention to an external destination.
        Parameters:
        writer - the product writer, can be null
      • writeHeader

        public void writeHeader​(Object output)
                         throws IOException

        Writes the header of a data product.

        Parameters:
        output - an object representing a valid output for this writer, might be a ImageOutputStream or a File or other Object to use for future decoding.
        Throws:
        IllegalArgumentException - if output is null or it's type is none of the supported output types.
        IOException - if an I/O error occurs
      • closeProductReader

        public void closeProductReader()
                                throws IOException
        Closes and clears this product's reader (if any).
        Throws:
        IOException - if an I/O error occurs
        See Also:
        closeIO()
      • closeProductWriter

        public void closeProductWriter()
                                throws IOException
        Closes and clears this product's writer (if any).
        Throws:
        IOException - if an I/O error occurs
        See Also:
        closeIO()
      • 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.

        This implementation also calls the closeIO in order to release all open I/O resources.

        Overrides:
        dispose in class ProductNode
      • getSceneTimeCoding

        public TimeCoding getSceneTimeCoding()
        Gets the time-coding for the associated scene raster.
        Returns:
        the time-coding, or null if not available.
        Since:
        SNAP 2.0
        See Also:
        RasterDataNode.getTimeCoding()
      • setSceneTimeCoding

        public void setSceneTimeCoding​(TimeCoding sceneTimeCoding)
        Sets the time-coding for the associated scene raster.
        Parameters:
        sceneTimeCoding - The new time-coding, or null.
        Since:
        SNAP 2.0
        See Also:
        RasterDataNode.setTimeCoding(TimeCoding)
      • getPointingFactory

        public PointingFactory getPointingFactory()
        Gets the pointing factory associated with this data product.
        Returns:
        the pointing factory or null, if none
      • setPointingFactory

        public void setPointingFactory​(PointingFactory pointingFactory)
        Sets the pointing factory for this data product.
        Parameters:
        pointingFactory - the pointing factory
      • getSceneGeoCoding

        public GeoCoding getSceneGeoCoding()
        Gets the geo-coding associated with the scene raster.
        Returns:
        the geo-coding, can be null if this product is not geo-coded.
      • setSceneGeoCoding

        public void setSceneGeoCoding​(GeoCoding sceneGeoCoding)
        Sets the geo-coding to be associated with the scene raster.
        Parameters:
        sceneGeoCoding - the geo-coding, or null
      • isUsingSingleGeoCoding

        public boolean isUsingSingleGeoCoding()
        Tests if all bands of this product are using a single, uniform geo-coding. Uniformity is tested by comparing the band's geo-coding against the geo-coding of this product using the Object.equals(Object) method. If this product does not have a geo-coding, the method returns false.
        Returns:
        true, if so
      • transferGeoCodingTo

        public boolean transferGeoCodingTo​(Product destProduct,
                                           ProductSubsetDef subsetDef)
        Transfers the geo-coding of this product instance to the destProduct with respect to the given subsetDef.
        Parameters:
        destProduct - the destination product
        subsetDef - the definition of the subset, may be null
        Returns:
        true, if the geo-coding could be transferred.
      • getSceneRasterWidth

        public final int getSceneRasterWidth()
        Returns:
        The scene raster width in pixels.
        Throws:
        IllegalStateException - if the scene size wasn't specified yet and cannot be derived
      • getSceneRasterHeight

        public final int getSceneRasterHeight()
        Returns:
        The scene raster height in pixels
        Throws:
        IllegalStateException - if the scene size wasn't specified yet and cannot be derived
      • isMultiSize

        public boolean isMultiSize()
        Test if this product's raster data nodes are all of the same size (in pixels).
        Returns:
        true, if so.
        Since:
        SNAP 2.0
      • getSceneRasterSize

        public final Dimension getSceneRasterSize()
        Returns:
        The scene size in pixels.
        Throws:
        IllegalStateException - if the scene size wasn't specified yet and cannot be derived
      • getStartTime

        public ProductData.UTC getStartTime()
        Gets the (sensing) start time associated with the first raster data line.

        For Level-1/2 products this is the data-take time associated with the first raster data line. For Level-3 products, this could be the start time of first input product contributing data.

        Returns:
        the sensing start time, can be null e.g. for non-swath products
      • setStartTime

        public void setStartTime​(ProductData.UTC startTime)
        Sets the (sensing) start time of this product.

        For Level-1/2 products this is the data-take time associated with the first raster data line. For Level-3 products, this could be the start time of first input product contributing data.

        Parameters:
        startTime - the sensing start time, can be null
      • getEndTime

        public ProductData.UTC getEndTime()
        Gets the (sensing) stop time associated with the last raster data line.

        For Level-1/2 products this is the data-take time associated with the last raster data line. For Level-3 products, this could be the end time of last input product contributing data.

        Returns:
        the stop time , can be null e.g. for non-swath products
      • setEndTime

        public void setEndTime​(ProductData.UTC endTime)
        Sets the (sensing) stop time associated with the first raster data line.

        For Level-1/2 products this is the data-take time associated with the last raster data line. For Level-3 products, this could be the end time of last input product contributing data.

        Parameters:
        endTime - the sensing stop time, can be null
      • getMetadataRoot

        public MetadataElement getMetadataRoot()
        Gets the root element of the associated metadata.
        Returns:
        the metadata root element
      • getGroup

        public ProductNodeGroup getGroup​(String name)
        Parameters:
        name - The group name.
        Returns:
        The group with the given name, or null if no such group exists.
        Since:
        BEAM 5.0
      • getTiePointGridGroup

        public ProductNodeGroup<TiePointGrid> getTiePointGridGroup()
        Gets the tie-point grid group of this product.
        Returns:
        The group of all tie-point grids.
        Since:
        BEAM 4.7
      • addTiePointGrid

        public void addTiePointGrid​(TiePointGrid tiePointGrid)
        Adds the given tie-point grid to this product.
        Parameters:
        tiePointGrid - the tie-point grid to added, ignored if null
      • removeTiePointGrid

        public boolean removeTiePointGrid​(TiePointGrid tiePointGrid)
        Removes the tie-point grid from this product.
        Parameters:
        tiePointGrid - the tie-point grid to be removed, ignored if null
        Returns:
        true if node could be removed
      • getNumTiePointGrids

        public int getNumTiePointGrids()
        Returns the number of tie-point grids contained in this product
        Returns:
        the number of tie-point grids
      • getTiePointGridAt

        public TiePointGrid getTiePointGridAt​(int index)
        Returns the tie-point grid at the given index.
        Parameters:
        index - the tie-point grid index
        Returns:
        the tie-point grid at the given index
        Throws:
        IndexOutOfBoundsException - if the index is out of bounds
      • getTiePointGridNames

        public String[] getTiePointGridNames()
        Returns a string array containing the names of the tie-point grids contained in this product
        Returns:
        a string array containing the names of the tie-point grids contained in this product. If this product has no tie-point grids a zero-length-array is returned.
      • getTiePointGrids

        public TiePointGrid[] getTiePointGrids()
        Returns an array of tie-point grids contained in this product
        Returns:
        an array of tie-point grids contained in this product. If this product has no tie-point grids a zero-length-array is returned.
      • getTiePointGrid

        public TiePointGrid getTiePointGrid​(String name)
        Returns the tie-point grid with the given name.
        Parameters:
        name - the tie-point grid name
        Returns:
        the tie-point grid with the given name or null if a tie-point grid with the given name is not contained in this product.
      • containsTiePointGrid

        public boolean containsTiePointGrid​(String name)
        Tests if a tie-point grid with the given name is contained in this product.
        Parameters:
        name - the name, must not be null
        Returns:
        true if a tie-point grid with the given name is contained in this product, false otherwise
      • getBandGroup

        public ProductNodeGroup<Band> getBandGroup()
        Gets the band group of this product.
        Returns:
        The group of all bands.
        Since:
        BEAM 4.7
      • addBand

        public void addBand​(Band band)
        Adds the given band to this product.
        Parameters:
        band - the band to added, must not be null
      • addBand

        public Band addBand​(String bandName,
                            int dataType)
        Creates a new band with the given name and data type and adds it to this product and returns it.
        Parameters:
        bandName - the new band's name
        dataType - the raster data type, must be one of the multiple ProductData.TYPE_X constants
        Returns:
        the new band which has just been added
      • addBand

        public Band addBand​(String bandName,
                            String expression)
        Creates a new band with the given name and adds it to this product and returns it. The new band's data type is float and it's samples are computed from the given band maths expression.
        Parameters:
        bandName - the new band's name
        expression - the band maths expression
        Returns:
        the new band which has just been added
        Since:
        BEAM 4.9
      • addBand

        public Band addBand​(String bandName,
                            String expression,
                            int dataType)
        Creates a new band with the given name and data type and adds it to this product and returns it. The new band's samples are computed from the given band maths expression.
        Parameters:
        bandName - the new band's name
        expression - the band maths expression
        dataType - the raster data type, must be one of the multiple ProductData.TYPE_X constants
        Returns:
        the new band which has just been added
        Since:
        BEAM 4.9
      • removeBand

        public boolean removeBand​(Band band)
        Removes the given band from this product.
        Parameters:
        band - the band to be removed, ignored if null
        Returns:
        true if removed succesfully, otherwise false
      • getNumBands

        public int getNumBands()
        Returns:
        the number of bands contained in this product.
      • getBandAt

        public Band getBandAt​(int index)
        Returns the band at the given index.
        Parameters:
        index - the band index
        Returns:
        the band at the given index
        Throws:
        IndexOutOfBoundsException - if the index is out of bounds
      • getBandNames

        public String[] getBandNames()
        Returns a string array containing the names of the bands contained in this product
        Returns:
        a string array containing the names of the bands contained in this product. If this product has no bands a zero-length-array is returned.
      • getBands

        public Band[] getBands()
        Returns an array of bands contained in this product
        Returns:
        an array of bands contained in this product. If this product has no bands a zero-length-array is returned.
      • getBand

        public Band getBand​(String name)
        Returns the band with the given name.
        Parameters:
        name - the band name
        Returns:
        the band with the given name or null if a band with the given name is not contained in this product.
        Throws:
        IllegalArgumentException - if the given name is null or empty.
      • getBandIndex

        public int getBandIndex​(String name)
        Returns the index for the band with the given name.
        Parameters:
        name - the band name
        Returns:
        the band index or -1 if a band with the given name is not contained in this product.
        Throws:
        IllegalArgumentException - if the given name is null or empty.
      • containsBand

        public boolean containsBand​(String name)
        Tests if a band with the given name is contained in this product.
        Parameters:
        name - the name, must not be null
        Returns:
        true if a band with the given name is contained in this product, false otherwise
        Throws:
        IllegalArgumentException - if the given name is null or empty.
      • containsRasterDataNode

        public boolean containsRasterDataNode​(String name)
        Tests if a raster data node with the given name is contained in this product. Raster data nodes can be bands or tie-point grids.
        Parameters:
        name - the name, must not be null
        Returns:
        true if a raster data node with the given name is contained in this product, false otherwise
      • getRasterDataNode

        public RasterDataNode getRasterDataNode​(String name)
        Gets the raster data node with the given name. The method first searches for bands with the given name, then for tie-point grids. If neither bands nor tie-point grids exist with the given name, null is returned.
        Parameters:
        name - the name, must not be null
        Returns:
        the raster data node with the given name or null if a raster data node with the given name is not contained in this product.
      • getRasterDataNodes

        public List<RasterDataNode> getRasterDataNodes()
        Gets all raster data nodes contained in this product including bands, masks and tie-point grids.
        Returns:
        List of all raster data nodes which may be empty.
        Since:
        SNAP 2.0
      • getDefaultQuicklook

        public Quicklook getDefaultQuicklook()
      • getQuicklook

        public Quicklook getQuicklook​(String name)
        Returns the Quicklook with the given name.
        Parameters:
        name - the quicklook name
        Returns:
        the quicklook with the given name or null if a quicklook with the given name is not contained in this product.
        Throws:
        IllegalArgumentException - if the given name is null or empty.
      • getQuicklookBandName

        public String getQuicklookBandName()
        Gets the name of the band suitable for quicklook generation.
        Returns:
        the name of the quicklook band, or null if none has been defined
      • setQuicklookBandName

        public void setQuicklookBandName​(String quicklookBandName)
        Sets the name of the band suitable for quicklook generation.
        Parameters:
        quicklookBandName - the name of the quicklook band, or null
      • containsPixel

        public boolean containsPixel​(double x,
                                     double y)
        Tests if the given pixel position is within the product pixel bounds.
        Parameters:
        x - the x coordinate of the pixel position
        y - the y coordinate of the pixel position
        Returns:
        true, if so
        See Also:
        containsPixel(PixelPos)
      • containsPixel

        public boolean containsPixel​(PixelPos pixelPos)
        Tests if the given pixel position is within the product pixel bounds.
        Parameters:
        pixelPos - the pixel position, must not be null
        Returns:
        true, if so
        See Also:
        containsPixel(double, double)
      • getGcpGroup

        public PlacemarkGroup getGcpGroup()
        Gets the group of ground-control points (GCPs).
        Returns:
        the GCP group.
      • getPinGroup

        public PlacemarkGroup getPinGroup()
        Gets the group of pins.
        Returns:
        the pin group.
      • getNumResolutionsMax

        public int getNumResolutionsMax()
        Returns:
        The maximum number of resolution levels common to all band images. If less than or equal to zero, the number of resolution levels is considered to be unknown.
        Since:
        BEAM 5.0
      • setNumResolutionsMax

        public void setNumResolutionsMax​(int numResolutionsMax)
        Parameters:
        numResolutionsMax - The maximum number of resolution levels common to all band images. If less than or equal to zero, the number of resolution levels is considered to be unknown.
        Since:
        BEAM 5.0
      • isCompatibleProduct

        public boolean isCompatibleProduct​(Product product,
                                           float eps)
        Checks whether or not the given product is compatible with this product.
        Parameters:
        product - the product to compare with
        eps - the maximum lat/lon error in degree
        Returns:
        false if the scene dimensions or geocoding are different, true otherwise.
      • parseExpression

        public Term parseExpression​(String expression)
                             throws ParseException
        Parses a mathematical expression given as a text string.
        Parameters:
        expression - a expression given as a text string, e.g. "radiance_4 / (1.0 + radiance_11)".
        Returns:
        a term parsed from the given expression string
        Throws:
        ParseException - if the expression could not successfully be parsed
      • getRefRasterDataNodes

        public RasterDataNode[] getRefRasterDataNodes​(String expression)
                                               throws ParseException
        Gets all raster data nodes referenced by the given band maths expression.
        Parameters:
        expression - The expression.
        Returns:
        all raster data nodes referenced by the given band maths expression.
        Throws:
        ParseException - If the expression contains errors.
        Since:
        SNAP 2
      • 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 subsequentially visits (calls acceptVisitor for) all bands, tie-point grids and flag codings. Finally it visits product metadata root element and calls visitor.visit(this).

        Specified by:
        acceptVisitor in class ProductNode
        Parameters:
        visitor - the visitor, must not be null
      • addProductNodeListener

        public boolean addProductNodeListener​(ProductNodeListener listener)
        Adds a ProductNodeListener to this product. The ProductNodeListener is informed each time a node in this product changes.
        Parameters:
        listener - the listener to be added
        Returns:
        boolean if listener was added or not
      • removeProductNodeListener

        public void removeProductNodeListener​(ProductNodeListener listener)
        Removes a ProductNodeListener from this product.
        Parameters:
        listener - the listener to be removed.
      • hasProductNodeListeners

        protected boolean hasProductNodeListeners()
      • fireNodeDataChanged

        protected void fireNodeDataChanged​(DataNode sourceNode)
      • getRefNo

        public int getRefNo()
        Returns:
        The reference number of this product.
      • setRefNo

        public void setRefNo​(int refNo)
        Sets the reference number.
        Parameters:
        refNo - the reference number to set must be in the range 1 .. Integer.MAX_VALUE
        Throws:
        IllegalArgumentException - if the refNo is out of range
      • resetRefNo

        public void resetRefNo()
      • getProductManager

        public ProductManager getProductManager()
        Returns the product manager for this product.
        Returns:
        this product's manager, can be null
      • isCompatibleBandArithmeticExpression

        public boolean isCompatibleBandArithmeticExpression​(String expression)
        Tests if the given band arithmetic expression can be computed using this product.
        Parameters:
        expression - the mathematical expression
        Returns:
        true, if the band arithmetic is compatible with this product
        See Also:
        isCompatibleBandArithmeticExpression(String, org.esa.snap.core.jexp.Parser)
      • isCompatibleBandArithmeticExpression

        public boolean isCompatibleBandArithmeticExpression​(String expression,
                                                            Parser parser)
        Tests if the given band arithmetic expression can be computed using this product and a given expression parser.
        Parameters:
        expression - the band arithmetic expression
        parser - the expression parser to be used
        Returns:
        true, if the band arithmetic is compatible with this product
        See Also:
        createBandArithmeticParser()
      • createBandArithmeticParser

        public Parser createBandArithmeticParser()
        Creates a parser for band arithmetic expressions. The parser created will use a namespace comprising all tie-point grids, bands and flags of this product.
        Returns:
        a parser for band arithmetic expressions for this product, never null
      • createBandArithmeticDefaultNamespace

        public WritableNamespace createBandArithmeticDefaultNamespace()
        Creates a namespace to be used by parsers for band arithmetic expressions. The namespace created comprises all tie-point grids, bands and flags of this product.
        Returns:
        a namespace, never null
      • createSubset

        public Product createSubset​(ProductSubsetDef subsetDef,
                                    String name,
                                    String desc)
                             throws IOException
        Creates a subset of this product. The returned product represents a true spatial and spectral subset of this product, but it has not loaded any bands into memory. If name or desc are null or empty, the name and the description from this product was used.
        Parameters:
        subsetDef - the product subset definition
        name - the name for the new product
        desc - the description for the new product
        Returns:
        the product subset, or null if the product/subset combination is not valid
        Throws:
        IOException - if an I/O error occurs
      • getRawStorageSize

        public long getRawStorageSize​(ProductSubsetDef subsetDef)
        Gets an estimated, raw storage size in bytes of this product node.
        Specified by:
        getRawStorageSize in class ProductNode
        Parameters:
        subsetDef - if not null the subset may limit the size returned
        Returns:
        the size in bytes.
      • createPixelInfoString

        public String createPixelInfoString​(int pixelX,
                                            int pixelY)
        Creates a string containing all available information at the given pixel position. The string returned is a line separated text with each line containing a key/value pair.
        Parameters:
        pixelX - the pixel X co-ordinate
        pixelY - the pixel Y co-ordinate
        Returns:
        the info string at the given position
      • createPixelInfoString

        public String createPixelInfoString​(int pixelX,
                                            int pixelY,
                                            RasterDataNode raster)
        Creates a string containing all available information at the given pixel position in the given raster. The string returned is a line separated text with each line containing a key/value pair.
        Parameters:
        pixelX - the pixel X co-ordinate in the given raster
        pixelY - the pixel Y co-ordinate in the given raster
        raster - raster reference for the pixel position
        Returns:
        the info string at the given position
      • getPixelForBand

        public PixelPos getPixelForBand​(PixelPos pixelPosRef,
                                        RasterDataNode referenceRaster,
                                        RasterDataNode currentRaster)
        Convert the pixel X and Y read in a reference raster into another raster
        Parameters:
        pixelPosRef - the pixel X and Y co-ordinate read in the reference raster
        referenceRaster - reference raster where the pixel X and Y co-ordinate where read
        currentRaster - current raster where we want the pixel X and Y to be expressed
        Returns:
        the pixel X and Y co-ordinate in current raster
      • getRemovedChildNodes

        public ProductNode[] getRemovedChildNodes()
        Returns:
        All removed child nodes. Array may be empty.
      • canBeOrthorectified

        public boolean canBeOrthorectified()
        Checks whether or not this product can be orthorectified.
        Returns:
        true if RasterDataNode.canBeOrthorectified() returns true for all bands, false otherwise
      • setPreferredTileSize

        public void setPreferredTileSize​(int tileWidth,
                                         int tileHeight)
        Sets the preferred tile size which may be used for a the rendered image created for a RasterDataNode of this product.
        Parameters:
        tileWidth - the preferred tile width
        tileHeight - the preferred tile height
        See Also:
        setPreferredTileSize(java.awt.Dimension)
      • getAllFlagNames

        public String[] getAllFlagNames()
        Returns the names of all flags of all flag datasets contained this product.

        A flag name contains the dataset (a band of this product) and the actual flag name as defined in the flag-coding associated with the dataset. The general format for the flag name strings returned is therefore "dataset.flag_name".

        The method is used to find out which flags a product has in order to use them in bit-mask expressions.

        Returns:
        the array of all flag names. If this product does not support flags, an empty array is returned, but never null.
        See Also:
        parseExpression(String)
      • getAutoGrouping

        public Product.AutoGrouping getAutoGrouping()
        Gets the auto-grouping applicable to product nodes contained in this product.
        Returns:
        The auto-grouping or null.
        Since:
        BEAM 4.8
      • setAutoGrouping

        public void setAutoGrouping​(String pattern)
        Sets the auto-grouping applicable to product nodes contained in this product. A given pattern parameter is a textual representation of the auto-grouping. The syntax for the pattern is:
         pattern    :=  <groupPath> {':' <groupPath>} | "" (empty string)
         groupPath  :=  <groupName> {'/' <groupName>}
         groupName  :=  any non-empty string without characters ':' and '/'
         
        An example for pattern applicable to Envisat AATSR data is
         nadir/reflec:nadir/btemp:fward/reflec:fward/btemp:nadir:fward
         
        Parameters:
        pattern - The auto-grouping pattern.
        Since:
        BEAM 4.8
      • setAutoGrouping

        public void setAutoGrouping​(Product.AutoGrouping autoGrouping)
        Sets the auto-grouping applicable to product nodes contained in this product.
        Parameters:
        autoGrouping - The auto-grouping or null.
        Since:
        BEAM 4.8
      • addMask

        public Mask addMask​(String maskName,
                            Mask.ImageType imageType)
        Creates a new mask with the given name and image type and adds it to this product and returns it. The new mask's samples are computed from the given image type.
        Parameters:
        maskName - the new mask's name
        imageType - the image data type used to compute the mask samples
        Returns:
        the new mask which has just been added
        Since:
        BEAM 4.10
      • addMask

        public Mask addMask​(String maskName,
                            String expression,
                            String description,
                            Color color,
                            double transparency)
        Creates a new mask using a band arithmetic expression and adds it to this product and returns it.
        Parameters:
        maskName - the new mask's name
        expression - the band arithmetic expression
        description - the mask's description
        color - the display color
        transparency - the display transparency
        Returns:
        the new mask which has just been added
        Throws:
        IllegalArgumentException - when the expression references rasters of different sizes
        Since:
        BEAM 4.10
      • addMask

        public Mask addMask​(String maskName,
                            VectorDataNode vectorDataNode,
                            String description,
                            Color color,
                            double transparency)
        Creates a new mask based on the geometries contained in a vector data node, adds it to this product and returns it.
        Parameters:
        maskName - the new mask's name
        vectorDataNode - the vector data node
        description - the mask's description
        color - the display color
        transparency - the display transparency
        Returns:
        the new mask which has just been added
        Since:
        BEAM 4.10
      • addMask

        public Mask addMask​(String maskName,
                            VectorDataNode vectorDataNode,
                            String description,
                            Color color,
                            double transparency,
                            RasterDataNode prototypeRasterDataNode)
        Creates a new mask based on the geometries contained in a vector data node, adds it to this product and returns it.
        Parameters:
        maskName - the new mask's name
        vectorDataNode - the vector data node
        description - the mask's description
        color - the display color
        transparency - the display transparency
        prototypeRasterDataNode - a raster data node used to serve as a prototypeRasterDataNode for image layout and geo-coding. May be null.
        Returns:
        the new mask which has just been added
        Since:
        SNAP 2.0
      • addMask

        public void addMask​(Mask mask)
        Adds the given mask to this product.
        Parameters:
        mask - the mask to be added, must not be null
      • getMaskImage

        public MultiLevelImage getMaskImage​(String expression,
                                            RasterDataNode associatedRaster)
        Gets a multi-level mask image for the given band maths expression and an optional associated raster. The associated raster is used to infer the target mask's image (tile) layout.

        If the associated raster is null, the mask's tile size is this product's preferred tile size (if any) while other image layout settings are derived from createMultiLevelModel().

        Parameters:
        expression - The expression
        associatedRaster - The associated raster or null.
        Returns:
        A multi-level mask image.