Class Product

All Implemented Interfaces:
Extensible, Closeable, AutoCloseable

public class Product extends ProductNode implements Closeable
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.

  • Field Details

  • Constructor Details

    • 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:
    • 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:
  • Method Details

    • 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

      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:
    • 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

      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:
    • 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
    • setOwner

      public void setOwner(ProductNode owner)
      Overwrites theProductNode.setOwner(ProductNode) method in order to throw an IllegalStateException, since products currently cannot have an owner.
      Overrides:
      setOwner in class ProductNode
      Parameters:
      owner - the new owner
    • 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:
    • 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

      public void closeIO() throws IOException
      Closes the file I/O for this product. Calls in sequence closeProductReader() and closeProductWriter(). The dispose() method is not called, but should be called if the product instance is no longer in use.
      Throws:
      IOException - if an I/O error occurs
      See Also:
    • 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
    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Throws:
      IOException
    • 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:
    • 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:
    • 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
    • getGroups

      public ProductNodeGroup<ProductNodeGroup> getGroups()
      Returns:
      The group which contains all other product node groups.
      Since:
      BEAM 5.0
    • 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
      Throws:
      IllegalStateException - if the band is referenced by a virtual band
    • 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
    • getQuicklookGroup

      public ProductNodeGroup<Quicklook> getQuicklookGroup()
    • 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
    • getMaskGroup

      public ProductNodeGroup<Mask> getMaskGroup()
    • getVectorDataGroup

      public ProductNodeGroup<VectorDataNode> getVectorDataGroup()
    • getFlagCodingGroup

      public ProductNodeGroup<FlagCoding> getFlagCodingGroup()
    • getIndexCodingGroup

      public ProductNodeGroup<IndexCoding> getIndexCodingGroup()
    • 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

      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:
    • 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.
    • getProductNodeListeners

      public ProductNodeListener[] getProductNodeListeners()
    • hasProductNodeListeners

      protected boolean hasProductNodeListeners()
    • fireNodeChanged

      protected void fireNodeChanged(ProductNode sourceNode, String propertyName, Object oldValue, Object newValue)
    • fireNodeDataChanged

      protected void fireNodeDataChanged(DataNode sourceNode)
    • fireNodeAdded

      protected void fireNodeAdded(ProductNode childNode, ProductNodeGroup nodeGroup)
    • fireNodeRemoved

      protected void fireNodeRemoved(ProductNode childNode, ProductNodeGroup nodeGroup)
    • 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

      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

      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
    • setModified

      public void setModified(boolean modified)
      Description copied from class: ProductNode
      Sets this node's modified flag.

      If the modified flag changes to true and this node has an owner, the owner's modified flag is also set to true.

      Overrides:
      setModified in class ProductNode
      Parameters:
      modified - whether or not this node is beeing marked as modified.
      See Also:
    • 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
    • getPreferredTileSize

      public Dimension getPreferredTileSize()
      Gets the preferred tile size which may be used for a the rendered image created for a RasterDataNode of this product.
      Returns:
      the preferred tile size, may be null if not specified
      See Also:
    • setPreferredTileSize

      public void setPreferredTileSize(Dimension preferredTileSize)
      Sets the preferred tile size which may be used for a the rendered image created for a RasterDataNode of this product.
      Parameters:
      preferredTileSize - the preferred tile size, may be null if not specified
      See Also:
    • 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:
    • 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:
    • getAutoGrouping

      public eu.esa.snap.core.datamodel.group.BandGroup 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(eu.esa.snap.core.datamodel.group.BandGroup 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.
    • createMultiLevelModel

      public MultiLevelModel createMultiLevelModel()
    • setName

      public void setName(String name)
      Sets this product's name.

      The name can be identical to a band name.

      Overrides:
      setName in class ProductNode
      Parameters:
      name - The name.