Because the meaning and interpretation of the standard NDF components (data, variance, quality, etc.) is well-defined, it is always possible to decide into which of three categories each of these components falls when writing an application. This then dictates the action which should be taken, as follows:
For instance, if an operation is to be performed on the data component, then an appropriate operation must usually also be performed on the variance component (if defined) so that it continues to represent the variance of the data in the output NDF. If the application cannot perform the necessary operation, then any component which would become invalid as a result falls into category 3 below (and is simply ignored).
For instance, the special case of adding a constant to the data component
would not render the variance component invalid.
It may therefore simply be propagated (i.e. copied) to the output NDF
unchanged.
Most applications which perform pixel-to-pixel processing and do not change
the shape of an NDF can also propagate the axis and quality
components in the same way.
It may not be possible to ensure that some NDF components will retain their
validity after processing.
This may simply be because an application (or perhaps an entire software
package) chooses not to support certain NDF components; this is quite
acceptable behaviour.
Alternatively, the meaning of certain components may be destroyed by certain
types of processing; for instance the validity of the quality component
cannot possibly survive a Fourier transform operation applied to the data
component no matter how sophisticated the software.
In either case, the affected component(s) must be ignored and not
propagated.
This means that they will be lost from the output NDF.
The purpose of these rules is to ensure that the validity of all the standard NDF components is retained throughout all stages of processing, and that all defined components in an NDF always have valid values. If an application cannot guarantee this for any component, then it must ignore that component so that it remains undefined in the output data structure.