CrIS Code Collection
map_rad.c
Go to the documentation of this file.
1#include "libcris.h"
2
3int main(
4 int argc,
5 char *argv[]) {
6
7 static cris_l1_t l1;
8
9 FILE *out;
10
11 /* Check arguments... */
12 if (argc < 4)
13 ERRMSG("Give parameters: <ctl> <map.tab> <l1b_file1> {<l1b_file2> ...]");
14
15 /* Get control parameters... */
16 const int apo = (int) scan_ctl(argc, argv, "APO", -1, "0", NULL);
17 const double nu = scan_ctl(argc, argv, "NU", -1, "1231.2500", NULL);
18
19 /* Create file... */
20 LOG(1, "Write map: %s", argv[2]);
21 if (!(out = fopen(argv[2], "w")))
22 ERRMSG("Cannot create file!");
23
24 /* Write header... */
25 fprintf(out,
26 "# $1 = time (seconds since 01-JAN-2000, 00:00 UTC)\n"
27 "# $2 = satellite longitude [deg]\n"
28 "# $3 = satellite latitude [deg]\n"
29 "# $4 = footprint longitude [deg]\n"
30 "# $5 = footprint latitude [deg]\n"
31 "# $6 = wavenumber [cm^-1]\n"
32 "# $7 = brightness temperature [K]\n"
33 "# $8 = radiance [W/(m^2 sr cm^-1)]\n"
34 "# $9 = noise [W/(m^2 sr cm^-1)]\n" "# $10 = channel index\n\n");
35
36 /* Loop over files... */
37 for (int iarg = 3; iarg < argc; iarg++) {
38
39 /* Read CrIS data... */
40 if (!read_cris_l1(argv[iarg], &l1, apo))
41 continue;
42
43 /* Write data... */
44 for (int ichan = 0; ichan < L1_NCHAN_LW; ichan++)
45 if (fabs(l1.nu_lw[ichan] - nu) < 0.1)
46 for (int track = 0; track < L1_NTRACK; track++)
47 for (int xtrack = 0; xtrack < L1_NXTRACK; xtrack++)
48 for (int ifov = 0; ifov < L1_NFOV; ifov++)
49 fprintf(out, "%.2f %g %g %g %g %.4f %g %g %g LW_%03d\n",
50 l1.time[track][xtrack] - 220838400,
51 l1.sat_lon[track], l1.sat_lat[track],
52 l1.lon[track][xtrack][ifov],
53 l1.lat[track][xtrack][ifov], l1.nu_lw[ichan],
54 BRIGHT(l1.rad_lw[track][xtrack][ifov][ichan] * 1e-3,
55 l1.nu_lw[ichan]),
56 l1.rad_lw[track][xtrack][ifov][ichan] * 1e-3,
57 l1.nedn_lw[ifov][ichan] * 1e-3, ichan);
58
59 for (int ichan = 0; ichan < L1_NCHAN_MW; ichan++)
60 if (fabs(l1.nu_mw[ichan] - nu) < 0.1)
61 for (int track = 0; track < L1_NTRACK; track++)
62 for (int xtrack = 0; xtrack < L1_NXTRACK; xtrack++)
63 for (int ifov = 0; ifov < L1_NFOV; ifov++)
64 fprintf(out, "%.2f %g %g %g %g %.4f %g %g %g MW_%03d\n",
65 l1.time[track][xtrack] - 220838400,
66 l1.sat_lon[track], l1.sat_lat[track],
67 l1.lon[track][xtrack][ifov],
68 l1.lat[track][xtrack][ifov], l1.nu_mw[ichan],
69 BRIGHT(l1.rad_mw[track][xtrack][ifov][ichan] * 1e-3,
70 l1.nu_mw[ichan]),
71 l1.rad_mw[track][xtrack][ifov][ichan] * 1e-3,
72 l1.nedn_mw[ifov][ichan] * 1e-3, ichan);
73
74 for (int ichan = 0; ichan < L1_NCHAN_SW; ichan++)
75 if (fabs(l1.nu_sw[ichan] - nu) < 0.1)
76 for (int track = 0; track < L1_NTRACK; track++)
77 for (int xtrack = 0; xtrack < L1_NXTRACK; xtrack++)
78 for (int ifov = 0; ifov < L1_NFOV; ifov++)
79 fprintf(out, "%.2f %g %g %g %g %.4f %g %g %g SW_%03d\n",
80 l1.time[track][xtrack] - 220838400,
81 l1.sat_lon[track], l1.sat_lat[track],
82 l1.lon[track][xtrack][ifov],
83 l1.lat[track][xtrack][ifov], l1.nu_sw[ichan],
84 BRIGHT(l1.rad_sw[track][xtrack][ifov][ichan] * 1e-3,
85 l1.nu_sw[ichan]),
86 l1.rad_sw[track][xtrack][ifov][ichan] * 1e-3,
87 l1.nedn_sw[ifov][ichan] * 1e-3, ichan);
88 }
89
90 /* Close file... */
91 fclose(out);
92
93 return EXIT_SUCCESS;
94}
double scan_ctl(int argc, char *argv[], const char *varname, int arridx, const char *defvalue, char *value)
Search control parameter file for variable entry.
Definition: jurassic.c:5114
#define BRIGHT(rad, nu)
Compute brightness temperature.
Definition: jurassic.h:126
#define ERRMSG(...)
Print error message and quit program.
Definition: jurassic.h:237
#define LOG(level,...)
Print log message.
Definition: jurassic.h:221
int read_cris_l1(char *filename, cris_l1_t *l1, int apo)
Read CrIS Level-1 data.
Definition: libcris.c:1100
#define L1_NCHAN_LW
Number of CrIS longwave radiance channels.
Definition: libcris.h:30
#define L1_NXTRACK
Across-track size of CrIS radiance granule.
Definition: libcris.h:24
#define L1_NTRACK
Along-track size of CrIS radiance granule.
Definition: libcris.h:21
#define L1_NFOV
Number of field of views of CrIS radiance granule.
Definition: libcris.h:27
#define L1_NCHAN_MW
Number of CrIS midwave radiance channels.
Definition: libcris.h:33
#define L1_NCHAN_SW
Number of CrIS shortwave radiance channels.
Definition: libcris.h:36
int main(int argc, char *argv[])
Definition: map_rad.c:3
CrIS Level-1 data.
Definition: libcris.h:72
double nu_sw[L1_NCHAN_SW]
Shortwave channel frequencies [cm^-1].
Definition: libcris.h:117
float nedn_sw[L1_NFOV][L1_NCHAN_SW]
Longwave radiance noise [W/(m^2 sr cm^-1)].
Definition: libcris.h:123
float rad_mw[L1_NTRACK][L1_NXTRACK][L1_NFOV][L1_NCHAN_MW]
Midwave radiance [W/(m^2 sr cm^-1)].
Definition: libcris.h:108
float nedn_mw[L1_NFOV][L1_NCHAN_MW]
Midwave radiance noise [W/(m^2 sr cm^-1)].
Definition: libcris.h:111
double nu_mw[L1_NCHAN_MW]
Midwave channel frequencies [cm^-1].
Definition: libcris.h:105
float rad_sw[L1_NTRACK][L1_NXTRACK][L1_NFOV][L1_NCHAN_SW]
Shortwave radiance [W/(m^2 sr cm^-1)].
Definition: libcris.h:120
float nedn_lw[L1_NFOV][L1_NCHAN_LW]
Longwave radiance noise [W/(m^2 sr cm^-1)].
Definition: libcris.h:99
double lon[L1_NTRACK][L1_NXTRACK][L1_NFOV]
Footprint longitude [deg].
Definition: libcris.h:78
float rad_lw[L1_NTRACK][L1_NXTRACK][L1_NFOV][L1_NCHAN_LW]
Longwave radiance [W/(m^2 sr cm^-1)].
Definition: libcris.h:96
double sat_lat[L1_NTRACK]
Satellite latitude [deg].
Definition: libcris.h:90
double time[L1_NTRACK][L1_NXTRACK]
Time (seconds since 2000-01-01T00:00Z).
Definition: libcris.h:75
double sat_lon[L1_NTRACK]
Satellite longitude [deg].
Definition: libcris.h:87
double nu_lw[L1_NCHAN_LW]
Longwave channel frequencies [cm^-1].
Definition: libcris.h:93
double lat[L1_NTRACK][L1_NXTRACK][L1_NFOV]
Footprint latitude [deg].
Definition: libcris.h:81