25  const int ai_low_nu1 = 341, ai_low_nu2 = 499, ai_high_nu1 =
 
   26    40, ai_high_nu2 = 698, ai_old_nu1 = 295, ai_old_nu2 = 499, ci_nu =
 
   27    36, si_low_nu1 = 326, si_low_nu2 = 260, si_high_nu1 = 328, si_high_nu2 =
 
   28    282, si_old_nu1 = 318, si_old_nu2 = 260, si_oper_nu1 = 359, si_oper_nu2 =
 
   33    ERRMSG(
"Give parameters: <ctl> <out.tab> <l1b_file1> [<l1b_file2> ...]");
 
   36  const int apo = (int) 
scan_ctl(argc, argv, 
"APO", -1, 
"0", NULL);
 
   39  printf(
"Write volcanic emission data: %s\n", argv[2]);
 
   40  if (!(out = fopen(argv[2], 
"w")))
 
   41    ERRMSG(
"Cannot create file!");
 
   44  for (
int iarg = 3; iarg < argc; iarg++) {
 
   54              "# $2  = footprint longitude [deg]\n" 
   55              "# $3  = footprint latitude [deg]\n" 
   56              "# $4  = satellite altitude [km]\n" 
   57              "# $5  = satellite longitude [deg]\n" 
   58              "# $6  = satellite latitude [deg]\n");
 
   60              "# $7  = cloud index, BT(%.4f/cm) [K]\n" 
   61              "# $8  = cloud index error [K]\n" 
   62              "# $9  = ash index (low wavenumbers)," 
   63              " BT(%.4f/cm) - BT(%.4f/cm) [K]\n" 
   64              "# $10 = ash index (low wavenumbers) error [K]\n" 
   65              "# $11 = ash index (high wavenumbers)," 
   66              " BT(%.4f/cm) - BT(%.4f/cm) [K]\n" 
   67              "# $12 = ash index (high wavenumbers) error [K]\n" 
   68              "# $13 = ash index (Hoffmann et al., 2014)," 
   69              " BT(%.4f/cm) - BT(%.4f/cm) [K]\n" 
   70              "# $14 = ash index (Hoffmann et al., 2014) error [K]\n",
 
   76              "# $15 = SO2 index (low concentrations)," 
   77              " BT(%.4f/cm) - BT(%.4f/cm) [K]\n" 
   78              "# $16 = SO2 index (low concentrations) error [K]\n" 
   79              "# $17 = SO2 index (high concentrations)," 
   80              " BT(%.4f/cm) - BT(%.4f/cm) [K]\n" 
   81              "# $18 = SO2 index (high concentrations) error [K]\n" 
   82              "# $19 = SO2 index (operational)," 
   83              " BT(%.4f/cm) - BT(%.4f/cm) [K]\n" 
   84              "# $20 = SO2 index (operational) error [K]\n" 
   85              "# $21 = SO2 index (Hoffmann et al., 2014)," 
   86              " BT(%.4f/cm) - BT(%.4f/cm) [K]\n" 
   87              "# $22 = SO2 index (Hoffmann et al., 2014) error [K]\n\n",
 
   95    for (
int track = 0; track < 
L1_NTRACK; track++)
 
   96      for (
int xtrack = 0; xtrack < 
L1_NXTRACK; xtrack++)
 
   97        for (
int ifov = 0; ifov < 
L1_NFOV; ifov++) {
 
  100          double ci = 
BRIGHT(l1.
rad_mw[track][xtrack][ifov][ci_nu] * 0.001,
 
  104                      l1.
nedn_mw[ifov][ci_nu] * 0.001,
 
  110                   0.001, l1.
nu_lw[ai_low_nu1]);
 
  113                   0.001, l1.
nu_lw[ai_low_nu2]);
 
  114          double ai_low = ai_low_bt1 - ai_low_bt2;
 
  118                  (l1.
rad_lw[track][xtrack][ifov][ai_low_nu1] * 0.001,
 
  119                   l1.
nedn_lw[ifov][ai_low_nu1] * 0.001,
 
  120                   l1.
nu_lw[ai_low_nu1]))
 
  123                           (l1.
rad_lw[track][xtrack][ifov][ai_low_nu2] *
 
  124                            0.001, l1.
nedn_lw[ifov][ai_low_nu2] * 0.001,
 
  125                            l1.
nu_lw[ai_low_nu2])));
 
  130                   0.001, l1.
nu_mw[ai_high_nu1]);
 
  133                   0.001, l1.
nu_lw[ai_high_nu2]);
 
  134          double ai_high = ai_high_bt1 - ai_high_bt2;
 
  138                  (l1.
rad_mw[track][xtrack][ifov][ai_high_nu1] * 0.001,
 
  139                   l1.
nedn_mw[ifov][ai_high_nu1] * 0.001,
 
  140                   l1.
nu_mw[ai_high_nu1]))
 
  143                           (l1.
rad_lw[track][xtrack][ifov][ai_high_nu2] *
 
  144                            0.001, l1.
nedn_lw[ifov][ai_high_nu2] * 0.001,
 
  145                            l1.
nu_lw[ai_high_nu1])));
 
  150                   0.001, l1.
nu_lw[ai_old_nu1]);
 
  153                   0.001, l1.
nu_lw[ai_old_nu2]);
 
  154          double ai_old = ai_old_bt1 - ai_old_bt2;
 
  158                  (l1.
rad_lw[track][xtrack][ifov][ai_old_nu1] * 0.001,
 
  159                   l1.
nedn_lw[ifov][ai_old_nu1] * 0.001,
 
  160                   l1.
nu_lw[ai_old_nu1]))
 
  163                           (l1.
rad_lw[track][xtrack][ifov][ai_old_nu2] *
 
  164                            0.001, l1.
nedn_lw[ifov][ai_old_nu2] * 0.001,
 
  165                            l1.
nu_lw[ai_old_nu2])));
 
  170                   0.001, l1.
nu_mw[si_low_nu1]);
 
  173                   0.001, l1.
nu_mw[si_low_nu2]);
 
  174          double si_low = si_low_bt1 - si_low_bt2;
 
  178                  (l1.
rad_mw[track][xtrack][ifov][si_low_nu1] * 0.001,
 
  179                   l1.
nedn_mw[ifov][si_low_nu1] * 0.001,
 
  180                   l1.
nu_mw[si_low_nu1]))
 
  183                           (l1.
rad_mw[track][xtrack][ifov][si_low_nu2] *
 
  184                            0.001, l1.
nedn_mw[ifov][si_low_nu2] * 0.001,
 
  185                            l1.
nu_mw[si_low_nu2])));
 
  190                   0.001, l1.
nu_mw[si_high_nu1]);
 
  193                   0.001, l1.
nu_mw[si_high_nu2]);
 
  194          double si_high = si_high_bt1 - si_high_bt2;
 
  198                  (l1.
rad_mw[track][xtrack][ifov][si_high_nu1] * 0.001,
 
  199                   l1.
nedn_mw[ifov][si_high_nu1] * 0.001,
 
  200                   l1.
nu_mw[si_high_nu1]))
 
  203                           (l1.
rad_mw[track][xtrack][ifov][si_high_nu2] *
 
  204                            0.001, l1.
nedn_mw[ifov][si_high_nu2] * 0.001,
 
  205                            l1.
nu_mw[si_high_nu2])));
 
  210                   0.001, l1.
nu_mw[si_oper_nu1]);
 
  213                   0.001, l1.
nu_mw[si_oper_nu2]);
 
  214          double si_oper = si_oper_bt1 - si_oper_bt2;
 
  218                  (l1.
rad_mw[track][xtrack][ifov][si_oper_nu1] * 0.001,
 
  219                   l1.
nedn_mw[ifov][si_oper_nu1] * 0.001,
 
  220                   l1.
nu_mw[si_oper_nu1]))
 
  223                           (l1.
rad_mw[track][xtrack][ifov][si_oper_nu2] *
 
  224                            0.001, l1.
nedn_mw[ifov][si_oper_nu2] * 0.001,
 
  225                            l1.
nu_mw[si_oper_nu2])));
 
  230                   0.001, l1.
nu_mw[si_old_nu1]);
 
  233                   0.001, l1.
nu_mw[si_old_nu2]);
 
  234          double si_old = si_old_bt1 - si_old_bt2;
 
  238                  (l1.
rad_mw[track][xtrack][ifov][si_old_nu1] * 0.001,
 
  239                   l1.
nedn_mw[ifov][si_old_nu1] * 0.001,
 
  240                   l1.
nu_mw[si_old_nu1]))
 
  243                           (l1.
rad_mw[track][xtrack][ifov][si_old_nu2] *
 
  244                            0.001, l1.
nedn_mw[ifov][si_old_nu2] * 0.001,
 
  245                            l1.
nu_mw[si_old_nu2])));
 
  249                  "%.2f %.4f %.4f %.3f %.4f %.4f %.2f %.2f %.2f %.2f %.2f %.2f " 
  250                  "%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f\n",
 
  251                  l1.
time[track][xtrack] - 220838400,
 
  252                  l1.
lon[track][xtrack][ifov],
 
  253                  l1.
lat[track][xtrack][ifov],
 
  257                  ci, ci_err, ai_low, ai_low_err, ai_high, ai_high_err,
 
  258                  ai_old, ai_old_err, si_low, si_low_err, si_high,
 
  259                  si_high_err, si_oper, si_oper_err, si_old, si_old_err);
 
double scan_ctl(int argc, char *argv[], const char *varname, const int arridx, const char *defvalue, char *value)
Search control parameter file for variable entry.
 
#define BRIGHT(rad, nu)
Compute brightness temperature.
 
#define ERRMSG(...)
Print error message and quit program.
 
int read_cris_l1(char *filename, cris_l1_t *l1, int apo)
Read CrIS Level-1 data.
 
#define L1_NXTRACK
Across-track size of CrIS radiance granule.
 
#define L1_NTRACK
Along-track size of CrIS radiance granule.
 
#define L1_NFOV
Number of field of views of CrIS radiance granule.
 
double sat_z[L1_NTRACK]
Satellite altitude [km].
 
float rad_mw[L1_NTRACK][L1_NXTRACK][L1_NFOV][L1_NCHAN_MW]
Midwave radiance [W/(m^2 sr cm^-1)].
 
float nedn_mw[L1_NFOV][L1_NCHAN_MW]
Midwave radiance noise [W/(m^2 sr cm^-1)].
 
double nu_mw[L1_NCHAN_MW]
Midwave channel frequencies [cm^-1].
 
float nedn_lw[L1_NFOV][L1_NCHAN_LW]
Longwave radiance noise [W/(m^2 sr cm^-1)].
 
double lon[L1_NTRACK][L1_NXTRACK][L1_NFOV]
Footprint longitude [deg].
 
float rad_lw[L1_NTRACK][L1_NXTRACK][L1_NFOV][L1_NCHAN_LW]
Longwave radiance [W/(m^2 sr cm^-1)].
 
double sat_lat[L1_NTRACK]
Satellite latitude [deg].
 
double time[L1_NTRACK][L1_NXTRACK]
Time (seconds since 2000-01-01T00:00Z).
 
double sat_lon[L1_NTRACK]
Satellite longitude [deg].
 
double nu_lw[L1_NCHAN_LW]
Longwave channel frequencies [cm^-1].
 
double lat[L1_NTRACK][L1_NXTRACK][L1_NFOV]
Footprint latitude [deg].
 
int main(int argc, char *argv[])
 
double get_noise(double rad, double nesr, double nu)