30 {
31
33
35
36 static FILE *out;
37
38 static double mu, nesr, sigma;
39
40 static int ichan, itrack, ix, iy, format;
41
42
43 if (argc < 4)
44 ERRMSG("Give parameters: <ctl> <iasi_l1_file> <noise.tab>");
45
46
47 format = (int) scan_ctl(argc, argv, "FORMAT", -1, "1", NULL);
48
49
51
52
53 printf("Read IASI data: %s\n", argv[2]);
55
56
57 printf("Write noise data: %s\n", argv[3]);
58 if (!(out = fopen(argv[3], "w")))
59 ERRMSG("Cannot create file!");
60
61
62 fprintf(out,
63 "# $1 = track index\n"
64 "# $2 = channel index\n"
65 "# $3 = wavenumber [1/cm]\n"
66 "# $4 = mean BT [K]\n"
67 "# $5 = NEDT [K]\n" "# $6 = NESR [W/(m^2 sr cm^-1)]\n");
68
69
70 for (itrack = 0; itrack < iasi_rad->
ntrack; itrack += 60) {
71
72
73 fprintf(out, "\n");
74
75
77
78
81 for (iy = itrack; iy < GSL_MIN(itrack + 60, iasi_rad->
ntrack); iy++) {
82 for (ix = 0; ix < wave.
nx; ix++)
83 wave.
temp[ix][wave.
ny] = BRIGHT(iasi_rad->
Rad[iy][ix][ichan],
84 iasi_rad->
freq[ichan]);
86 }
87
88
90
91
92 noise(&wave, &mu, &sigma);
93
94
95 nesr = PLANCK(mu + sigma, iasi_rad->
freq[ichan])
96 - PLANCK(mu, iasi_rad->
freq[ichan]);
97
98
99 if (gsl_finite(sigma))
100 fprintf(out, "%d %d %.4f %g %g %g\n", itrack, ichan,
101 iasi_rad->
freq[ichan], mu, sigma, nesr);
102 }
103 }
104 }
105
106
107 fclose(out);
108
109
110 free(iasi_rad);
111
112 return EXIT_SUCCESS;
113}
void iasi_read(int format, char *filename, iasi_rad_t *iasi_rad)
Read IASI Level-1 data.
void noise(wave_t *wave, double *mu, double *sig)
Estimate noise.
#define L1_NXTRACK
Across-track size of IASI radiance granule (don't change).
#define IASI_L1_NCHAN
Number of channels of IASI radiance granule.
IASI converted Level-1 radiation data.
double freq[IASI_L1_NCHAN]
channel wavenumber [cm^-1]
int ntrack
Number of along-track samples.
float Rad[L1_NTRACK][L1_NXTRACK][IASI_L1_NCHAN]
Radiance [W/(m^2 sr cm^-1)].
int nx
Number of across-track values.
int ny
Number of along-track values.
double temp[WX][WY]
Temperature [K].