SensorInfo Introduction


SensorInfo files are ASCII files that contain information about particular sensors, with each file entry corresponding to an individual sensor/instrument. The SensorInfo files are used in many applications available on this site as a convenient way to introduce sensor information into data files or code used operationally.

For example, I use SensorInfo files to:

Basically, any code that is required to be sensor-insensitive (i.e. not tailored for a particular platform and instrument) can be driven by judicious use of the information in a SensorInfo file. And, when new instrument information comes along, it's simple to add the numbers to the ASCII SensorInfo file. In addition, because all the relevant information is obtained from one place, it's easy to double check that, for example, SpcCoeff datafiles for NOAA-17 HIRS/3 weren't accidently used with the TauCoeff datafiles for NOAA-18 HIRS/3, or similarly for GOES-10 and GOES-12 Imager (where there are different channels).

The I/O routines described here read SensorInfo datafiles into a linked list which can be traversed, adding or extracting data. There are two reasons I use a linked list. Firstly, the SensorInfo datafile can have an arbitrary number of entries depending on how many sensors are represented in the file. To read the data into a structure array would have required that the SensorInfo file either be read twice (to obtain the number of entries and allocate the array accordingly), or contain an initial entry with the number of entries (which would have to be updated everytime a new entry was added.) I dislike the idea of needing to read a datafile twice (waste of time) and also having to remember to update the total number of entries every time I added or removed sensor entries from the file. Secondly, I thought it would be neat to programme a linked list in Fortran90/95.

SensorInfo Data Contents

A SensorInfo file, data structure, or list entry contains the following data,

Name Description
Sensor name A string containing the name of the sensor.
Satellite/platform name A string containing the name of the satellite/platform on which the sensor is flying.
File prefix A string used in applications to introduce a somewhat standard, not too lengthy file naming convention.
Microwave flag A flag indicating if the sensor is a microwave instrument. If = 0 ==> Infrared, if = 1 ==> Microwave
NCEP_Sensor_ID An array of "in-house" values used at NOAA/NCEP/EMC to identify a satellite/sensor combination. Each sensor channel in the file and structure has a value.
WMO_Satellite_ID An array of WMO code values identifying satelite platforms. Taken from the WMO common code tables. The Satellite ID is from Common Code table C-5, or code table 0 01 007 in BUFR. Each sensor channel in the file and structure has a value.
WMO_Sensor_ID An array of WMO code values identifying a satelite sensor. Taken from the WMO common code tables. The Sensor ID is from Common Code table C-8, or code table 0 02 019 in BUFR. Each sensor channel in the file and structure has a value.
No. of channels The number of channels for the particular sensor.
Channel number An array of sensor channel numbers. May not contain contiguous values.
Use flag An array of flags to determine if the sensor channel is to be used. Typically if = 0 ==> do not use, if = 1 ==> Use, but interpretation and/or use of these flags is up to the user.
Noise estimate An array of noise estimate values for each channel in Kelvin. Typically these values will be NEDT values obtained for the instrument. If an estimate is unavailable, the number is set to a large value.

The current SensorInfo file has entries for the following sensors:

Note, however, that the entries do not include information for visible channels. Also, some sensors have multiple entries for separate and averaged detector responses.

SensorInfo Structure Defintions

SensorInfo Derived Type

This structure contains all the actual SensorInfo data and is defined in the SensorInfo_Define module. Each node of the SensorInfo linked list is a SensorInfo structure.

  TYPE, PUBLIC :: SensorInfo_type
INTEGER :: n_Allocates = 0

INTEGER :: n_Channels = 0

CHARACTER( 12 ) :: Sensor_Name = ' '
CHARACTER( 12 ) :: Satellite_Name = ' '
CHARACTER( 20 ) :: File_Prefix = ' '

INTEGER :: Microwave_Flag = INVALID

INTEGER :: NCEP_Sensor_ID = INVALID
INTEGER :: WMO_Sensor_ID = INVALID
INTEGER :: WMO_Satellite_ID = INVALID

INTEGER, DIMENSION( : ), POINTER :: Sensor_Channel => NULL()
INTEGER, DIMENSION( : ), POINTER :: Use_Flag => NULL()
REAL( fp_kind ), DIMENSION( : ), POINTER :: Noise => NULL()
END TYPE SensorInfo_type

Note that the SensorInfo_type is PUBLIC and its members are not encapsulated; that is, they can be fully accessed outside the scope of this module. This makes it possible to manipulate the structure and its data directly rather than, for e.g., via get() and set() functions. This was done to eliminate the overhead of the get/set type of structure access in using the structure. *But*, it is recommended that the user destroy, allocate, and assign the structure using only the routines in this module where possible to eliminate -- or at least minimise -- the possibility of memory leakage since most of the structure members are pointers.

SensorInfo_List Derived Types

The SensorInfo linked list node definition is PRIVATE and not user accessible,

  TYPE, PRIVATE :: SensorInfo_Node_type
TYPE( SensorInfo_type ) :: SensorInfo ! Node data
TYPE( SensorInfo_Node_type ), POINTER :: Previous => NULL() ! Pointer to previous node
TYPE( SensorInfo_Node_type ), POINTER :: Next => NULL() ! Pointer to next node
END TYPE SensorInfo_Node_type

The SensorInfo linked list definition is PUBLIC but the structure contents are PRIVATE and can only be accessed via the PUBLIC routines of the SensorInfo_LinkedList module.

  TYPE :: SensorInfo_List_type
PRIVATE
INTEGER :: n_Nodes = 0 ! The number of SensorInfo nodes
TYPE( SensorInfo_Node_type ), POINTER :: First => NULL() ! Pointer to the first node
END TYPE SensorInfo_List_type

The result of these definitions is a SensorInfo linked list that can be represented graphically like so,

Schematic of SensorInfo linked list structure

where each Data portion of a node is a separate SensorInfo structure, P is the pointer to the previous node, N to the next node, and X represents a NULL pointer that signifies the begin and end of the list. The Current node pointer is used in traversing the list.

SensorInfo File Format

The format of a SensorInfo file is shown below for a single sensor:

  AMSU-B       NOAA-15      amsub_n15            1   415   574   206     5
1 1 9.000000E+00
2 1 4.000000E+00
3 1 3.500000E+00
4 1 3.000000E+00
5 1 2.800000E+00

The first line is a SensorInfo entry,

                                                 +--------------------------- Microwave flag
+------------------- Sensor name | (0==IR, 1==MW)
| +------ Satellite/platform name | +--------------------- NCEP sensor ID
| | +--- File prefix | | +---------------- WMO sensor ID
| | | | | | +---------- WMO satellite ID
| | +-------------+ | | | | +--- No. of channels
| | | | | | | |
AMSU-B NOAA-15 amsub_n15 1 415 574 206 5

with the following lines being the individual channel entries,

    +--------------------- Channel number
| +---------------- Use flag. If = 0, do not use
| | = 1, use
| | +--- Noise estimate
| | |
| | |
1 1 9.000000E+00
2 1 4.000000E+00
3 1 3.500000E+00
4 1 3.000000E+00
5 1 2.800000E+00

Note that the utility of the "use flag" and "noise estimate" is defined by the user. In particular, don't attach any officialness to the noise estimates.


This page maintained by Paul van Delst

Last updated Sepember 08, 2004