Jan. 27, 2006 Update
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 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. | |
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.)
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." ;
}
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
Last updated January 27, 2004