Readme for the TRMM Microwave Imager (TMI) Gridded Orbital Data Set |
TMI Gridded Orbital Data
- Summary
Sponsor
Future Updates
Data Set Description- Data Characteristics
Data Format- Sample Software
References
Data Access- Anonymous FTP
- Points of Contact
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.
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.
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.
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:
Frequency Dual Polarization: 10.65, 19.35, 37, and 85.5 GHz
Vertical Polarization: 21 GHzScanning Mode Conical Scan Time 1.9 s Ground Resolution Ranges from 5 km @ 85.5 GHz to 45 km @ 10 GHz Swath Width 760 km Science Applications Surface rainfall rate, rain type, distribution, and structure The Gridded Orbital data contain two parameters:
- surface rain rate
- cloud water in rain clouds at 14 layers
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 ) / NRs(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 / Ns(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 1 surface - 0.5 km 2 0.5 - 1.0 km 3 1.0 - 1.5 km 4 1.5 - 2.0 km 5 2.0 - 2.5 km 6 2.5 - 3.0 km 7 3.0 - 3.5 km 8 3.5 - 4.0 km 9 4.0 - 5.0 km 10 5.0 - 6.0 km 11 6.0 - 8.0 km 12 8.0 -10.0 km 13 10.0 -14.0 km 14 14.0 - 18.0 km 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 waterg/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).
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):
where:
- Nrec = 2 + NGR
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.
- record 1-2 : header
- record 3 : data record for first grid box
- :
- record NGR + 2 : data record for last grid box
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:
where:
- G2A12.yymmdd.n.v.BIN
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.
- 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
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); } *********************************************************
[To be provided at a later date.]
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.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
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