30 {
31
34
35 FILE *out;
36
38
39 double mu, nedt = -1e99;
40
41
42 if (argc < 4)
43 ERRMSG(
"Give parameters: <ctl> <pert.nc> <noise.tab>");
44
45
46 scan_ctl(argc, argv,
"PERTNAME", -1,
"4mu", pertname);
47 int bsize = (int)
scan_ctl(argc, argv,
"BSIZE", -1,
"-999", NULL);
48 const double maxvar =
scan_ctl(argc, argv,
"MAXVAR", -1,
"-999", NULL);
49
50
52
53
55
56
57 if (bsize < 0)
59
60
61 printf("Write noise data: %s\n", argv[3]);
62 if (!(out = fopen(argv[3], "w")))
63 ERRMSG(
"Cannot create file!");
64
65
66 fprintf(out,
67 "# $1 = longitude [deg]\n"
68 "# $2 = latitude [deg]\n"
69 "# $3 = mean brightness temperature [K]\n"
70 "# $4 = noise estimate [K]\n\n");
71
72
73 for (
int itrack = 0; itrack < pert->
ntrack; itrack += bsize) {
74
75
76 pert2wave(pert, &wave, itrack, itrack + bsize,
78
79
80 double nedt_old = nedt;
81 noise(&wave, &mu, &nedt);
82
83
84 if (maxvar <= 0
85 || fabs(200 * (nedt - nedt_old) / (nedt + nedt_old)) < maxvar)
86 fprintf(out,
"%g %g %g %g\n", wave.
lon[wave.
nx / 2][wave.
ny / 2],
87 wave.
lat[wave.
nx / 2][wave.
ny / 2], mu, nedt);
88 }
89
90
91 fclose(out);
92
93
94 free(pert);
95
96 return EXIT_SUCCESS;
97}
double scan_ctl(int argc, char *argv[], const char *varname, int arridx, const char *defvalue, char *value)
Search control parameter file for variable entry.
#define LEN
Maximum length of ASCII data lines.
#define ERRMSG(...)
Print error message and quit program.
#define ALLOC(ptr, type, n)
Allocate memory.
void noise(wave_t *wave, double *mu, double *sig)
Estimate noise.
void pert2wave(pert_t *pert, wave_t *wave, int track0, int track1, int xtrack0, int xtrack1)
Convert radiance perturbation data to wave analysis struct.
void read_pert(char *filename, char *pertname, pert_t *pert)
Read radiance perturbation data.
int ntrack
Number of along-track values.
int nxtrack
Number of across-track values.
int nx
Number of across-track values.
int ny
Number of along-track values.
double lon[WX][WY]
Longitude [deg].
double lat[WX][WY]
Latitude [deg].