12 Comparison with Wright-Giddings proposals

The term “structure” in the Wright-Giddings (WG) proposals meant a collection of related data objects, so that one level of the hierarchy could contain more than one “structure”, e.g. GLOBAL and [DATA_ARRAY].

Of the GLOBAL structure only [TITLE] has been copied into the <NDF > structure.

Table 29: Comparison of <NDF > and the Wright-Giddings “DATA_ARRAY structure”

Wright-Giddings NDF name Comments

[TITLE] same name in WG GLOBAL
[VARIANT] no counterpart in WG
[DATA_ARRAY] [DATA_ARRAY] unchanged in name or meaning
[DATA_MIN] no counterpart in <NDF >
[DATA_MAX] no counterpart in <NDF >
[DATA_BLANK] no counterpart in <NDF >
[DATA_SCALE] [SCALE] in scaled <narray >
[DATA_ZERO] [ZERO] in scaled <narray >
[DATA_LABEL] [LABEL] unchanged in meaning
[DATA_UNITS] [UNITS] unchanged in meaning
[DATA_QUALITY] [QUALITY] unchanged in meaning
[BAD_PIXEL] no counterpart in WG
[DATA_ERROR] [VARIANCE] variance rather than σ
[AXIS_CALIB] no counterpart in <NDF >
[AXIS <n >_DATA] [AXIS( <n >).DATA_ARRAY] [DATA_ARRAY] for consistency
[AXIS <n >_UNITS] [AXIS( <n >).UNITS] unchanged in meaning
[AXIS <n >_LABEL] [AXIS( <n >).LABEL] unchanged in meaning
[AXIS <n >_ERROR] [AXIS( <n >).VARIANCE] variance rather than σ
[AXIS <n >_CALIB] no counterpart in <NDF >
[HISTORY] no counterpart in WG
[MORE] no counterpart though it can
store WG GLOBAL objects

WG components no longer used in <NDF > :

Following the precept of making life easier for applications programmers forces their exclusion. Principally they are used for scaling for display, yet they often fail to produce the desired result, especially for data with a wide dynamic range (as is often found in astronomy), because the extrema only give information about two pixels and are therefore unrepresentative. What often happens is that the display process is repeated several times (albeit more efficiently if [DATA_MIN] and [DATA_MAX] are stored), each time guessing the correct range more accurately. Even in those cases where the maximum and minimum provide a good scaling, their computation accounts for only about 20 per cent of the total time taken by the display process. A more-sophisticated approach at the outset pays off because the data need only be displayed once. The most successful methods are related to the distribution of pixel values. Histogram equalisation, central x per cent, or minus a to plus b standard deviations all work well.

Although there might be some hope that a min-max system could work if all algorithmic access to the datasets were through Starlink-supplied routines, it is inevitable that some programmers/users would forget to call the subroutines or fail to realise that their application may have affected the extrema.

This has been superseded by system-defined magic values, available to applications.
These have changed to allow standard subroutines to work on different labels, units and quality, e.g. in <AXIS >, and not be tied into a naming scheme, e.g. [AXIS_LABEL]. The interpretation of [DATA_QUALITY] has also changed for general-purpose applications.
This has changed as for [DATA_LABEL] etc., but also because the interpretation has changed to variance.
These are too specialised and the processing rules are unknown for general-purpose applications. Calibration data should be situated in [MORE] within an extension, perhaps which shadows the main [AXIS] structures.