/******************************************************* 1B21/1C21 data check 98/06/24 Y.Suzuki@restec Listing 1B21/1C21 metadata information, latitude, longitude, scan time and normalsample(dBz) print. File format of 1C21 is same as 1B21, so this program can be used for 1B21 check. USAGE: c_1c21rd '1C21_File_Name' This program is FREEWARE, so there is NO SUPPORT. ************************************************************/ #include #include #include #include #include #include #include #define N100 100 int main(int argc, char *argv[]) { /* --------- Variables related to toolkit ---------- */ L1C_21_SWATHDATA read_L1C21_data ; L1B21_L1C21_HEADER L1C21_header; IO_HANDLE granuleHandle1C21; DATE_STR beginDate; TIME_STR beginTime; DATE_STR endDate; TIME_STR endTime; char granuleID_L1C21[N100]; int dataType_L1C21; char filemode_read, filemode_write; int i, j, status, iScan, numberOfScan, orbitSize ; char granuleID[N100], algorithmID[N100], algorithmVersion[N100], toolkitVersion[N100] ; if( argc != 2 ) { fprintf( stderr, " USAGE : " "c_1c21rd '1C21_Input_File_Name'\n" ); return ; } strcpy(granuleID_L1C21,argv[1]); dataType_L1C21 = TK_L1C_21; filemode_read = TK_READ_ONLY; filemode_write = TK_NEW_FILE; /* open file */ status = TKopen(granuleID_L1C21, dataType_L1C21, filemode_read, &granuleHandle1C21); if(status != TK_SUCCESS) { printf( "*** ERROR -> STOP ----- " "Failed to open 1C21 input file: %s\n",granuleID_L1C21); } /* ------- check metadata ------ */ status = TKreadMetadataInt(&granuleHandle1C21, TK_BEGIN_DATE, &beginDate); status = TKreadMetadataInt(&granuleHandle1C21, TK_BEGIN_TIME, &beginTime); status = TKreadMetadataInt(&granuleHandle1C21, TK_END_DATE, &endDate); status = TKreadMetadataInt(&granuleHandle1C21, TK_END_TIME, &endTime); printf( " beginDate = %d/%d/%d \n", beginDate.tkyear, beginDate.tkmonth, beginDate.tkday ); printf( " beginTime = %d:%d:%d\n", beginTime.tkhour, beginTime.tkminute, beginTime.tksecond ); printf( " endDate = %d/%d/%d\n", endDate.tkyear, endDate.tkmonth, endDate.tkday ); printf( " endTime = %d:%d:%d\n", endTime.tkhour, endTime.tkminute, endTime.tksecond ); status = TKreadMetadataInt(&granuleHandle1C21, TK_ORBIT_SIZE, &orbitSize); printf( " numberOfScan = %d\n", orbitSize ); numberOfScan = orbitSize ; status = TKreadMetadataChar(&granuleHandle1C21, TK_GRANULE_ID, granuleID); status = TKreadMetadataChar(&granuleHandle1C21, TK_ALGORITHM_ID, algorithmID); status = TKreadMetadataChar(&granuleHandle1C21, TK_ALGORITHM_VERSION, algorithmVersion); status = TKreadMetadataChar(&granuleHandle1C21, TK_TOOLKIT_VERSION, toolkitVersion); printf( " granuleID = %s\n", granuleID ); printf( " algorithmID = %s\n", algorithmID ); printf( " algorithmVersion = %s\n", algorithmVersion ); printf( " toolkitVersion = %s\n", toolkitVersion ); /* Ray header */ status = TKreadHeader(&granuleHandle1C21,&L1C21_header); printf( " startBinDist ="); for(i=0; i<49; i++) /* angle loop */ printf( " %10.3e", L1C21_header.rayHdr[i].startBinDist); /* Distance(m) between satellite and starting sample */ printf( "\n" ); /* read scan by scan */ for(iScan=1; iScan<=numberOfScan; iScan++) { /* scan loop */ status = TKreadScan(&granuleHandle1C21,&read_L1C21_data) ; if( status != TK_SUCCESS ) printf( " Read Scan Error\n"); else { for(i=0; i<49; i++) { /* angle loop */ printf( "Scan : %5d/%5d ScanTime : %9.3f Angle : %2d " "Lat,Lon : %9.3f,%9.3f \n", iScan, numberOfScan, read_L1C21_data.scanTime, i+1, /* UTC seconds of the day */ read_L1C21_data.geolocation[i][0], /* Latitude (deg) */ read_L1C21_data.geolocation[i][1] ); /* Longitude (deg) */ for(j=0;j<140;j++) printf( " %8.1f", /* vertical loop */ read_L1C21_data.normalSample[i][j] ); /* Reflectivity (dBz) */ printf( "\n" ); } } } /* close TRMM data */ status = TKclose(&granuleHandle1C21); return status; }