Readme for the TRMM Microwave Imager (TMI) Gridded Orbital Data Set

Data Access for the
TRMM Microwave Imager (TMI) Gridded Orbital Data Set

TMI Gridded Orbital Data

Contents of the
TRMM Microwave Imager (TMI) Gridded Orbital Data Set Readme

Summary
Sponsor
Future Updates
Data Set Description
Data Characteristics
Data Format
Sample Software
References
Data Access
Anonymous FTP
Points of Contact

Summary

This document provides a general description of the TRMM Microwave Imager (TMI) Gridded Orbital rainfall data, a special product derived from the TRMM standard product, TMI rain profile (2A-12), and mapped to a 0.5 degree x 0.5 degree latitude/longitude grid. The spatial coverage is defined by a 760 km swath bounded by the latitudes 38 degree N and 38 degree S for a single satellite orbit. The parameters included in this data set are the mean, standard deviation, and number of samples for the conditional surface rain rate; and the cloud water at 14 vertical levels in the rain column. The document also provides the information necessary to readily access and interpret the parameters stored in the files.

This product is produced by the Hydrology Data Support Team of the Goddard Distributed Active Archive Center (GDAAC), with inputs from members of the TRMM Science Team and the DAAC User Working Group. Questions about reading and accessing these files should be directed to hydrology@daac.gsfc.nasa.gov.

Sponsor

The distribution of this data set is being funded by NASA's Earth Science Enterprise. The data are not copyrighted; however, we request that when you publish data or results using these data, please acknowledge as follows:

The authors wish to thank the Distributed Active Archive Center (Code 902) at the Goddard Space Flight Center, Greenbelt, MD, 20771, for producing and distributing the data; and the TRMM Science Data and Information System at the Goddard Space Flight Center, for providing the original data from which this product originates. Goddard's contribution to these activities was sponsored by NASA's Earth Science Enterprise.

Future Updates

The Goddard DAAC will update this data set as new data are processed and made available by the data producers, or as previous data are reprocessed and submitted to the DAAC for archival.

Data Set Description

Further information on the contents and structure of the TMI rain profile (2A-12) product can be found in Volume 4 of the "File Specifications for TSDIS Products - Level 2 and Level 3" (PDF document).
The TRMM Microwave Imager (TMI) is a five-channel, dual-polarized, passive microwave radiometer, which builds on the heritage of the Special Sensor Microwave/Imager (SSM/I) instrument flown aboard the Defense Meteorological Satellite Program (DMSP) platforms. Microwave radiation is emitted by the Earth's surface and by water droplets within clouds. However, when layers of large ice particles are present in the upper cloud regions - a condition highly correlated with heavy rainfall - microwave radiation tends to scatter. The TMI detects radiation at five frequencies chosen to discriminate between these processes, thus revealing the likelihood of rainfall. The key to accurate retrieval of rainfall rates by this method is the deduction of cloud precipitation consistent with the radiation measurement at each frequency.

Some characteristics of the TMI are shown in the following table:

FrequencyDual Polarization: 10.65, 19.35, 37, and 85.5 GHz
Vertical Polarization: 21 GHz
Scanning ModeConical
Scan Time1.9 s
Ground ResolutionRanges from 5 km @ 85.5 GHz to 45 km @ 10 GHz
Swath Width760 km
Science ApplicationsSurface rainfall rate, rain type, distribution, and structure

The Gridded Orbital data contain two parameters:

These parameters are reported over both land and sea. For each of the parameters, the mean and standard deviation for each grid box are included, as well as the number of rainy pixels and total (rainy + non-rainy) number of pixels. The mean, "unconditional," surface rain rate in the grid box is the average over all pixels, rain or non-raining. The "conditional" rain rate is the average rain rate computed only for rainy pixels.

The mean conditional surface rain rate Rc and its standard deviation s(Rc) for a grid box is computed as follows:

Rc = SUM( Rci ) / NR

s(Rc) = { SUM ( Rci - Rc)2 / NR }0. 5

In the above equations, Rci is the conditional rain rate for pixel i of the original TMI (2A-12) orbital data that falls within the grid box, NR is the total number of raining pixels for that grid box, and the sum is over all rainy pixels. If none of the pixels within a grid box has a non-zero rain rate, then both Rc and s(Rc) are set to 0 for that grid box. The statistics for the layer cloud water content are similarly computed.

Although not reported for this data set, the statistics for the unconditional rain rate Ru and its standard deviation s(Ru) for any grid box can be derived as follows:

Ru = Rc * NR / N

s(Ru) = { NR * (s2 (Rc) + Rc2)/ N - Ru2 }0. 5

where N now represents the total number of pixels (raining and non-raining) for that grid box.

In the original TMI rain profile (2A-12) orbital data, the cloud water contents are reported for a set of 14 layers, defined by:

Layer Index Layer Height
1surface - 0.5 km
20.5 - 1.0 km
31.0 - 1.5 km
41.5 - 2.0 km
52.0 - 2.5 km
62.5 - 3.0 km
73.0 - 3.5 km
83.5 - 4.0 km
94.0 - 5.0 km
105.0 - 6.0 km
116.0 - 8.0 km
128.0 -10.0 km
1310.0 -14.0 km
1414.0 - 18.0 km

Data Characteristics

This data set contains a single orbit of TMI (2A-12) orbital parameters, mapped to a 0.5 x 0.5 degree latitude-longitude grid. The latitudinal limits of the orbital swath are 38 degree N to 38 degree S, because the TRMM satellite has an inclination of 35 degrees. Because the spatial resolution of the TMI orbital data is about 5 km at the highest frequency (85 GHz), the number of samples per grid box in the Gridded Orbital data can range from one to about 90. The metadata applicable to each orbit of data are contained in a header record in the file ordered as follows:

HEADER RECORD CONTENTS

Variable Description Units Data Type
1 Algorithm ID - 8 characters
2 Region Name - 40 characters
3 Header record length - 4 byte integer
4 Data record length - 4 byte integer
5 Number of grid boxes with rain NGR - 4 byte integer
6 Orbit number - 4 byte integer
7 Orbit start date yyyymmdd 4 byte integer
8 Orbit end date yyyymmdd 4 byte integer
9 Orbit start time hhmmss 4 byte integer
10 Orbit end time hhmmss 4 byte integer
11 Longitude of maximum latitude degrees 4 byte float
12-17 Grid constants degrees 4 byte float
18 Maximum 2A-12 rain rate mm/hr 4 byte float
19 Latitude(max 2A-12 rain rate) degrees 4 byte float
20 Longitude(max 2A-12 rain rate) degrees 4 byte float
21 Maximum gridded rain rate mm/hr 4 byte float
22 Center latitude(max gridded rain rate) degrees 4 byte float
23 Center longitude(max gridded rain rate) degrees 4 byte float
24-28 Spares - 4 byte float

The grid constants (variables 12-17) include the starting latitude and longitude of the gridded output (-39.75 and -179.75 degrees, respectively), the ending latitude and longitude of the gridded output (39.95 and 179.95 degrees, respectively), as well as the latitudinal and longitudinal increments (0.5 and 0.5 degree, respectively). The spares (variables 24-28) pad the header out to the same record length as the data record length multiplied by two.

The geolocation, time stamp, and parameter statistics for each grid box are contained in data records structured as follows:

DATA RECORD CONTENTS

Variable Description Units Data Type
1 Center latitude of grid box deg * 100 2 byte integer
2 Center longitude of grid box deg * 100 2 byte integer
3 Time stamp for grid box ddhhmmss 4 byte integer
4 Number of good quality pixels in box N - 2 byte integer
5 Number of rain pixels in box NR - 2 byte integer
6 Conditional surface rain rate Rc mm/hr * 100 4 byte integer
7 Standard deviation of
conditional surface rain rate s(Rc)
mm/hr * 100 4 byte integer
8-21 Layer cloud water g/m3 * 100 2 byte integer
22-35 Standard deviation of
layer cloud water
g/m3 * 100 2 byte integer

The time stamp for a particular grid box is the time stamp of the last scan which contributes pixels to that box (in the original 2A-12 data, a time stamp is assigned on a per-scan, rather than a per-pixel, basis). The parameter statistics are scaled by a factor of 100 to provide for 2-digit accuracy when stored as 16-bit integers. Thus, these values must be descaled by 100 when reading the file, to ensure proper interpretation of the data. Variable 8 represents layer cloud water at layer 1 (surface - 0.5 km), and variable 21 represents that at layer 14 (14 - 18 km).

Data Format

These data are stored as IEEE binary with record length of 76 bytes (nineteen 4-byte words). The total number of records Nrec in each file is determined by the fifth variable in the header record (see Header Record Contents table above):

Nrec = 2 + NGR
where:
record 1-2 : header
record 3 : data record for first grid box
:
record NGR + 2 : data record for last grid box
The gridding is done from west to east, for each row of grid boxes, starting with the southernmost row and ending with the northernmost row. There is a data record for each grid box that contains part of an orbit.

A typical file size is about 0.85 MB.

The file naming convention for the TMI Gridded Orbital rainfall data conforms to that for the standard TRMM data products, with slight modifications:

G2A12.yymmdd.n.v.BIN
where:
G = Gridded
2A12 = TRMM algorithm ID for original orbital data product
yy = 2-digit year
mm = month number
dd = day of month
n = orbit number
v = data product version number for 2A-12 product
BIN = Binary
As an example, the file name, G2A12.971228.475.1.BIN, refers to the Gridded Orbital data product generated from the standard TRMM product, 2A12.971228.475.1.HDF, collected on December 28, 1997 for orbit number 475, and distributed as the first version of the product.

Sample Software

Example programs in FORTRAN and C to read the TMI G2A12 data are shown below. The programs were developed and tested on a Silicon Graphics machine running the IRIX operating system. You may have to make some minor modifications to the programs in order to run them on different machines (e.g., record length keyword "recl" may need to be expressed in terms of bytes rather than 4-byte words in the FORTRAN program, depending on the machine).

      
SAMPLE READ PROGRAM IN FORTRAN:
----------------------------

c ************************************************************************
c *
c * Program Name:
c * ------------
c *    ReadG2A12.f
c *
c * Description:
c * -----------
c *       This sample fortran program shows how to read a gridded 2A12
c *       binary file.
c *
c *  Date                 Author Name         Change Description
c *  -----------          ------------        ------------------
c *  08-Dec-1998          Hualan Rui           Created
c *
c ***********************************************************************

      parameter(L2A12_KMAX=14)
      character*120 file_in
      INTEGER*4 n, nmax

c  Structure for G2A12 header record
c  ------------------------------------
      STRUCTURE /G2A12_HEADER/
         character*8  algID
         character*40 region
         INTEGER*4    head_len
         INTEGER*4    rec_len
         INTEGER*4    totBoxes
         INTEGER*4    orbitNumber
         INTEGER*4    beginDate
         INTEGER*4    endDate
         INTEGER*4    beginTime
         INTEGER*4    endTime
         REAL*4       lonMaxLat
         REAL*4       lat0
         REAL*4       lon0
         REAL*4       late
         REAL*4       lone
         REAL*4       dlat
         REAL*4       dlon
         REAL*4       RainMax
         REAL*4       RainMaxLat
         REAL*4       RainMaxLon
         REAL*4       BoxRainMax
         REAL*4       BoxRainMaxLat
         REAL*4       BoxRainMaxLon
         REAL*4       dummy(5)
      END STRUCTURE

c  Structure for G2A12 data record
c  -------------------------------------------
      STRUCTURE /G2A12_STNREC/
         INTEGER*2  lat
         INTEGER*2  lon
         INTEGER*4  dayntime
         INTEGER*2  totPixel
         INTEGER*2  totrainPixel
         INTEGER*4  surfRain
         INTEGER*4  std_surfRain
         INTEGER*2  cldWater(L2A12_KMAX)
         INTEGER*2  std_cldWater(L2A12_KMAX)
      END STRUCTURE

      RECORD /G2A12_HEADER/ header
      RECORD /G2A12_STNREC/ stn

c Read input file name which should be in your local system
c ---------------------------------------------------------
      print *, 'Enter data file name (with double quotes) : '
      read(5,*) file_in
      write(6, '(A10,A40)') 'file_in = ', file_in

c Open input file with record length equal to header record length,
c which is 38 words. Then read the header record and close the file.
c -----------------------------------------------------------------
      open(10,file=file_in,access='DIRECT',err=900,status='OLD',recl=38)
      read(10, rec=1, err=910, end=500) header
      close(10)

c  Print header information
c  ------------------------
      write(6,*) 'HEADER INFORMATION For G2A12: '
      write(6,'(A20,A8)')    'algID        = ',header.algID
      write(6,'(A20,A40)')   'region       = ',header.region
      write(6,'(A20,I6)')    'head_len     = ',header.head_len
      write(6,'(A20,I6)')    'rec_len      = ',header.rec_len
      write(6,'(A20,I9)')    'Total Points = ',header.totBoxes
      write(6,'(A20, I9)')   'OrbitNumber  = ',header.orbitNumber
      write(6,'(A20, I9)')   'Begin Date   = ',header.beginDate
      write(6,'(A20, I9)')   'End Date     = ',header.endDate
      write(6,'(A20, I9.6)') 'Begin Time   = ',header.beginTime
      write(6,'(A20, I9.6)') 'End Time     = ',header.endTime
      write(6,'(A20, f9.3)') 'LonMaxLat    = ',header.lonMaxLat
      write(6,'(A20, f9.2)') 'Start Lat    = ',header.lat0
      write(6,'(A20, f9.2)') 'Start Lon    = ',header.lon0
      write(6,'(A20, f9.2)') 'End Lat      = ',header.late
      write(6,'(A20, f9.2)') 'End Lon      = ',header.lone
      write(6,'(A20, f9.2)') 'Dlat         = ',header.dlat
      write(6,'(A20, f9.2)') 'Dlon         = ',header.dlon
      write(6,'(A20, f9.2)') 'Rain Max     = ',header.RainMax
      write(6,'(A20, f9.3)') 'Max Rain Lat = ',header.RainMaxLat
      write(6,'(A20, f9.3)') 'Max Rain Lon = ',header.RainMaxLon
      write(6,'(A20, f9.3)') 'BoxRainMax   = ',header.boxRainMax
      write(6,'(A20, f9.3)') 'BoxRainMaxLat= ',header.boxRainMaxLat
      write(6,'(A20, f9.3)') 'BoxRainMaxLon= ',header.boxRainMaxLon

c Open input file again with record length equal to data record length,
c which is 19 words. Then loop to read the data records.
c ---------------------------------------------------------------------
      open(10,file=file_in,access='DIRECT',err=900,status='OLD',recl=19)
      nmax = header.totBoxes
      do 100 n=1,nmax
         nrec = n+2
         read(10, rec=nrec, err=910, end=500) stn

c        Print some variables for checking.   Here is the place
c        to insert your own code to deal with the data.
c        -------------------------------------------------------
         write(6,'(I6,2I8,I10,2I6,2I5)') n, stn.lat, stn.lon,
     $        stn.dayntime, stn.totPixel, stn.totrainPixel,
     $        stn.surfRain,stn.std_surfRain
         write(6,'(A6, 14I5)') ' ',stn.cldWater
         write(6,'(A6, 14I5)') ' ',stn.std_cldWater
 100  continue
      stop

 500  write(6,*)'Hit end-of-file'
      stop 0

 900  call perror('Error opening dataset')
      stop 2

 910  call perror('Error reading dataset')
      stop 4
      end


SAMPLE READ PROGRAM in C:
---------------------------
/***********************************************************************
*
* Program Name:
* ------------
*    ReadG2A12.c
*
* Description:
* -----------
*       This sample C program shows how to read a gridded 2A12
*       binary file.
*
*  Date                 Author Name         Change Description
*  -----------          ------------        ------------------
*  Dec-10-1998          Hualan Rui           Created
*
***********************************************************************/

#include <stdio.h>

typedef short int         int16;
typedef long int          int32;

/* Parameters and structure defined for L2A12 gridded data.              */
/* ------------------------------------------------------------------- */
#define L2A12_KMAX    14
#define L2A12_SPVAL   -999.0

/* Structure for Gridded 2A12 header record                            */
/* ------------------------------------------------------------------- */

typedef struct
{
  char    algID[8];
  char    region[40];
  int     head_len;
  int     rec_len;
  int     totBoxes;
  int     orbitNumber;
  int     beginDate;
  int     endDate;
  int     beginTime;
  int     endTime;
  float   lonMaxLat;
  float   lat0;
  float   lon0;
  float   late;
  float   lone;
  float   dlat;
  float   dlon;
  float   RainMax;
  float   RainMaxLat;
  float   RainMaxLon;
  float   BoxRainMax;
  float   BoxRainMaxLat;
  float   BoxRainMaxLon;
  float   dummy[5];
} G2A12_HEADER;

/* Structure for Gridded 2A12 data record                              */
/* ------------------------------------------------------------------- */
typedef struct
{
  int16  lat;
  int16  lon;
  int32  dayntime;
  int16  totPixel;
  int16  totrainPixel;
  int32  surfRain;
  int32  std_surfRain;
  int16  cldWater[L2A12_KMAX];
  int16  std_cldWater[L2A12_KMAX];
} G2A12_STNREC;

/* Main program                                                    */
/* --------------------------------------------------------------- */
void main(int argc, char* argv[] )
{
  char file_in[80];
  FILE *fptr;
  int n,k, nmax;

  G2A12_HEADER header;
  G2A12_STNREC stn;

  if ( argc > 1 ) {
    strcpy(file_in, argv[1]);
    printf("file_in=%s\n",file_in);
  } else {
    printf ("Usage: One command line argument is needed,\n");
    printf ("       which should be input file name.\n");
    exit(1);
  }

  if (  (fptr=fopen(file_in,"rb")) == NULL) {
     printf ("ERROR: Cannot open file %s.\n", file_in);
     exit(1);
  }

  fread(&header, sizeof(G2A12_HEADER), 1, fptr);/* read the header */

  /* Print header information                                      */
  /* ------------------------------------------------------------- */
  printf("Algorithm ID:       %s\n",header.algID);
  printf("Header Length:     %d\n",header.head_len);
  printf("Record Length:     %d\n",header.rec_len);
  printf("Total Points:      %d\n",header.totBoxes);
  printf("Orbit Number:      %d\n",header.orbitNumber);
  printf("Begin Date & Time: %d %6.6d\n",
                             header.beginDate,header.beginTime);
  printf("End Date and Time: %d %6.6d\n",
                             header.endDate,header.endTime);
  printf("lonMaxlat:         %-9.3f\n",header.lonMaxLat);
  printf("Area:              %10.3f,%10.3f, %10.3f, %10.3f\n",
                             header.lat0,header.lon0,
                             header.late,header.lone);
  printf("Resolution:        %10.3f,%10.3f\n",
                             header.dlat,header.dlon);
  printf("RainMax:           %-f, at (%f, %f) \n",header.RainMax,
                             header.RainMaxLat, header.RainMaxLon);
  printf("BoxRainMax:        %-f, at (%f, %f) \n",header.BoxRainMax,
                             header.BoxRainMaxLat, header.BoxRainMaxLon);

  /* Print data records                                            */
  /* ------------------------------------------------------------- */
  nmax = header.totBoxes;
  printf("\n\n");
  for (n=1; n<=nmax; n++) {
      fread(&stn, sizeof(G2A12_STNREC), 1, fptr);/* read nth record */

      /*  Print the variables for your checking.  Here is the place */
      /*  to insert your own code to save the data for each grid.   */
      /*  --------------------------------------------------------  */
      printf("%8d %6d %6d %8d %6d %6d %6d %6d\n",
             n, stn.lat, stn.lon, stn.dayntime, stn.totPixel,
             stn.totrainPixel, stn.surfRain,stn.std_surfRain);

      /*  Print 14 layers cloud water                               */
      /*  --------------------------------------------------------  */
      printf ("         ");
      for ( k=0; k<L2A12_KMAX; k++) printf("%5d", stn.cldWater[k]);
      printf ("\n         ");
      /*  Print 14 layers standard deviation of cloud water          */
      /*  --------------------------------------------------------  */
      for ( k=0; k<L2A12_KMAX; k++) printf("%5d", stn.std_cldWater[k]);
      printf ("\n");
  }
  close (fptr);
}

*********************************************************



References

[To be provided at a later date.]

Data Access

The TMI Gridded Orbital rainfall data are available online via the Goddard DAAC's anonymous FTP server. In the future, the data will be ingested into the DAAC's nearline tape jukebox. They will then be available to users by tape or FTP pickup through the DAAC search-and-order interface available on the World Wide Web.

Anonymous FTP

The TMI Gridded Orbital rainfall data may be accessed either directly from this document,

or via anonymous FTP at

ftp disc2.nascom.nasa.gov
login: anonymous
password: < your internet address >
cd /data/s4pa/TRMM_L2/TRMM_G2A12

Points of Contact

DAAC Help Desk:
For information about or assistance in using any DAAC data, contact the DAAC Help Desk at:

EOS Distributed Active Archive Center (DAAC)
Code 902
NASA Goddard Space Flight Center
Greenbelt, Maryland 20771
301-614-5224
Email: help-disc@listserv.gsfc.nasa.gov

Data Producers:

The producer of the TMI Gridded Orbital rainfall product is:

Goddard DAAC Hydrology Data Support Team
Distributed Active Archive Center / Code 902
NASA Goddard Space Flight Center
Greenbelt, Maryland 20771

Email: hydrology-disc@listserv.gsfc.nasa.gov


Privacy, Security, Notices 

NASA Home Page | DAAC Home Page | GCMD Home Page Precipitation Home Page |   Data Order Home Page


Goddard DAAC Help Desk: 301-614-5224 or 1-877-422-1222 -- daacuso@disc.gsfc.nasa.gov
NASA Official: Steve Kempler, DAAC Manager -- Steven.J.Kempler@nasa.gov
Last updated: 2005-11-13 01:22:20