CrIS Code Collection
noise_pert.c
Go to the documentation of this file.
1#include "libcris.h"
2
3int main(
4 int argc,
5 char *argv[]) {
6
7 static pert_t *pert;
8
9 FILE *out;
10
11 char pertname[LEN];
12
13 double mu, nedt = -1e99;
14
15 /* Check arguments... */
16 if (argc < 4)
17 ERRMSG("Give parameters: <ctl> <pert.nc> <noise.tab>");
18
19 /* Read control parameters... */
20 scan_ctl(argc, argv, "PERTNAME", -1, "4mu", pertname);
21 int bsize = (int) scan_ctl(argc, argv, "BSIZE", -1, "-999", NULL);
22 const int maxvar = (int) scan_ctl(argc, argv, "MAXVAR", -1, "-999", NULL);
23 const int dc = (int) scan_ctl(argc, argv, "DC", -1, "0", NULL);
24
25 /* Allocate... */
26 ALLOC(pert, pert_t, 1);
27
28 /* Read perturbation data... */
29 read_pert(argv[2], pertname, dc, pert);
30
31 /* Set block size... */
32 if (bsize < 0)
33 bsize = pert->nxtrack;
34
35 /* Create file... */
36 LOG(1, "Write noise data: %s", argv[3]);
37 if (!(out = fopen(argv[3], "w")))
38 ERRMSG("Cannot create file!");
39
40 /* Write header... */
41 fprintf(out,
42 "# $1 = longitude [deg]\n"
43 "# $2 = latitude [deg]\n"
44 "# $3 = mean brightness temperature [K]\n"
45 "# $4 = noise estimate [K]\n\n");
46
47 /* Loop over granules... */
48 for (int itrack = 0; itrack < pert->ntrack - bsize; itrack += bsize) {
49
50 /* Estimate noise... */
51 double nedt_old = nedt;
52 noise_pert(pert, itrack, itrack + bsize, &mu, &nedt);
53
54 /* Write output... */
55 if (maxvar <= 0
56 || fabs(200 * (nedt - nedt_old) / (nedt + nedt_old)) < maxvar)
57 fprintf(out, "%g %g %g %g\n",
58 pert->lon[itrack + bsize / 2][pert->nxtrack / 2][4],
59 pert->lat[itrack + bsize / 2][pert->nxtrack / 2][4], mu, nedt);
60 }
61
62 /* Close file... */
63 fclose(out);
64
65 /* Free... */
66 free(pert);
67
68 return EXIT_SUCCESS;
69}
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 LEN
Maximum length of ASCII data lines.
Definition: jurassic.h:383
#define ERRMSG(...)
Print error message and quit program.
Definition: jurassic.h:237
#define ALLOC(ptr, type, n)
Allocate memory.
Definition: jurassic.h:121
#define LOG(level,...)
Print log message.
Definition: jurassic.h:221
void noise_pert(pert_t *pert, int track0, int track1, double *mu, double *sig)
Estimate noise from perurbations.
Definition: libcris.c:821
void read_pert(char *filename, char *pertname, int dc, pert_t *pert)
Read radiance perturbation data.
Definition: libcris.c:1270
int main(int argc, char *argv[])
Definition: noise_pert.c:3
Perturbation data.
Definition: libcris.h:131
double lat[PERT_NTRACK][PERT_NXTRACK][PERT_NFOV]
Latitude [deg].
Definition: libcris.h:149
int ntrack
Number of along-track values.
Definition: libcris.h:134
int nxtrack
Number of across-track values.
Definition: libcris.h:137
double lon[PERT_NTRACK][PERT_NXTRACK][PERT_NFOV]
Longitude [deg].
Definition: libcris.h:146