There are two data specification entries. These give the storage format for of the UDF sensor data and the time flow pattern within a UDF sensor set. Both entries are used by the UDF kernel software.
This is a scalar field containing the storage format of the UDF sensor data within a sensor set. The data storage format is used by the UDF kernel in determining how to access data, how to return it, and what, if any, ancillary information needs to be returned with it.
There are four recognized data storage formats of which only three are actively supported by the UDF kernel software. The four are listed in the table below together with their VIDF field values.
| DATA STORAGE FORMAT DEFINITIONS | ||
|---|---|---|
| VALUE | DEFINITION | COMMENTS |
| 0 | PARTIAL ARRAY | Not Currently Supported |
| 1 | FULL ARRAY | Fully Supported |
| 2 | SCALAR | Fully Supported |
| 3 | MATRIX | Not Supported prior to VIDF V2.2 |
In UDF definitions which use the array storage format each defined UDF sensor is associated with with an array of values and each instance of the array must fully contained in a single UDF sensor set. In UDF terminology such sensors are referred to as array sensors. (You may also at times find them referred to as scan and/or vector sensors.) The array values are stored in the UDF Data File while the associated array indices are stored in the UDF Header File. Both sets of information are returned at each data access. In allows for the handling of partially transmitted arrays.
Array sensors have in intrinsic length associated with them. The length can vary throughout a UDF data set but remains constant through a given UDF sensor set. Both the array length and the element indices are held in the header record associated with the sensor set. As such all sensors within a UDF sensor set must not only have the same length, but also return the same array elements.
The most common usage of the full array format in the UDF is in the storage of spectral data such as counts vs energy, power vs frequency, image scan lines, etc.
The partial array storage format designation is much like the full array designation with the exception that a full array of data may be spread across multiple sensor sets or even multiple data records. The current UDF kernel treats the full and partial array designations identically. This means that for each data access only a partial sweep will be returned. The UDF kernel software does not currently rebuild the full sweep.
Sensors defined under UDF definitions which use the scalar storage format are known as scalar sensors. Each sensor defines a scalar quantity and has no associated array index value. Temperatures, voltages, currents and the like are all measurements which are generally treated as scalar measurements in a UDF definition.
In UDF definitions which use the matrix storage format each UDF sensor is associated with a 2D matrix of values. In UDF terminology such sensors are referred to as matrix sensors. Matrix sensors have both a number of rows and a number of columns associated with them. A UDF matrix sensor may be split across data records and the size of a matrix may vary within a UDF data set.
The UDF kernel software treats matrix data as an array of UDF array data which has been combined under an single UDF sensor designation. Each individual array is a single column of data in the matrix. At the lowest access level matrix data is read out column by column with the current matrix column number being returned with the data. The column numbers begin and 0 and run through N-1 for an N column matrix. All columns in a matrix have the same number of rows. The row numbers are stored in the header array index field. As such missing (not returned) matrix rows are handled without problem.
The field begins with the line format id b followed by an integer specifying the storage format. An optional comment field may follow.
Sample DATA STORAGE FORMAT field:b 2 /* Scalar Storage */
A scalar field, this field specifies how time flows within a UDF sensor set. This information together with other timing information is necessary to allow the UDF kernel software to uniquely time tag all data with a sensor set.
In each UDF sensor set data is stored in a two-dimensional matrix. The columns of the matrix represent individual UDF sensors (or individual columns of a UDF matrix sensor). Each row in a column represents one measurement associated with the UDF sensor which could be one scalar measurement or one element in an array of data.
The figure below shows an example sensor set containing five separate sensors each with six measurements associated with each.
| SEN 0 | SEN 1 | SEN 2 | SEN 3 | SEN 4 | |
|---|---|---|---|---|---|
| VALUE 1 | x | x | x | x | x |
| VALUE 2 | x | x | x | x | x |
| VALUE 3 | x | x | x | x | x |
| VALUE 4 | x | x | x | x | x |
| VALUE 5 | x | x | x | x | x |
| VALUE 5 | x | x | x | x | x |
If the sensor set holds scalar sensors then each value down a column under a sensor represents one instance of the measurement associated with the UDF sensor. If the sensor set is made up of array sensors then each column of data represents one instance of the array. Finally if the sensor set holds matrix sensors each column contains one column of the data in the matrix of values associated with the one of the returned sensors.
Within a sensor set time can move either across the rows or down the columns. Time which moves across the rows begins at the upper left-hand corner of the sensor set matrix and traverses the matrix left to right and top to bottom. Time which moves down the columns begins at the upper left-hand corner of the sensor set matrix and traverses the matrix top to bottom and left to right.
If all the measurements with a row or down a column have the same beginning time then the time advance is said to be parallel in that direction. If the beginning time advances within a row or a column then the time advance is said to be sequential in that direction.
The time flow field is an integer field. The available values and their definitions are given in the table below:
| TIME FORMAT DEFINITIONS | |||
|---|---|---|---|
| VALUE | DIRECTION | ROW | COLUMN |
| 0 | Down Column | Sequential | Sequential |
| 1 | Down Column | Sequential | Parallel |
| 2 | Down Column | Parallel | Sequential |
| 3 | Down Column | Parallel | Parallel |
| 4 | Across Row | Sequential | Sequential |
| 5 | Across Row | Sequential | Parallel |
| 6 | Across Row | Parallel | Sequential |
| 7 | Across Row | Parallel | Parallel |
It should be noted that some definitions in the above table are redundant. For example, if the data in both the row and column are acquired in parallel, as far as timing goes it doesn't matter whether time advances across the rows or down the columns. Definitions 3 and 7 then represent the same case.
The field begins with the line format id b followed by an integer specifying the time flow. An optional comment field may follow.
Sample TIME FLOW field:b 3 /* Time Format (Parallel/Parallel) */
The following illustrate the effect of different timing specifications using the sensor set layout already presented. In all examples the start time of a data value will be represented by Ti. Lower values of i represent earlier times.
This example illustrates the flow of time when the VIDF time flow field is set to either 2 or 6. Time is parallel along any row in the sensor set but varies sequentially down the columns. It does not matter if time is said to run down the columns or across the rows as the same time will be arrived at for each measurement in either case.
| SEN 0 | SEN 1 | SEN 2 | SEN 3 | SEN 4 | |
|---|---|---|---|---|---|
| VALUE 1 | T0 | T0 | T0 | T0 | T0 |
| VALUE 2 | T1 | T1 | T1 | T1 | T1 |
| VALUE 3 | T2 | T2 | T2 | T2 | T2 |
| VALUE 4 | T3 | T3 | T3 | T3 | T3 |
| VALUE 5 | T4 | T4 | T4 | T4 | T4 |
| VALUE 6 | T5 | T5 | T5 | T5 | T5 |
This example illustrates the flow of time when the VIDF time flow field is set to 4. Time flows across the rows and advances with each successive row. It also advances when moving down the columns, but its primary direction is across the rows.
| SEN 0 | SEN 1 | SEN 2 | SEN 3 | SEN 4 | |
|---|---|---|---|---|---|
| VALUE 1 | T0 | T1 | T2 | T3 | T4 |
| VALUE 2 | T5 | T6 | T7 | T8 | T9 |
| VALUE 3 | T10 | T11 | T12 | T13 | T14 |
| VALUE 4 | T15 | T16 | T17 | T18 | T19 |
| VALUE 5 | T20 | T21 | T22 | T23 | T24 |
| VALUE 6 | T25 | T26 | T27 | T28 | T29 |
This example illustrates the flow of time when the VIDF time flow field is set to either 1 or 5. Time is parallel down any column in the sensor set but varies sequentially across the rows. It does not matter if time is said to run down the columns or across the rows as the same time will be arrived at for each measurement in either case.
| SEN 0 | SEN 1 | SEN 2 | SEN 3 | SEN 4 | |
|---|---|---|---|---|---|
| VALUE 1 | T0 | T1 | T2 | T3 | T4 |
| VALUE 2 | T0 | T1 | T2 | T3 | T4 |
| VALUE 3 | T0 | T1 | T2 | T3 | T4 |
| VALUE 4 | T0 | T1 | T2 | T3 | T4 |
| VALUE 5 | T0 | T1 | T2 | T3 | T4 |
| VALUE 6 | T0 | T1 | T2 | T3 | T4 |