Package ucar.nc2.dataset
Class VariableDS
- java.lang.Object
-
- ucar.nc2.CDMNode
-
- ucar.nc2.Variable
-
- ucar.nc2.dataset.VariableDS
-
- All Implemented Interfaces:
Comparable<VariableSimpleIF>
,Iterable<Attribute>
,IsMissingEvaluator
,AttributeContainer
,ucar.nc2.dataset.Enhancements
,ucar.nc2.dataset.EnhanceScaleMissingUnsigned
,VariableEnhanced
,ProxyReader
,VariableSimpleIF
- Direct Known Subclasses:
CoordinateAxis
public class VariableDS extends Variable implements VariableEnhanced, ucar.nc2.dataset.EnhanceScaleMissingUnsigned
A wrapper around a Variable, creating an "enhanced" Variable. The original Variable is used for the I/O. There are several distinct uses:- Handle scale/offset/missing/enum/unsigned conversion; this can change DataType and data values
- Container for coordinate system information
- NcML modifications to underlying Variable
- See Also:
NetcdfDataset
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
VariableDS.Builder<T extends VariableDS.Builder<T>>
-
Field Summary
-
Fields inherited from class ucar.nc2.Variable
defaultCoordsSizeToCache, defaultSizeToCache, permitCaching
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description double
applyScaleOffset(Number value)
Apply scale and offset to the specified value ifEnhanceScaleMissingUnsigned.hasScaleOffset()
.Array
applyScaleOffset(Array data)
Apply scale and offset to each element ofin
and return the result as a new Array, but only ifEnhanceScaleMissingUnsigned.hasScaleOffset()
.static VariableDS.Builder<?>
builder()
Get Builder for this class that allows subclassing.Number
convertMissing(Number value)
Array
convertMissing(Array in)
Number
convertUnsigned(Number value)
Convertvalue
to the next largest integral data type by anunsigned conversion
.Number
convertUnsigned(Number value, DataType dataType)
Array
convertUnsigned(Array in)
Performs anunsigned conversion
of each element ofin
and returns the result as a new Array.boolean
fillValueIsMissing()
com.google.common.collect.ImmutableList<CoordinateSystem>
getCoordinateSystems()
Get the list of Coordinate Systems for this Variable.String
getDatasetLocation()
The location of the dataset this belongs to.String
getDescription()
Get the description of the Variable.Set<NetcdfDataset.Enhance>
getEnhanceMode()
Returns the enhancements applied to this variable.double
getFillValue()
return value of _FillValue attributeArray
getMissingDataArray(int[] shape)
Return Array with missing datadouble[]
getMissingValues()
return values of missing_value attributesNetcdfFile
getNetcdfFile()
Get the NetcdfFile that this variable is contained in.double
getOffset()
The number to be added to the data after it is read.DataType
getOriginalDataType()
When this wraps another Variable, get the original Variable's DataType.String
getOriginalName()
When this wraps another Variable, get the original Variable's name.Variable
getOriginalVariable()
A VariableDS usually wraps another Variable.DataType
getScaledOffsetType()
Return the data type for values that have undergone scale/offset conversion.double
getScaleFactor()
The data are to be multiplied by this value after the data are read.DataType.Signedness
getSignedness()
Returns the signedness of the decorated variable.String
getUnitsString()
Get the Unit String for the Variable.DataType
getUnsignedConversionType()
Return the data type for values that have undergone unsigned conversion.double
getValidMax()
return the maximum value in the valid rangedouble
getValidMin()
return the minimum value in the valid rangeboolean
hasFillValue()
true if Variable has _FillValue attributeboolean
hasMissing()
true if Variable has missing data valuesboolean
hasMissingValue()
true if Variable has missing_value attributeboolean
hasScaleOffset()
true if Variable data will be converted using scale and offsetboolean
hasValidData()
true if Variable has valid_range, valid_min or valid_max attributesboolean
invalidDataIsMissing()
boolean
isFillValue(double val)
return true if val equals the _FillValueboolean
isInvalidData(double val)
return true if val is outside the valid rangeboolean
isMissing(double val)
Returnstrue
if the argument is a missing value.boolean
isMissingValue(double val)
return true if val equals a missing_value (low-level)String
lookupEnumString(int val)
Lookup the enum string for this value.boolean
missingDataIsMissing()
long
readToStream(Section section, OutputStream out)
Read variable data to a stream.Array
reallyRead(Variable client, Section section, CancelTask cancelTask)
public by accident, do not call directly.Array
reallyRead(Variable client, CancelTask cancelTask)
public by accident, do not call directly.void
showScaleMissingProxy(Formatter f)
public for debuggingVariableDS.Builder<?>
toBuilder()
Turn into a mutable Builder.String
toStringDebug()
String representation of Variable and its attributes.-
Methods inherited from class ucar.nc2.Variable
attributes, compareTo, createNewCache, equals, findAttribute, findAttributeString, findDimensionIndex, getDataType, getDimension, getDimensions, getDimensionsString, getElementSize, getEnumTypedef, getFileTypeId, getFullName, getNameAndDimensions, getNameAndDimensions, getNameAndDimensions, getParentGroup, getParentStructure, getRanges, getRank, getShape, getShape, getShapeAsSection, getSize, getSizeToCache, getSPobject, hasCachedData, hashCode, isCaching, isCoordinateVariable, isMemberOfStructure, isMetadata, isScalar, isUnlimited, isVariableLength, read, read, read, read, read, readScalarByte, readScalarDouble, readScalarFloat, readScalarInt, readScalarLong, readScalarShort, readScalarString, reduce, section, section, slice, toString
-
Methods inherited from interface ucar.nc2.AttributeContainer
findAttributeDouble, findAttributeIgnoreCase, findAttributeInteger, getName, hasAttribute, hasAttributeIgnoreCase, isEmpty, iterator
-
Methods inherited from interface ucar.nc2.dataset.Enhancements
addCoordinateSystem, removeCoordinateSystem
-
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
Methods inherited from interface ucar.nc2.dataset.VariableEnhanced
getFullName, getShortName
-
Methods inherited from interface ucar.nc2.VariableSimpleIF
getShortName
-
-
-
-
Method Detail
-
getNetcdfFile
public NetcdfFile getNetcdfFile()
Description copied from class:Variable
Get the NetcdfFile that this variable is contained in. May be null.- Overrides:
getNetcdfFile
in classVariable
-
getEnhanceMode
public Set<NetcdfDataset.Enhance> getEnhanceMode()
Returns the enhancements applied to this variable. If this variable wraps another variable, the returned set will also contain the enhancements applied to the nested variable, recursively.- Returns:
- the enhancements applied to this variable.
-
getOriginalVariable
public Variable getOriginalVariable()
A VariableDS usually wraps another Variable.- Specified by:
getOriginalVariable
in interfaceVariableEnhanced
- Returns:
- original Variable or null
-
getOriginalDataType
public DataType getOriginalDataType()
When this wraps another Variable, get the original Variable's DataType.- Returns:
- original Variable's DataType, or current data type if it doesnt wrap another variable
-
getOriginalName
public String getOriginalName()
When this wraps another Variable, get the original Variable's name.- Specified by:
getOriginalName
in interfaceVariableEnhanced
- Returns:
- original Variable's name
-
lookupEnumString
public String lookupEnumString(int val)
Description copied from class:Variable
Lookup the enum string for this value. Can only be called on enum types, where dataType.isEnum() is true.- Overrides:
lookupEnumString
in classVariable
- Parameters:
val
- the integer value of this enum- Returns:
- the String value
-
toStringDebug
public String toStringDebug()
Description copied from class:Variable
String representation of Variable and its attributes.- Overrides:
toStringDebug
in classVariable
-
getDatasetLocation
public String getDatasetLocation()
Description copied from class:Variable
The location of the dataset this belongs to. Labeling purposes only.- Overrides:
getDatasetLocation
in classVariable
-
reallyRead
public Array reallyRead(Variable client, CancelTask cancelTask) throws IOException
Description copied from class:Variable
public by accident, do not call directly.- Specified by:
reallyRead
in interfaceProxyReader
- Overrides:
reallyRead
in classVariable
- Parameters:
client
- the client VariablecancelTask
- user may cancel- Returns:
- Array
- Throws:
IOException
- on error
-
reallyRead
public Array reallyRead(Variable client, Section section, CancelTask cancelTask) throws IOException, InvalidRangeException
Description copied from class:Variable
public by accident, do not call directly.- Specified by:
reallyRead
in interfaceProxyReader
- Overrides:
reallyRead
in classVariable
- Parameters:
client
- the client Variablesection
- the section of data to read.cancelTask
- user may cancel- Returns:
- Array
- Throws:
IOException
- on errorInvalidRangeException
- if section has incorrect rank or illegal shape.
-
readToStream
public long readToStream(Section section, OutputStream out) throws IOException, InvalidRangeException
Description copied from class:Variable
Read variable data to a stream. Support for NcStreamWriter.- Overrides:
readToStream
in classVariable
- Throws:
IOException
InvalidRangeException
-
getMissingDataArray
public Array getMissingDataArray(int[] shape)
Return Array with missing data- Parameters:
shape
- of this shape- Returns:
- Array with given shape
-
showScaleMissingProxy
public void showScaleMissingProxy(Formatter f)
public for debugging- Parameters:
f
- put info here
-
getDescription
public String getDescription()
Description copied from class:Variable
Get the description of the Variable. Default is to use CDM.LONG_NAME attribute value. If not exist, look for "description", "title", or "standard_name" attribute value (in that order).- Specified by:
getDescription
in interfaceucar.nc2.dataset.Enhancements
- Specified by:
getDescription
in interfaceVariableSimpleIF
- Overrides:
getDescription
in classVariable
- Returns:
- description, or null if not found.
-
getUnitsString
public String getUnitsString()
Description copied from class:Variable
Get the Unit String for the Variable. Looks for the CDM.UNITS attribute value- Specified by:
getUnitsString
in interfaceucar.nc2.dataset.Enhancements
- Specified by:
getUnitsString
in interfaceVariableSimpleIF
- Overrides:
getUnitsString
in classVariable
- Returns:
- unit string, or null if not found.
-
getCoordinateSystems
public com.google.common.collect.ImmutableList<CoordinateSystem> getCoordinateSystems()
Description copied from interface:Enhancements
Get the list of Coordinate Systems for this Variable.- Specified by:
getCoordinateSystems
in interfaceucar.nc2.dataset.Enhancements
- Returns:
- list of type CoordinateSystem; may be empty but not null.
-
hasScaleOffset
public boolean hasScaleOffset()
Description copied from interface:EnhanceScaleMissingUnsigned
true if Variable data will be converted using scale and offset- Specified by:
hasScaleOffset
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
-
getScaleFactor
public double getScaleFactor()
Description copied from interface:EnhanceScaleMissingUnsigned
The data are to be multiplied by this value after the data are read. By default it is1.0
, i.e. no scaling. It will remain that value if the variable defines noCDM.SCALE_FACTOR
attribute.- Specified by:
getScaleFactor
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
- Returns:
- the multiplier to apply to the data.
-
getOffset
public double getOffset()
Description copied from interface:EnhanceScaleMissingUnsigned
The number to be added to the data after it is read. If bothCDM.SCALE_FACTOR
andCDM.ADD_OFFSET
attributes are present, the data are first scaled before the offset is added. By default it is0.0
, i.e. no offset. It will remain that value if the variable defines noCDM.SCALE_FACTOR
attribute.- Specified by:
getOffset
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
- Returns:
- the number to add to the data.
-
hasMissing
public boolean hasMissing()
Description copied from interface:EnhanceScaleMissingUnsigned
true if Variable has missing data values- Specified by:
hasMissing
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
- Specified by:
hasMissing
in interfaceIsMissingEvaluator
- Returns:
- true if Variable has missing data values
-
isMissing
public boolean isMissing(double val)
Description copied from interface:EnhanceScaleMissingUnsigned
Returnstrue
if the argument is a missing value. Note thatFloat.NaN
andDouble.NaN
are considered missing data.- Specified by:
isMissing
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
- Specified by:
isMissing
in interfaceIsMissingEvaluator
- Parameters:
val
- an unpacked value.- Returns:
true
if the argument is a missing value.
-
hasValidData
public boolean hasValidData()
Description copied from interface:EnhanceScaleMissingUnsigned
true if Variable has valid_range, valid_min or valid_max attributes- Specified by:
hasValidData
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
-
getValidMin
public double getValidMin()
Description copied from interface:EnhanceScaleMissingUnsigned
return the minimum value in the valid range- Specified by:
getValidMin
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
-
getValidMax
public double getValidMax()
Description copied from interface:EnhanceScaleMissingUnsigned
return the maximum value in the valid range- Specified by:
getValidMax
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
-
isInvalidData
public boolean isInvalidData(double val)
Description copied from interface:EnhanceScaleMissingUnsigned
return true if val is outside the valid range- Specified by:
isInvalidData
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
-
hasFillValue
public boolean hasFillValue()
Description copied from interface:EnhanceScaleMissingUnsigned
true if Variable has _FillValue attribute- Specified by:
hasFillValue
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
-
getFillValue
public double getFillValue()
Description copied from interface:EnhanceScaleMissingUnsigned
return value of _FillValue attribute- Specified by:
getFillValue
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
-
isFillValue
public boolean isFillValue(double val)
Description copied from interface:EnhanceScaleMissingUnsigned
return true if val equals the _FillValue- Specified by:
isFillValue
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
-
hasMissingValue
public boolean hasMissingValue()
Description copied from interface:EnhanceScaleMissingUnsigned
true if Variable has missing_value attribute- Specified by:
hasMissingValue
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
-
getMissingValues
public double[] getMissingValues()
Description copied from interface:EnhanceScaleMissingUnsigned
return values of missing_value attributes- Specified by:
getMissingValues
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
-
isMissingValue
public boolean isMissingValue(double val)
Description copied from interface:EnhanceScaleMissingUnsigned
return true if val equals a missing_value (low-level)- Specified by:
isMissingValue
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
-
missingDataIsMissing
public boolean missingDataIsMissing()
-
fillValueIsMissing
public boolean fillValueIsMissing()
-
invalidDataIsMissing
public boolean invalidDataIsMissing()
-
getScaledOffsetType
@Nullable public DataType getScaledOffsetType()
Description copied from interface:EnhanceScaleMissingUnsigned
Return the data type for values that have undergone scale/offset conversion. This will benull
if the decorated variable lacksscale_factor
oradd_offset
attributes. You can check withEnhanceScaleMissingUnsigned.hasScaleOffset()
.- Specified by:
getScaledOffsetType
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
- Returns:
- the data type for values that have undergone scale/offset conversion.
-
getUnsignedConversionType
public DataType getUnsignedConversionType()
Description copied from interface:EnhanceScaleMissingUnsigned
Return the data type for values that have undergone unsigned conversion. This will never benull
, even when no unsigned conversion is necessary (because the underlying variable isn't unsigned). In such cases, this data type will be the same as that of the underlying variable.- Specified by:
getUnsignedConversionType
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
- Returns:
- the data type for values that have undergone unsigned conversion.
-
getSignedness
public DataType.Signedness getSignedness()
Description copied from interface:EnhanceScaleMissingUnsigned
Returns the signedness of the decorated variable.- Specified by:
getSignedness
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
- Returns:
- the signedness of the decorated variable.
-
applyScaleOffset
public double applyScaleOffset(Number value)
Description copied from interface:EnhanceScaleMissingUnsigned
Apply scale and offset to the specified value ifEnhanceScaleMissingUnsigned.hasScaleOffset()
. Otherwise, just returnvalue
.- Specified by:
applyScaleOffset
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
-
applyScaleOffset
public Array applyScaleOffset(Array data)
Description copied from interface:EnhanceScaleMissingUnsigned
Apply scale and offset to each element ofin
and return the result as a new Array, but only ifEnhanceScaleMissingUnsigned.hasScaleOffset()
. Otherwise, just returnvalue
. Otherwise, just returndata
.- Specified by:
applyScaleOffset
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
- Parameters:
data
- convert this- Returns:
- converted data.
-
convertUnsigned
public Number convertUnsigned(Number value)
Description copied from interface:EnhanceScaleMissingUnsigned
Convertvalue
to the next largest integral data type by anunsigned conversion
. The conversion only happens if the decorated variableis unsigned
andvalue
is a negative integer. Otherwise, simply returnvalue
.- Specified by:
convertUnsigned
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
- Parameters:
value
- an integral number to convert.- Returns:
- the result of an unsigned conversion of
value
.
-
convertUnsigned
public Array convertUnsigned(Array in)
Description copied from interface:EnhanceScaleMissingUnsigned
Performs anunsigned conversion
of each element ofin
and returns the result as a new Array. The data type of the returned array will beEnhanceScaleMissingUnsigned.getUnsignedConversionType()
.- Specified by:
convertUnsigned
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
- Parameters:
in
- an Array containing integral Numbers to convert.- Returns:
- the result of an unsigned conversion of each element of
in
.
-
convertMissing
public Number convertMissing(Number value)
Description copied from interface:EnhanceScaleMissingUnsigned
- Specified by:
convertMissing
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
-
convertMissing
public Array convertMissing(Array in)
Description copied from interface:EnhanceScaleMissingUnsigned
- Specified by:
convertMissing
in interfaceucar.nc2.dataset.EnhanceScaleMissingUnsigned
- Parameters:
in
- an array containing floating-point numbers to convert.- Returns:
- the result of a missing conversion of each element of
in
.
-
toBuilder
public VariableDS.Builder<?> toBuilder()
Description copied from class:Variable
Turn into a mutable Builder. Can use toBuilder().build() to copy.
-
builder
public static VariableDS.Builder<?> builder()
Get Builder for this class that allows subclassing.- See Also:
- "https://community.oracle.com/blogs/emcmanus/2010/10/24/using-builder-pattern-subclasses"
-
-