SRF Introduction Page


Jan. 27, 2006 Update

Update Archive

SRF files and data structures contain Spectral Response Function data for particular sensors. The SRF files/structures are used in many applications available on this site. This page describes the data structure and data file formats.

If all you want are the actual netCDF SRF data files, then you'll want to go to the SRF Data Files section.

SRF Data Contents

SRF data structures are defined for a single channel and contain the following fields,

Name Description
n_Points The number of spectral data points used to represent the channel SRF.
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.
NCEP_Sensor_ID An "in-house" value used at NOAA/NCEP/EMC to identify a satellite/sensor combination.
WMO_Satellite_ID A WMO code value 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.
WMO_Sensor_ID A WMO code value 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.
Channel The channel number for the current SRF.
Begin_Frequency The frequency of the first SRF point in inverse centimetres (cm-1).
End_Frequency The frequency of the last SRF point in inverse centimetres (cm-1).
Integrated_SRF The integrated area of the SRF determined using an integration formula.
Summation_SRF The integrated area of the SRF determined by simple summation.
Frequency Array containing the frequency grid of the SRF data in inverse centimetres (cm-1).
Response Array containing the channel spectral response data.

SRF Structure Defintion

The SRF structure is defined in the SRF_Define module.

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

    INTEGER :: StrLen = SDSL
    INTEGER :: n_Points = 0

    CHARACTER( SDSL ) :: Sensor_Name   = ' '
    CHARACTER( SDSL ) :: Platform_Name = ' '
    INTEGER :: NCEP_Sensor_Id   = INVALID
    INTEGER :: WMO_Satellite_Id = INVALID
    INTEGER :: WMO_Sensor_Id    = INVALID
    INTEGER :: Channel          = INVALID

    REAL( fp_kind ) :: Begin_Frequency = FP_INVALID
    REAL( fp_kind ) :: End_Frequency   = FP_INVALID
    REAL( fp_kind ) :: Integrated_SRF  = FP_INVALID
    REAL( fp_kind ) :: Summation_SRF   = FP_INVALID

    REAL( fp_kind ), POINTER, DIMENSION( : ) :: Frequency => NULL()
    REAL( fp_kind ), POINTER, DIMENSION( : ) :: Response  => NULL()
  END TYPE SRF_type

Note that SRF_type is PUBLIC and its members are not encapsulated; that is, they can be fully accessed outside the scope of the SRF_Define 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 access in using the structure. But, it is recommended that the user destroy, allocate, and assign the structure using the routines in SRF_Define module where possible to eliminate -- or at least minimise -- the possibility of memory leakage since some of the structure members are pointers.

The n_Allocates structure component is only used internally in the structure allocation and destruction functions to keep track of the current allocation status of the structure.

The StrLen structure component is simply used to store the defined string length of the Sensor_Name and Platform_Name components so LEN intrinsics calls are not required (the SDSL value is a parameter with the PRIVATE attribute so is not visible outside the SRF_Define module.)

SRF File Formats

netCDF Format

This is the default format for SRF data files. Using netCDF allows users to track the history of the data file relatively easily via global attributes, as well as the attributes of the contents themselves. The netCDF datafiles are created from the ASCII datafiles received for all manner of instruments.

These datafiles are read and written using the functions in the SRF_netCDF_IO module. They are created from the ASCII format data files via the SRF_ASCII2NC conversion program.

Below is the CDL representation of the netCDF format SRF data file for the GOES-12 Imager. Note that every channel has its own spectral dimension entry -- the channel_X_n_points values.

netcdf imgr_g12.srf {
dimensions:
        n_channels = 4 ;
        channel_2_n_points = 2511 ;
        channel_3_n_points = 5575 ;
        channel_4_n_points = 1300 ;
        channel_6_n_points = 715 ;
variables:
        int NCEP_Sensor_ID ;
                NCEP_Sensor_ID:long_name = "ID used at NOAA/NCEP/EMC to identify a satellite/sensor" ;
                NCEP_Sensor_ID:units = "N/A" ;
                NCEP_Sensor_ID:_FillValue = -1 ;
        int WMO_Satellite_ID ;
                WMO_Satellite_ID:long_name = "WMO code for identifying satellite platforms" ;
                WMO_Satellite_ID:units = "N/A" ;
                WMO_Satellite_ID:_FillValue = -1 ;
        int WMO_Sensor_ID ;
                WMO_Sensor_ID:long_name = "WMO code for identifying a satellite sensor" ;
                WMO_Sensor_ID:units = "N/A" ;
                WMO_Sensor_ID:_FillValue = -1 ;
        int channel_list(n_channels) ;
                channel_list:long_name = "List of sensor channel numbers associated with the SRF data" ;
                channel_list:units = "N/A" ;
                channel_list:_FillValue = -1 ;
        double begin_frequency(n_channels) ;
                begin_frequency:long_name = "Begin frequencies of SRF response data" ;
                begin_frequency:units = "Inverse centimetres (cm^-1)" ;
                begin_frequency:_FillValue = -1. ;
        double end_frequency(n_channels) ;
                end_frequency:long_name = "End frequencies of SRF response data" ;
                end_frequency:units = "Inverse centimetres (cm^-1)" ;
                end_frequency:_FillValue = -1. ;
        double integrated_srf(n_channels) ;
                integrated_srf:long_name = "Integrated spectral response using Simpsons rule" ;
                integrated_srf:units = "N/A" ;
                integrated_srf:_FillValue = -1. ;
        double summation_srf(n_channels) ;
                summation_srf:long_name = "Integrated spectral response by summation: = SUM( response ) * df" ;
                summation_srf:units = "N/A" ;
                summation_srf:_FillValue = -1. ;
        double channel_2_response(channel_2_n_points) ;
                channel_2_response:long_name = "Channel 2 normalised response." ;
                channel_2_response:units = "N/A" ;
                channel_2_response:_FillValue = -1. ;
        double channel_3_response(channel_3_n_points) ;
                channel_3_response:long_name = "Channel 3 normalised response." ;
                channel_3_response:units = "N/A" ;
                channel_3_response:_FillValue = -1. ;
        double channel_4_response(channel_4_n_points) ;
                channel_4_response:long_name = "Channel 4 normalised response." ;
                channel_4_response:units = "N/A" ;
                channel_4_response:_FillValue = -1. ;
        double channel_6_response(channel_6_n_points) ;
                channel_6_response:long_name = "Channel 6 normalised response." ;
                channel_6_response:units = "N/A" ;
                channel_6_response:_FillValue = -1. ;

// global attributes:
                :write_module_history = "$Id: SRF_netCDF_IO.f90,v 3.0 2003/08/29 18:02:30 paulv Exp $" ;
                :creation_date_and_time = "2003/08/29, 14:32:14 -0400UTC" ;
                :title = "Normalised Imager SRFs for GOES-12" ;
                :history = "$Id: SRF_ASCII2NC.f90,v 1.1 2003/08/29 18:31:34 paulv Exp $;$Id: imgr_g12.srf,v 1.1 2003/08/28 21:50:23 paulv Exp $" ;
                :sensor_name = "IMAGER" ;
                :platform_name = "GOES-12" ;
                :comment = "Data obtained from HMW. Note no channel 5." ;
}

ASCII Format

Instrument SRF data comes from a wide variety of sources and all SRF data I get is in some sort of ASCII format. The following format was devised by Hal Woolf at CIMSS/SSEC/U.Wisc with various embellishments on my part to introduce the attribute data describing the SRF data source(s). I use the ASCII datafiles solely to create the netCDF formats.

These datafiles are read and written using the functions in the SRF_ASCII_IO module. The following description of the ASCII file format is provided to allow people with other instruments' SRFs to create their own netCDF files if they desire.

Below is a section of the ASCII SRF data file for the GOES-12 Imager

  4
    2
    3
    4
    6
Title:Normalised Imager SRFs for GOES-12
History:$Id: imgr_g12.srf,v 1.1 2003/08/28 21:50:23 paulv Exp $
Sensor_Name:IMAGER
Platform_Name:GOES-12
Comment:Data obtained from HMW. Note no channel 5.
  2 2511 2419.05 2670.05
  .004875  .004870  .004870  .004870  .004870  .004870  .004870  .004870
  .004870  .004870  .004870  .004870  .004870  .004870  .004870  .004870
  .004870  .004870  .004870  .004870  .004870  .004870  .004870  .004870
  .004870  .004870  .004870  .004870  .004870  .004870  .004870  .004870
  .004870  .004870  .004870  .004870  .004870  .004870  .004870  .004870
  .004870  .004870  .004870  .004870  .004870  .004870  .004870  .004870
  .004870  .004870  .004870  .004870  .004870  .004865  .004860  .004860
  .004860  .004860  .004860........

The first set of data is the number of channels (4) followed by the actual channel numbers by line (2,3,4,6),

Next are the attribute data (Title, History, Sensor_Name, Platform_Name, and Comment) for the instrument/file. Everything after the first ":" character in the ASCII attributes are written into the global attributes of the same name in the netCDF file,

Title:Normalised Imager SRFs for GOES-12
History:$Id: imgr_g12.srf,v 1.1 2003/08/28 21:50:23 paulv Exp $
Sensor_Name:IMAGER
Platform_Name:GOES-12
Comment:Data obtained from HMW. Note no channel 5.

Next is the header for the channel SRF defining the SRF frequency grid,

  +---------------------- Sensor channel number
  |   +------------------ Number of SRF points
  |   |     +------------ Frequency of the first SRF point
  |   |     |       +---- Frequency of the last SRF point
  |   |     |       |
  2 2511 2419.05 2670.05

which is followed by the channel SRF data itself,

  .004875  .004870  .004870  .004870  .004870  .004870  .004870  .004870
  .004870  .004870  .004870  .004870  .004870  .004870  .004870  .004870
  .004870  .004870  .004870  .004870  .004870  .004870  .004870  .004870

The SRF header and data are repeated for every channel represented in the initial list. The first parts of the other 3 channels' SRF data ffrom the GOES-12 Imager ASCII SRF file are shown below,

  3 5575 1273.55 1830.95
  .000045  .000075  .000105  .000140  .000180  .000220  .000260  .000300
  .000345  .000390  .000435  .000485  .000535  .000585  .000640  .000695
  .000745  .000800  .000855  .000910  .000965  .001015  .001070  .001125
  .001175  .001225  .001275  .001325  .001375  .001420  .001465  .001510
  .001550  .001585.......etc
  4 1300  868.05  997.95
  .003825  .003910  .003995  .004085  .004170  .004255  .004350  .004445
  .004535  .004630  .004730  .004830  .004930  .005035  .005140  .005245
  .005350  .005455  .005565  .005675  .005780  .005885  .005990  .006090
  .006195  .006300  .006400  .006500  .006600  .006700  .006795  .006890
  .006990  .007090.......etc
  6  715  707.55  778.95
  .000035  .000085  .000135  .000180  .000220  .000260  .000295  .000330
  .000365  .000395  .000430  .000470  .000515  .000565  .000625  .000695
  .000770  .000850  .000930  .001005  .001075  .001140  .001195  .001230
  .001240  .001230  .001190  .001125  .001045  .000945  .000835  .000720
  .000600  .000480.......etc

This page maintained by Paul van Delst

Last updated January 27, 2004