38 static char pertname[
LEN];
40 const int dtrack = 15, dxtrack = 15;
44 ERRMSG(
"Give parameters: <ctl> <events.tab> <pert1.nc> [<pert2.nc> ...]");
47 scan_ctl(argc, argv,
"PERTNAME", -1,
"4mu", pertname);
49 (int)
scan_ctl(argc, argv,
"BG_POLY_X", -1,
"0", NULL);
51 (int)
scan_ctl(argc, argv,
"BG_POLY_Y", -1,
"0", NULL);
52 const int bg_smooth_x =
53 (int)
scan_ctl(argc, argv,
"BG_SMOOTH_X", -1,
"0", NULL);
54 const int bg_smooth_y =
55 (int)
scan_ctl(argc, argv,
"BG_SMOOTH_Y", -1,
"0", NULL);
56 const double gauss_fwhm =
scan_ctl(argc, argv,
"GAUSS_FWHM", -1,
"0", NULL);
57 const double var_dh =
scan_ctl(argc, argv,
"VAR_DH", -1,
"0", NULL);
58 const double varmin =
scan_ctl(argc, argv,
"VARMIN", -1,
"", NULL);
59 const double dt230 =
scan_ctl(argc, argv,
"DT230", -1,
"0.16", NULL);
60 const double nu =
scan_ctl(argc, argv,
"NU", -1,
"2345.0", NULL);
66 printf(
"Write event data: %s\n", argv[2]);
67 if (!(out = fopen(argv[2],
"w")))
68 ERRMSG(
"Cannot create file!");
73 "# $2 = longitude [deg]\n"
74 "# $3 = latitude [deg]\n" "# $4 = maximum variance [K^2]\n\n");
77 for (
int iarg = 3; iarg < argc; iarg++) {
81 if (!(in = fopen(argv[iarg],
"r")))
89 if (bg_poly_x > 0 || bg_poly_y > 0 ||
90 bg_smooth_x > 0 || bg_smooth_y > 0 || gauss_fwhm > 0 || var_dh > 0) {
103 gauss(wave, gauss_fwhm);
109 for (
int ix = 0; ix < wave->
nx; ix++)
110 for (
int iy = 0; iy < wave->
ny; iy++) {
111 pert->
pt[iy][ix] = wave->
pt[ix][iy];
112 pert->
var[iy][ix] = wave->
var[ix][iy];
121 for (
int itrack = 0; itrack < pert->
ntrack; itrack++)
122 for (
int ixtrack = 0; ixtrack < pert->
nxtrack; ixtrack++) {
123 const double nesr =
PLANCK(230.0 + dt230, nu) -
PLANCK(230.0, nu);
125 pert->
bt[itrack][ixtrack] - pert->
pt[itrack][ixtrack];
126 const double nedt =
BRIGHT(
PLANCK(tbg, nu) + nesr, nu) - tbg;
127 pert->
var[itrack][ixtrack] -= gsl_pow_2(nedt);
131 for (
int itrack = 0; itrack < pert->
ntrack; itrack += 2 * dtrack)
132 for (
int ixtrack = dxtrack / 2; ixtrack < pert->
nxtrack;
133 ixtrack += 2 * dxtrack) {
137 int itrackmax = -999;
138 int ixtrackmax = -999;
141 for (
int itrack2 = itrack;
142 itrack2 < GSL_MIN(itrack + dtrack, pert->
ntrack); itrack2++)
143 for (
int ixtrack2 = ixtrack;
144 ixtrack2 < GSL_MIN(ixtrack + dxtrack, pert->
nxtrack);
146 if (pert->
var[itrack2][ixtrack2] >= varmax) {
147 varmax = pert->
var[itrack2][ixtrack2];
149 ixtrackmax = ixtrack2;
153 if (itrackmax >= 0 && ixtrackmax >= 0 && varmax >= varmin)
154 fprintf(out,
"%.2f %g %g %g\n",
155 pert->
time[itrackmax][ixtrackmax],
156 pert->
lon[itrackmax][ixtrackmax],
157 pert->
lat[itrackmax][ixtrackmax],
158 pert->
var[itrackmax][ixtrackmax]);
int main(int argc, char *argv[])
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 BRIGHT(rad, nu)
Compute brightness temperature.
#define ERRMSG(...)
Print error message and quit program.
#define ALLOC(ptr, type, n)
Allocate memory.
#define PLANCK(T, nu)
Compute Planck function.
void background_smooth(wave_t *wave, int npts_x, int npts_y)
Smooth background.
void background_poly(wave_t *wave, int dim_x, int dim_y)
Get background based on polynomial fits.
void variance(wave_t *wave, double dh)
Compute local variance.
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.
void gauss(wave_t *wave, double fwhm)
Apply Gaussian filter to perturbations...
AIRS Code Collection library declarations.
double var[PERT_NTRACK][PERT_NXTRACK]
Brightness temperature variance (4 or 15 micron) [K].
double pt[PERT_NTRACK][PERT_NXTRACK]
Brightness temperature perturbation (4 or 15 micron) [K].
double time[PERT_NTRACK][PERT_NXTRACK]
Time (seconds since 2000-01-01T00:00Z).
int ntrack
Number of along-track values.
int nxtrack
Number of across-track values.
double lon[PERT_NTRACK][PERT_NXTRACK]
Longitude [deg].
double bt[PERT_NTRACK][PERT_NXTRACK]
Brightness temperature (4 or 15 micron) [K].
double lat[PERT_NTRACK][PERT_NXTRACK]
Latitude [deg].
int nx
Number of across-track values.
int ny
Number of along-track values.
double var[WX][WY]
Variance [K].
double pt[WX][WY]
Perturbation [K].