libdas2
das2 core C utilities
|
#include <das2/plane.h>
Describes a data plane within a packet type.
Each packet of Das2 stream data contains values for one or more planes. To illustrate this take a look at the packet header in the X Tagged Stream Example from the Das2 ICD.
Each <x> and <y> element inside the <packet> element above is a serialized PlaneDesc. The point of a PlaneDesc structure is to:
Just as an isolated plane without a parent <packet> tag does not make sense in a Das2 Stream, PlaneDesc structures don't have much use on their own. They are typically owned by a PacketDescriptor and accessed via the PktDesc:getPlane function
Public Member Functions | |
PlaneDesc * | new_PlaneDesc_empty (void) |
Creates a Plane Descriptor with mostly empty settings. | |
PlaneDesc * | new_PlaneDesc (plane_type_t pt, const char *sGroup, DasEncoding *pType, das_units units) |
Creates a new X,Y or Z plane descriptor. More... | |
PlaneDesc * | new_PlaneDesc_yscan (const char *sGroup, DasEncoding *pZType, das_units zUnits, size_t uItems, DasEncoding *pYType, const double *pYTags, das_units yUnits) |
Creates a new <yscan> plane descriptor. More... | |
PlaneDesc * | new_PlaneDesc_yscan_series (const char *sGroup, DasEncoding *pZType, das_units zUnits, size_t uItems, double yTagInter, double yTagMin, double yTagMax, das_units yUnits) |
Creates a new <yscan> plane descriptor using a yTag series. More... | |
PlaneDesc * | PlaneDesc_copy (const PlaneDesc *pThis) |
Copy constructor for planes Deep copy one a plane except for the parent id. More... | |
void | del_PlaneDesc (PlaneDesc *pThis) |
Free a plane object allocated on the heap. More... | |
bool | PlaneDesc_equivalent (const PlaneDesc *pThis, const PlaneDesc *pOther) |
Check to see if two plane descriptors describe the same output. More... | |
plane_type_t | PlaneDesc_getType (const PlaneDesc *pThis) |
Get a plane's type. More... | |
size_t | PlaneDesc_getNItems (const PlaneDesc *pThis) |
Get the number of items in a plane YScan planes have a variable number of items, for all other types this function returns 1. More... | |
double | PlaneDesc_getValue (const PlaneDesc *pThis, size_t uIdx) |
Get the first value from a plane. More... | |
DasErrCode | PlaneDesc_setValue (PlaneDesc *pThis, size_t uIdx, double value) |
Set a current value in a plane. More... | |
DasErrCode | PlaneDesc_setTimeValue (PlaneDesc *pThis, const char *sTime, size_t idx) |
Set a single time value in a plane. More... | |
DasEncoding * | PlaneDesc_getValEncoder (PlaneDesc *pThis) |
Get the data value encoder/decoder object for a plane The encoder returned via this pointer can be mutated and any changes will be reflected in the next data write for the plane. More... | |
void | PlaneDesc_setValEncoder (PlaneDesc *pThis, DasEncoding *pEnc) |
Set the data value encoder/decoder object for a plane The previous encoder's memory is returned the heap via free(). More... | |
const double * | PlaneDesc_getValues (const PlaneDesc *pThis) |
Get a pointer to the current set of values in a plane. More... | |
void | PlaneDesc_setValues (PlaneDesc *pThis, const double *pData) |
Set all the current values for a plane. More... | |
double | PlaneDesc_getFill (const PlaneDesc *pThis) |
Returns the fill value identified for the plane. More... | |
#define | PlaneDesc_isFill(P, V) ((P->rFill == 0.0 && V == 0.0) || (fabs((P->rFill - V)/P->rFill)<0.00001)) |
Returns non-zero if the value is the fill value identified for the data plane. | |
void | PlaneDesc_setFill (PlaneDesc *pThis, double value) |
Identify the double fill value for the plane. | |
const char * | PlaneDesc_getName (const PlaneDesc *pThis) |
Get the data group of a plane. More... | |
void | PlaneDesc_setName (PlaneDesc *pThis, const char *sName) |
Set the data group of a plane. More... | |
das_units | PlaneDesc_getUnits (const PlaneDesc *pThis) |
Get the units of measure for a plane's packet data. More... | |
void | PlaneDesc_setUnits (PlaneDesc *pThis, das_units units) |
Set the unit type for the plane data. More... | |
das_units | PlaneDesc_getYTagUnits (PlaneDesc *pThis) |
Get Y axis units for a 2-D plane. More... | |
const double * | PlaneDesc_getYTags (const PlaneDesc *pThis) |
Get Y axis coordinates for a 2-D plane of data. More... | |
const double * | PlaneDesc_getOrMakeYTags (PlaneDesc *pThis) |
Get Y tags as an array regardless of the storage type If a yTags array is constructed via this method it is cleaned up when the plane destructor is called. More... | |
DasErrCode | PlaneDesc_encode (PlaneDesc *pThis, DasBuf *pBuf, const char *sIndent) |
Serialize a Plane Descriptor as XML data. More... | |
DasErrCode | PlaneDesc_encodeData (PlaneDesc *pThis, DasBuf *pBuf, bool bLast) |
Serialize a plane's current data. More... | |
DasErrCode | PlaneDesc_decodeData (const PlaneDesc *pThis, DasBuf *pBuf) |
Read in a plane's current data. More... | |
Descriptor Functions | |
These work for any type of Descriptor, including PlaneDesc , PktDesc, StreamDesc, DasDs and DasVar. To make your compiler happy you will need to cast Plane, Packet and Stream Descriptor pointers to just the generic type of Descriptor pointer when using these functions. For example: | |
bool | DasDesc_equals (const DasDesc *pOne, const DasDesc *pTwo) |
Check to see if two descriptors contain the same properties Note, the order of the properties may be different between the descriptors but if the contents are the same then the descriptors are considered to be equal. More... | |
const DasDesc * | DasDesc_parent (DasDesc *pThis) |
The the parent of a Descriptor. More... | |
size_t | DasDesc_length (const DasDesc *pThis) |
Get the number of properties in a descriptor. More... | |
const char * | DasDesc_getNameByIdx (const DasDesc *pThis, size_t uIdx) |
Get a property name by an index. More... | |
const char * | DasDesc_getValByIdx (const DasDesc *pThis, size_t uIdx) |
Get a property value by an index. More... | |
const char * | DasDesc_getTypeByIdx (const DasDesc *pThis, size_t uIdx) |
Get a data type of a property by an index. | |
bool | DasDesc_has (const DasDesc *pThis, const char *propertyName) |
Determine if a property is present in a Descriptor or it's ancestors. More... | |
DasErrCode | DasDesc_set (DasDesc *pThis, const char *sType, const char *sName, const char *sVal) |
Generic property setter. More... | |
bool | DasDesc_remove (DasDesc *pThis, const char *propretyName) |
Remove a property from a descriptor, if preset. More... | |
const char * | DasDesc_getStr (const DasDesc *pThis, const char *propertyName) |
read the property of type String named propertyName. | |
DasErrCode | DasDesc_setStr (DasDesc *pThis, const char *sName, const char *sVal) |
SetProperty methods add properties to any Descriptor (stream,packet,plane). More... | |
DasErrCode | DasDesc_vSetStr (DasDesc *pThis, const char *sName, const char *sFmt,...) |
Set a string property in the manner of sprintf. | |
double | DasDesc_getDouble (const DasDesc *pThis, const char *propertyName) |
Read the property of type double named propertyName. More... | |
DasErrCode | DasDesc_setDouble (DasDesc *pThis, const char *propertyName, double value) |
Set property of type double. | |
double | DasDesc_getDatum (DasDesc *pThis, const char *sPropName, das_units units) |
Get the a numeric property in the specified units. More... | |
DasErrCode | DasDesc_setDatum (DasDesc *pThis, const char *sName, double rVal, das_units units) |
Set property of type Datum (double, UnitType pair) More... | |
double * | DasDesc_getDoubleAry (DasDesc *pThis, const char *propertyName, int *nitems) |
Get the values of an array property. More... | |
DasErrCode | DasDesc_setDoubleArray (DasDesc *pThis, const char *propertyName, int nitems, double *value) |
Set the property of type double array. | |
int | DasDesc_getInt (const DasDesc *pThis, const char *propertyName) |
Get a property integer value. More... | |
DasErrCode | DasDesc_setInt (DasDesc *pThis, const char *sName, int nVal) |
Set the property of type int. | |
bool | DasDesc_getBool (DasDesc *pThis, const char *sPropName) |
Get a property boolean value. More... | |
DasErrCode | DasDesc_setDatumRng (DasDesc *pThis, const char *sName, double beg, double end, das_units units) |
Set property of type DatumRange (double, double, UnitType triple) | |
DasErrCode | DasDesc_getStrRng (DasDesc *pThis, const char *sName, char *sMin, char *sMax, das_units *pUnits, size_t uLen) |
Get a property of type DatumRange with unconverted strings. More... | |
DasErrCode | DasDesc_setFloatAry (DasDesc *pThis, const char *propertyName, int nitems, float *value) |
Set the property of type float array. More... | |
void | DasDesc_copyIn (DasDesc *pThis, const DasDesc *source) |
Deepcopy properties into a descriptor. More... | |
DasErrCode | DasDesc_encode (DasDesc *pThis, DasBuf *pBuf, const char *sIndent) |
Encode a generic set of properties to a buffer. More... | |
PlaneDesc * new_PlaneDesc | ( | plane_type_t | pt, |
const char * | sGroup, | ||
DasEncoding * | pType, | ||
das_units | units | ||
) |
Creates a new X,Y or Z plane descriptor.
pt | The plane_type_t, must be one of:
|
sGroup | the name for the data group this plane belongs to, may be the empty string "" |
pType | an encoding object for the new plane. The PlaneDesc will take ownership of this object and free it when del_PlaneDesc is called. |
units | The units of measurement for data in this plane. |
PlaneDesc * new_PlaneDesc_yscan | ( | const char * | sGroup, |
DasEncoding * | pZType, | ||
das_units | zUnits, | ||
size_t | uItems, | ||
DasEncoding * | pYType, | ||
const double * | pYTags, | ||
das_units | yUnits | ||
) |
Creates a new <yscan> plane descriptor.
A <yscan> plane is an array of Z-values taken along Y for each X tag. Spectrogram amplitudes are commonly transmitted in this plane type. In that case <x> contains times, <yscan> values are amplitudes, and the frequencies are held in the yTags attribute for the plane.
sGroup | the name for the data group this plane belongs to, may be the empty string "" |
pZType | an encoding object for the new plane. The PlaneDesc will take ownership of this object and free it when del_PlaneDesc is called. |
zUnits | The units of measurement for Z-axis data in this plane. |
uItems | The number of data values in each packet of this plane's data. i.e. the number of yTags. |
pYType | The encoding for the Y values. If NULL, a simple encoding will be defined with the format string "%.6e" |
pYTags | The YTags for the new plane, if NULL the value index will be used as the YTags. I.e. the Y axis values will be 0, 1, 2, ... uItems - 1 |
yUnits | The units for yTag values. |
PlaneDesc * new_PlaneDesc_yscan_series | ( | const char * | sGroup, |
DasEncoding * | pZType, | ||
das_units | zUnits, | ||
size_t | uItems, | ||
double | yTagInter, | ||
double | yTagMin, | ||
double | yTagMax, | ||
das_units | yUnits | ||
) |
Creates a new <yscan> plane descriptor using a yTag series.
A <yscan> plane is an array of Z-values taken along Y for each X tag. Waveform packets are commonly transmitted in this plane type. In that case <x> contains first sample times, <yscan> values are amplitudes, and the time offsets are defined by the YTag series attributes of this plane
sGroup | the name for the data group this plane belongs to, may be the empty string "" |
pZType | an encoding object for the new plane. The PlaneDesc will take ownership of this object and free it when del_PlaneDesc is called. |
zUnits | The units of measurement for Z-axis data in this plane. |
uItems | The number of data values in each packet of this plane's data. i.e. the number of yTags. |
yTagInter | the interval between values in the yTag series |
yTagMin | the initial value of the series. Use DAS_FILL_VALUE to have the starting point set automatically using yTagMax. |
yTagMax | the final value of the series. Use DAS_FILL_VALUE to have the ending point set automatically using yTagMin. |
yUnits | The units for yTag values. |
Copy constructor for planes Deep copy one a plane except for the parent id.
pThis | The plane descriptor to copy |
void del_PlaneDesc | ( | PlaneDesc * | pThis | ) |
Free a plane object allocated on the heap.
This frees the memory allocated for the main structure as well as any internal buffers allocated for storing data values and Y-tags.
pThis | The plane descriptor to free |
Check to see if two plane descriptors describe the same output.
Two plane descriptors are considered to be the same if they result in an equivalent packet header definition. This means the same plane type with the same number of items and the same ytags along with the same data encoding and units.
The following items are not checked for equivalency:
Passing the same non-NULL pointer twice to this function will always result in a return of true, as planes are equivalent to themselves.
pThis | The first plane descriptor |
pOther | the second plane descriptor |
plane_type_t PlaneDesc_getType | ( | const PlaneDesc * | pThis | ) |
Get a plane's type.
pThis | The plane descriptor to query |
size_t PlaneDesc_getNItems | ( | const PlaneDesc * | pThis | ) |
Get the number of items in a plane YScan planes have a variable number of items, for all other types this function returns 1.
pThis | the PlaneDiscriptor |
double PlaneDesc_getValue | ( | const PlaneDesc * | pThis, |
size_t | uIdx | ||
) |
Get the first value from a plane.
Get the current value for an item in a plane, Note that X, Y and Z planes only have one item.
pThis | The Plane descriptor object |
uIdx | the index of the value to retrieve, this is always 0 for X, Y, and Z planes. |
DasErrCode PlaneDesc_setValue | ( | PlaneDesc * | pThis, |
size_t | uIdx, | ||
double | value | ||
) |
Set a current value in a plane.
Set a current value for an item in a plane. Note X, Y and Z planes only have one item.
pThis | The plane in question |
uIdx | the index of the value to set. Only YScan planes have data at indicies above 0. |
value | The new value |
DasErrCode PlaneDesc_setTimeValue | ( | PlaneDesc * | pThis, |
const char * | sTime, | ||
size_t | idx | ||
) |
Set a single time value in a plane.
Manually sets a current value for a plane instead of decoding it from an input stream. The given time string is converted to a broken down time using the parsetime function from daslib and then the brokend down time is converted to a double in the units specified for this plane.
pThis | The plane to get the value |
sTime | a parse-able time string |
idx | The index at which to write the value, for X, Y and Z planes 0 is the only valid index. |
DasEncoding * PlaneDesc_getValEncoder | ( | PlaneDesc * | pThis | ) |
Get the data value encoder/decoder object for a plane The encoder returned via this pointer can be mutated and any changes will be reflected in the next data write for the plane.
pThis | The data plane in question |
void PlaneDesc_setValEncoder | ( | PlaneDesc * | pThis, |
DasEncoding * | pEnc | ||
) |
Set the data value encoder/decoder object for a plane The previous encoder's memory is returned the heap via free().
pThis | The data plane in question |
pEnc | A pointer to the new encoder structure, the plane takes ownership of it's memory. This value must not be null |
const double * PlaneDesc_getValues | ( | const PlaneDesc * | pThis | ) |
Get a pointer to the current set of values in a plane.
Planes are basically wrappers around a double array with some encoding and decoding information. This function provides a pointer to the value array for the plane.
[in] | pThis | The plane in question |
void PlaneDesc_setValues | ( | PlaneDesc * | pThis, |
const double * | pData | ||
) |
Set all the current values for a plane.
pThis | The plane to receive the values |
pData | A pointer to an array of doubles that is the same length as the number of items in this plane. Values are copied in, no references are kept to the input pointer after the function completes |
double PlaneDesc_getFill | ( | const PlaneDesc * | pThis | ) |
Returns the fill value identified for the plane.
Note: If the value has not been explicitly specified, then the canonical value is used.
const char * PlaneDesc_getName | ( | const PlaneDesc * | pThis | ) |
Get the data group of a plane.
void PlaneDesc_setName | ( | PlaneDesc * | pThis, |
const char * | sName | ||
) |
Set the data group of a plane.
pThis | The plane descriptor to regroup |
sGroup | the new data group for the plane, will be copied into internal memory |
Get the units of measure for a plane's packet data.
Set the unit type for the plane data.
All Das2 Stream values are stored as doubles within the library the units property indicates what these doubles mean
pThis | The Plane to alter |
units | The new units setting. Note this value may be NULL in which case the Plane will be set to UNIT_DIMENSIONLESS. |
Get Y axis units for a 2-D plane.
const double * PlaneDesc_getYTags | ( | const PlaneDesc * | pThis | ) |
Get Y axis coordinates for a 2-D plane of data.
const double * PlaneDesc_getOrMakeYTags | ( | PlaneDesc * | pThis | ) |
Get Y tags as an array regardless of the storage type If a yTags array is constructed via this method it is cleaned up when the plane destructor is called.
DasErrCode PlaneDesc_encode | ( | PlaneDesc * | pThis, |
DasBuf * | pBuf, | ||
const char * | sIndent | ||
) |
Serialize a Plane Descriptor as XML data.
This function is almost the opposite of new_PlaneDesc_pairs()
pThis | The plane descriptor to store as string data |
pBuf | A buffer object to receive the bytes |
sIndent | A string to place before each line of output |
DasErrCode PlaneDesc_encodeData | ( | PlaneDesc * | pThis, |
DasBuf * | pBuf, | ||
bool | bLast | ||
) |
Serialize a plane's current data.
In addition to holding the format information for a single data plane in a Packet, PlaneDesc objects also hold one set of samples for the plane. For the plane types <x>, <y>, and <z> a single plane's data is just one value. For the <yscan> type a single plane's data is 1-N values. Use this function to encode a planes current data values for output.
pThis | The plane descriptor that has been loaded with data |
pBuf | A buffer to receive the encoded bytes |
bLast | All ASCII type values are written with a single space after the value except for the last value of the last plane which has a newline character appended. Set this to true if this is the last plane in the packet which is being encoded. |
DasErrCode PlaneDesc_decodeData | ( | const PlaneDesc * | pThis, |
DasBuf * | pBuf | ||
) |
Read in a plane's current data.
pThis | The plane to receive the data values |
pBuf | The buffer containing values to decode. |
Check to see if two descriptors contain the same properties Note, the order of the properties may be different between the descriptors but if the contents are the same then the descriptors are considered to be equal.
Note that parent descriptor properties are not checked when handling the comparison.
pOne | The first descriptor |
pTwo | The second descriptor |
The the parent of a Descriptor.
Plane descriptors are owned by packet descriptors and packet descriptors are owned by stream descriptors. This function lets you craw the ownership hierarchy
pThis |
|
inherited |
Get the number of properties in a descriptor.
Descriptor's have a hierarchy. In general when a property is requested, if a given Descriptor does not have a property the request is passed to the parent descriptor. This function only returns the number of properties in the given descriptor. It does not include properties owned by parents or ancestors.
This is useful when iterating over all properties in a descriptor.
pThis | A pointer to the descriptor to query |
|
inherited |
Get a property name by an index.
This is useful when iterating over all properties in a Descriptor. Only properties owed by a descriptor are queried in this manner. Parent descriptors are not consulted.
pThis | A pointer to the descriptor to query |
uIdx | The index of the property, will be a value between 0 and the return value from Desc_getNProps() |
|
inherited |
Get a property value by an index.
This is useful when iterating over all properties in a Descriptor. Only properties owned by a descriptor are queried in this manner. Parent descriptors are not consulted.
pThis | A pointer to the descriptor to query |
uIdx | The number of the property, will be a value from 0 and 1 less than the return value from Desc_getNProps() |
|
inherited |
Determine if a property is present in a Descriptor or it's ancestors.
pThis | the descriptor object to query |
propertyName | the name of the property to retrieve. |
|
inherited |
Generic property setter.
All properties are stored internally as strings. The various typed Desc_setProp* functions all call this function after converting their arguments to strings.
pThis | The Descriptor to receive the property |
sType | The Type of property should be one of the strings:
|
sName | The property name, which cannot contain spaces |
sVal | The value, which may be anything including NULL |
|
inherited |
Remove a property from a descriptor, if preset.
It is safe to call this function for properties not present on the descriptor, it simply does nothing and returns false.
|
inherited |
SetProperty methods add properties to any Descriptor (stream,packet,plane).
The typed methods (e.g. setPropertyDatum) property tag the property with a type so that it will be parsed into the given type.
|
inherited |
Read the property of type double named propertyName.
The property value is parsed using sscanf.
Get the a numeric property in the specified units.
Descriptor properties my be provided as Datums. Datums are a double value along with a specified measurement unit.
pThis | The Descriptor containing the property in question. |
sPropName | The name of the property to retrieve. |
units | The units of measure in which the return value will be represented. If the property value is stored in a different set of units than those indicated by this parameter than the output will be converted to the given unit type. |
|
inherited |
Set property of type Datum (double, UnitType pair)
If a property with this name already exists it is 1st deleted and then the new property is added in its place.
pThis | The descriptor to receive the property |
sName | The name of the property to set |
rVal | The numeric value of the property |
units | The units of measure for the property |
|
inherited |
Get the values of an array property.
Space for the array is allocated by getDoubleArrayFromString. and nitems is set to indicate the size of the array.
[in] | pThis | the descriptor object to query |
[in] | propertyName | the name of the proprety to retrieve |
[out] | nitems | a pointer to a an integer containing the number of values in the returned array. |
|
inherited |
Get a property integer value.
pThis | the descriptor object to query |
propertyName | the name of the proprety to retrieve |
|
inherited |
Get a property boolean value.
pThis | the descriptor object to query |
sPropName | the name of the proprety to retrieve |
|
inherited |
Get a property of type DatumRange with unconverted strings.
This version is handy if you just want to know the intrinsic units of the range without converting the values to some specific type of double value.
|
inherited |
Set the property of type float array.
Note the array is cast to a double array before encoding.
Deepcopy properties into a descriptor.
pThis | the descriptor to receive a copy of the properties |
source | the descriptor with the properties to be copied. |
|
inherited |
Encode a generic set of properties to a buffer.
pThis | The descriptors who's properties should be encoded |
pBuf | A buffer object to receive the XML data |
sIndent | An indent level for the property strings, makes 'em look nice |