IASI Code Collection
Macros | Functions
bands.c File Reference

Calcuate band radiances. More...

#include "libiasi.h"

Go to the source code of this file.

Macros

#define NB   100
 

Functions

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

Detailed Description

Calcuate band radiances.

Definition in file bands.c.

Macro Definition Documentation

◆ NB

#define NB   100

Definition at line 33 of file bands.c.

Function Documentation

◆ main()

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

Definition at line 39 of file bands.c.

41 {
42
43 static iasi_rad_t *iasi_rad;
44
45 static FILE *out;
46
47 static double numin[NB], numax[NB], rad[NB];
48
49 static int iarg, ib, ichan, n, nb, track, xtrack, format;
50
51 /* Check arguments... */
52 if (argc < 4)
53 ERRMSG("Give parameters: <ctl> <out.tab> <l1b_file1> [<l1b_file2> ...]");
54
55 /* Allocate... */
56 ALLOC(iasi_rad, iasi_rad_t, 1);
57
58 /* Get control parameters... */
59 nb = (int) scan_ctl(argc, argv, "NB", -1, "1", NULL);
60 if (nb > NB)
61 ERRMSG("Too many bands!");
62 for (ib = 0; ib < nb; ib++) {
63 numin[ib] = scan_ctl(argc, argv, "NUMIN", ib, "", NULL);
64 numax[ib] = scan_ctl(argc, argv, "NUMAX", ib, "", NULL);
65 }
66 format = (int) scan_ctl(argc, argv, "FORMAT", -1, "1", NULL);
67
68 /* Create file... */
69 printf("Write band data: %s\n", argv[2]);
70 if (!(out = fopen(argv[2], "w")))
71 ERRMSG("Cannot create file!");
72
73 /* Loop over IASI files... */
74 for (iarg = 3; iarg < argc; iarg++) {
75
76 /* Read IASI data... */
77 printf("Read IASI Level-1C data file: %s\n", argv[iarg]);
78 iasi_read(format, argv[iarg], iasi_rad);
79
80 /* Write header... */
81 if (iarg == 3) {
82 fprintf(out,
83 "# $1 = time [s]\n"
84 "# $2 = footprint longitude [deg]\n"
85 "# $3 = footprint latitude [deg]\n"
86 "# $4 = satellite altitude [km]\n"
87 "# $5 = satellite longitude [deg]\n"
88 "# $6 = satellite latitude [deg]\n");
89 for (ib = 0; ib < nb; ib++)
90 fprintf(out,
91 "# $%d = BT(%.2f/cm...%.2f/cm) [K]\n",
92 7 + ib, numin[ib], numax[ib]);
93 }
94
95 /* Loop over scans... */
96 for (track = 0; track < iasi_rad->ntrack; track++) {
97
98 /* Write output... */
99 fprintf(out, "\n");
100
101 /* Loop over footprints... */
102 for (xtrack = 0; xtrack < L1_NXTRACK; xtrack++) {
103
104 /* Write output... */
105 fprintf(out, "%.2f %.4f %.4f %.3f %.4f %.4f",
106 iasi_rad->Time[track][xtrack],
107 iasi_rad->Longitude[track][xtrack],
108 iasi_rad->Latitude[track][xtrack],
109 iasi_rad->Sat_z[track],
110 iasi_rad->Sat_lon[track], iasi_rad->Sat_lat[track]);
111
112 /* Loop over bands... */
113 for (ib = 0; ib < nb; ib++) {
114
115 /* Get mean radiance... */
116 n = 0;
117 rad[ib] = 0;
118 for (ichan = 0; ichan <= IASI_L1_NCHAN; ichan++)
119 if (iasi_rad->freq[ichan] >= numin[ib]
120 && iasi_rad->freq[ichan] <= numax[ib]
121 && gsl_finite(iasi_rad->Rad[track][xtrack][ichan])) {
122 rad[ib] += iasi_rad->Rad[track][xtrack][ichan];
123 n++;
124 }
125 if (n > 0)
126 rad[ib] /= n;
127 else
128 rad[ib] = GSL_NAN;
129
130 /* Convert to brightness temperature... */
131 rad[ib] = BRIGHT(rad[ib], 0.5 * (numin[ib] + numax[ib]));
132
133 /* Write output... */
134 fprintf(out, " %.3f", rad[ib]);
135 }
136
137 /* Write output... */
138 fprintf(out, "\n");
139 }
140 }
141 }
142
143 /* Close file... */
144 fclose(out);
145
146 /* Free... */
147 free(iasi_rad);
148
149 return EXIT_SUCCESS;
150}
#define NB
Definition: bands.c:33
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
double Sat_z[L1_NTRACK]
Altitude of the satellite.
Definition: libiasi.h:309
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: