IASI Code Collection
Functions
spec2tab.c File Reference

Extract radiance spectra. More...

#include "libiasi.h"

Go to the source code of this file.

Functions

int main (int argc, char *argv[])
 

Detailed Description

Extract radiance spectra.

Definition in file spec2tab.c.

Function Documentation

◆ main()

int main ( int  argc,
char *  argv[] 
)

Definition at line 28 of file spec2tab.c.

30 {
31
32 static iasi_rad_t *iasi_rad;
33
34 FILE *out;
35
36 double dmin = 1e100, x0[3], x1[3];
37
38 int ichan, track = -1, track2, xtrack = -1, xtrack2, format;
39
40 /* Check arguments... */
41 if (argc < 7)
42 ERRMSG("Give parameters: <ctl> <iasi_l1b_file> "
43 "[index <track> <xtrack> | geo <lon> <lat>] <spec.tab>");
44
45 /* Read control parameters... */
46 format = (int) scan_ctl(argc, argv, "FORMAT", -1, "1", NULL);
47
48 /* Allocate... */
49 ALLOC(iasi_rad, iasi_rad_t, 1);
50
51 /* Read IASI data... */
52 printf("Read IASI Level-1C data file: %s\n", argv[2]);
53 iasi_read(format, argv[2], iasi_rad);
54
55 /* Get indices... */
56 if (argv[3][0] == 'i') {
57 track = atoi(argv[4]);
58 xtrack = atoi(argv[5]);
59 }
60
61 /* Find nearest footprint... */
62 else {
63 geo2cart(0, atof(argv[4]), atof(argv[5]), x0);
64 for (track2 = 0; track2 < iasi_rad->ntrack; track2++)
65 for (xtrack2 = 0; xtrack2 < L1_NXTRACK; xtrack2++) {
66 geo2cart(0, iasi_rad->Longitude[track2][xtrack2],
67 iasi_rad->Latitude[track2][xtrack2], x1);
68 if (DIST2(x0, x1) < dmin) {
69 dmin = DIST2(x0, x1);
70 track = track2;
71 xtrack = xtrack2;
72 }
73 }
74 if (dmin > 2500)
75 ERRMSG("Geolocation not covered by granule!");
76 }
77
78 /* Check indices... */
79 if (track < 0 || track >= iasi_rad->ntrack)
80 ERRMSG("Along-track index out of range!");
81 if (xtrack < 0 || xtrack >= L1_NXTRACK)
82 ERRMSG("Across-track index out of range!");
83
84 /* Create file... */
85 printf("Write spectrum: %s\n", argv[6]);
86 if (!(out = fopen(argv[6], "w")))
87 ERRMSG("Cannot create file!");
88
89 /* Write header... */
90 fprintf(out,
91 "# $1 = time (seconds since 01-JAN-2000, 00:00 UTC)\n"
92 "# $2 = satellite longitude [deg]\n"
93 "# $3 = satellite latitude [deg]\n"
94 "# $4 = footprint longitude [deg]\n"
95 "# $5 = footprint latitude [deg]\n"
96 "# $6 = wavenumber [cm^-1]\n"
97 "# $7 = brightness temperature [K]\n"
98 "# $8 = radiance [W/(m^2 sr cm^-1)]\n\n");
99
100 /* Write data... */
101 for (ichan = 0; ichan < IASI_L1_NCHAN; ichan++)
102 fprintf(out, "%.2f %g %g %g %g %g %g %g\n",
103 iasi_rad->Time[track][xtrack],
104 iasi_rad->Sat_lon[track],
105 iasi_rad->Sat_lat[track],
106 iasi_rad->Longitude[track][xtrack],
107 iasi_rad->Latitude[track][xtrack],
108 iasi_rad->freq[ichan],
109 BRIGHT(iasi_rad->Rad[track][xtrack][ichan],
110 iasi_rad->freq[ichan]),
111 iasi_rad->Rad[track][xtrack][ichan]);
112
113 /* Close file... */
114 fclose(out);
115
116 /* Free... */
117 free(iasi_rad);
118
119 return EXIT_SUCCESS;
120}
void iasi_read(int format, char *filename, iasi_rad_t *iasi_rad)
Read IASI Level-1 data.
Definition: libiasi.c:297
#define L1_NXTRACK
Across-track size of IASI radiance granule (don't change).
Definition: libiasi.h:102
#define IASI_L1_NCHAN
Number of channels of IASI radiance granule.
Definition: libiasi.h:114
IASI converted Level-1 radiation data.
Definition: libiasi.h:288
double Longitude[L1_NTRACK][L1_NXTRACK]
Longitude of the sounder pixel.
Definition: libiasi.h:300
double Latitude[L1_NTRACK][L1_NXTRACK]
Latitude of the sounder pixel.
Definition: libiasi.h:303
double Time[L1_NTRACK][L1_NXTRACK]
Seconds since 2000-01-01 for each sounder pixel.
Definition: libiasi.h:297
double freq[IASI_L1_NCHAN]
channel wavenumber [cm^-1]
Definition: libiasi.h:294
int ntrack
Number of along-track samples.
Definition: libiasi.h:291
double Sat_lon[L1_NTRACK]
Estimated longitude of the satellite.
Definition: libiasi.h:312
float Rad[L1_NTRACK][L1_NXTRACK][IASI_L1_NCHAN]
Radiance [W/(m^2 sr cm^-1)].
Definition: libiasi.h:306
double Sat_lat[L1_NTRACK]
Estimated latitude of the satellite.
Definition: libiasi.h:315
Here is the call graph for this function: