Go to the documentation of this file.
44 if ((
f->kernel = (
char *) malloc(nx * ny *
sizeof (
char))) ==
NULL) {
45 printf(
"-E- %s %d: Unable to allocate workspace of %d bytes for filter kernel\n",
46 __FILE__, __LINE__, nx * ny);
50 for (
j = 0;
j < ny;
j++)
51 for (
i = 0;
i < nx;
i++)
52 f->kernel[
j * nx +
i] = 0;
58 for (
j = 0;
j < ny;
j++)
59 for (
i = 0;
i < nx;
i++)
60 f->kernel[
j * nx +
i] = 1;
62 f->minfill = nx * ny / 2 + 1;
64 f->minfill =
MIN(
MAX(
f->minfill, 1), nx * ny / 2 + 1);
66 }
else if (
type == 2) {
70 for (
j = 0;
j < ny;
j++)
71 for (
i = 0;
i < nx;
i++)
72 f->kernel[
j * nx +
i] = 1;
74 f->minfill = nx * ny / 2 + 1;
80 for (
j = 0;
j < ny;
j++) {
81 nnx = nx - 2 *
abs(ny / 2 -
j);
82 for (
i = nx / 2 - nnx / 2;
i <= nx / 2 + nnx / 2;
i++)
83 f->kernel[
j * nx +
i] = 1;
86 f->minfill = nx * ny / 4 + 1;
88 f->minfill =
MIN(
MAX(
f->minfill, 1), nx * ny / 4 + 1);
93 int32_t
band, int32_t nx, int32_t ny, int32_t minfill, int32_t
nbands) {
103 nx =
MAX(1, (nx / 2)*2 + 1);
104 ny =
MAX(1, (ny / 2)*2 + 1);
107 if (strstr(fname,
"dilate"))
109 else if (strstr(fname,
"stlight"))
111 else if (strstr(fname,
"clean"))
113 else if (strstr(fname,
"ltrmed"))
115 else if (strstr(fname,
"ltrmean"))
117 else if (strstr(fname,
"ltriqmean"))
119 else if (strstr(fname,
"ltmed"))
121 else if (strstr(fname,
"ltmean"))
123 else if (strstr(fname,
"btdetavg"))
125 else if (strstr(fname,
"test"))
127 else if (strstr(fname,
"epsmean"))
129 else if (strstr(fname,
"ltrreject"))
138 printf(
"-E- %s %d: bogus band number %d for filter %s\n",
139 __FILE__, __LINE__,
band, fname);
143 printf(
"Setting %d x %d dilation filter on %s mask\n",
144 nx, ny, l2_flag_lname[
band - 1]);
150 printf(
"-E- %s %d: bogus band number %d for filter %s\n",
151 __FILE__, __LINE__,
band, fname);
155 printf(
"Setting %d x %d straylight filter on %s mask\n",
156 nx, ny, l2_flag_lname[
band - 1]);
162 printf(
"-E- %s %d: bogus band number %d for filter %s\n",
163 __FILE__, __LINE__,
band, fname);
167 printf(
"Setting %d x %d cleaning filter on %s mask\n",
168 nx, ny, l2_flag_lname[
band - 1]);
173 printf(
"Setting %d x %d averaging filter on Lt(%d)\n",
175 if (band < 1 || band >
nbands) {
177 printf(
"-E- %s %d: bogus band number %d for filter %s\n",
178 __FILE__, __LINE__,
band, fname);
185 printf(
"Setting %d x %d averaging filter on Lt(%d)-Lr(%d)\n",
187 if (band < 1 || band >
nbands) {
189 printf(
"-E- %s %d: bogus band number %d for filter %s\n",
190 __FILE__, __LINE__,
band, fname);
197 printf(
"Setting %d x %d rejection filter on Lt(%d)-Lr(%d)\n",
199 if (band < 1 || band >
nbands) {
201 printf(
"-E- %s %d: bogus band number %d for filter %s\n",
202 __FILE__, __LINE__,
band, fname);
209 printf(
"Setting %d x %d interquartile averaging filter on Lt(%d)-Lr(%d)\n",
211 if (band < 1 || band >
nbands) {
213 printf(
"-E- %s %d: bogus band number %d for filter %s\n",
214 __FILE__, __LINE__,
band, fname);
221 printf(
"Setting %d x %d median filter on Lt(%d)\n",
223 if (band < 1 || band >
nbands) {
225 printf(
"-E- %s %d: bogus band number %d for filter %s\n",
226 __FILE__, __LINE__,
band, fname);
233 printf(
"Setting %d x %d median filter on Lt(%d)-Lr(%d)\n",
235 if (band < 1 || band >
nbands) {
237 printf(
"-E- %s %d: bogus band number %d for filter %s\n",
238 __FILE__, __LINE__,
band, fname);
245 printf(
"Setting %d x %d smoothing filter on epsilon(%d)\n",
247 if (band < 1 || band + 1 >
nbands) {
249 printf(
"-E- %s %d: bogus band number %d for filter %s\n",
250 __FILE__, __LINE__,
band, fname);
257 printf(
"Setting %d x %d filter on IR band %d for detector %d\n",
258 nx, ny,
band, minfill);
264 printf(
"Setting %d x %d test filter on %d\n",
269 printf(
"-E- %s %d: unknown filter function %s\n",
270 __FILE__, __LINE__, fname);
276 fctl->npix =
MAX(nx, fctl->npix);
277 fctl->nscan =
MAX(ny, fctl->nscan);
279 fctl->f[
i].func =
func;
280 fctl->f[
i].band =
band;
283 fctl->f[
i].minfill = minfill;
288 printf(
"\nFilter Kernel");
289 for (
j = 0;
j < fctl->f[
i].nx * fctl->f[
i].ny;
j++) {
290 if ((
j % fctl->f[
i].nx) == 0) printf(
"\n");
291 printf(
"%d ", fctl->f[
i].kernel[
j]);
293 printf(
"\n\nMinimum fill set to %d pixels\n", fctl->f[
i].minfill);
312 printf(
"Opening filter file %s\n",
file);
314 if ((fp = fopen(
file,
"r")) ==
NULL) {
315 printf(
"The specified filter file (%s) was not found.\n",
file);
319 while (fgets(
line, 80, fp)) {
320 if (
line[0] ==
'#' ||
line[0] ==
'\n')
324 if (!(p2 = strchr(
p1,
','))) {
325 printf(
"-E- %s %d: filter parsing error on %s. "
326 "Expecting comma-separated list.\n",
327 __FILE__, __LINE__,
file);
331 memset(fname,
'\0',
sizeof (fname));
333 for (
i = 0;
i < (p2 -
p1);
i++)
334 fname[
i] = tolower(fname[
i]);
337 if (!(p2 = strchr(
p1,
',')))
342 if (!(p2 = strchr(
p1,
',')))
347 if (!(p2 = strchr(
p1,
',')))
364 int32_t ip, ip1, ip2;
365 int32_t
is, is1, is2;
369 uint32_t flagID = pow(2
L, flag);
383 "-E- %s line %d: The specified flag, %d (%d), is not supported\n",
384 __FILE__, __LINE__, flag + 1, flagID);
385 fprintf(
stderr,
"for dilation filtering.\n");
409 for (ip = 0; ip <
l1rec->npix; ip++) {
422 for (
j = is1;
j <= is2;
j++)
for (
i = ip1;
i <= ip2;
i++) {
423 k = (
j - is1) * nx + (
i - ip1);
431 for (
j = is1;
j <= is2;
j++)
for (
i = ip1;
i <= ip2;
i++) {
432 k = (
j - is1) * nx + (
i - ip1);
450 int32_t ip, ip1, ip2;
451 int32_t
is, is1, is2;
453 int32_t ip_scan, filt_dist, ipmod;
456 uint32_t flagID = pow(2
L, flag);
470 "-E- %s line %d: The specified flag, %d (%d), is not supported\n",
471 __FILE__, __LINE__, flag + 1, flagID);
472 fprintf(
stderr,
"for dilation filtering.\n");
495 for (ip = 0; ip <
l1rec->npix; ip++) {
500 (
l1rec->scn_fmt == 0)) {
501 ip_scan =
l1rec->pixnum[ip];
502 int spix = ip_scan - ip;
522 for (
j = is1;
j <= is2;
j++)
for (
i = ip1;
i <= ip2;
i++) {
523 k = (
j - is1) * nx + (
i - ip1);
537 int32_t ip, ip1, ip2;
538 int32_t
is, is1, is2;
542 uint32_t flagID = pow(2
L, flag);
558 "-E- %s line %d: The specified flag, %d (%d), is not supported\n",
559 __FILE__, __LINE__, flag + 1, flagID);
560 fprintf(
stderr,
"for dilation filtering.\n");
584 for (ip = 0; ip <
l1rec->npix; ip++) {
597 for (
j = is1;
j <= is2;
j++)
for (
i = ip1;
i <= ip2;
i++) {
598 k = (
j - is1) * nx + (
i - ip1);
607 if (tot - cnt == 1) {
618 int32_t ip, ip1, ip2;
619 int32_t
is, is1, is2;
633 for (ip = 0; ip <
l1rec->npix; ip++) {
635 iib = ip *
l1rec->l1file->nbands + ib;
638 if (
l1rec->mask[ip] ||
l1rec->Lt[iib] == badval)
652 for (
i = ip1;
i <= ip2;
i++) {
653 for (
j = is1;
j <= is2;
j++) {
654 ii =
i *
l1rec->l1file->nbands + ib;
655 k = (
j - is1) * nx + (
i - ip1);
675 int32_t ip, ip1, ip2;
676 int32_t
is, is1, is2;
690 for (ip = 0; ip <
l1rec->npix; ip++) {
692 iib = ip *
l1rec->l1file->nbands + ib;
695 if (
l1rec->mask[ip] ||
l1rec->Lt[iib] == badval)
709 for (
i = ip1;
i <= ip2;
i++) {
710 for (
j = is1;
j <= is2;
j++) {
711 ii =
i *
l1rec->l1file->nbands + ib;
712 k = (
j - is1) * nx + (
i - ip1);
744 static fnode *medx =
NULL;
745 static fnode *mad =
NULL;
746 static int32_t len = 0;
750 int32_t ip, ip1, ip2;
751 int32_t
is, is1, is2;
765 if (medx ==
NULL || len < nx * ny) {
767 if (medx !=
NULL) free(medx);
768 if ((medx = (fnode *) malloc(len *
sizeof (fnode))) ==
NULL) {
769 printf(
"-E- %s %d: Unable to allocate workspace for median\n",
774 if (mad ==
NULL || len < nx * ny) {
776 if (mad !=
NULL) free(mad);
777 if ((mad = (fnode *) malloc(len *
sizeof (fnode))) ==
NULL) {
778 printf(
"-E- %s %d: Unable to allocate workspace for median absolute deviation\n",
787 for (ip = 0; ip <
l1rec->npix; ip++) {
789 iib = ip *
l1rec->l1file->nbands + ib;
792 if (
l1rec->mask[ip] ||
l1rec->Lt[iib] == badval)
805 for (
i = ip1;
i <= ip2;
i++) {
806 for (
j = is1;
j <= is2;
j++) {
807 ii =
i *
l1rec->l1file->nbands + ib;
808 k = (
j - is1) * nx + (
i - ip1);
817 if (cnt >= minfill && cnt >= 2) {
818 qsort(medx, cnt,
sizeof (fnode),
819 (
int (*)(
const void *,
const void *))
compfnode);
821 median = medx[cnt / 2].v;
824 for (
i = ip1;
i <= ip2;
i++) {
825 for (
j = is1;
j <= is2;
j++) {
826 ii =
i *
l1rec->l1file->nbands + ib;
827 k = (
j - is1) * nx + (
i - ip1);
830 mad[cnt].v =
fabs(
x);
837 qsort(mad, cnt,
sizeof (fnode),
838 (
int (*)(
const void *,
const void *))
compfnode);
840 madev = 1.4826 * mad[cnt / 2].v;
843 if (
fabs((
l1rec->Lt[iib] -
l1rec->Lr[iib] - median) / madev) >= 3) {
855 int32_t ip, ip1, ip2;
856 int32_t
is, is1, is2;
866 int ib2 =
l1rec->l1file->nbands - 1;
876 for (ip = 0; ip <
l1rec->npix; ip++) {
878 iib = ip *
l1rec->l1file->nbands;
881 if (
l1rec->mask[ip] ||
882 l1rec->Lt[iib + ib1] == badval ||
883 l1rec->Lt[iib + ib2] == badval)
898 for (
i = ip1;
i <= ip2;
i++) {
899 for (
j = is1;
j <= is2;
j++) {
900 k = (
j - is1) * nx + (
i - ip1);
903 ii =
i *
l1rec->l1file->nbands + ib1;
904 if (
l1que->r[
j].Lt[ii] != badval) {
913 ii =
i *
l1rec->l1file->nbands + ib2;
914 if (
l1que->r[
j].Lt[ii] != badval) {
929 if (
i == ip &&
j ==
is) {
936 if (cnt >= minfill) {
937 ii = ip *
l1rec->l1file->nbands + ib1;
940 if (x1 > 0 && x2 > 0) {
959 int32_t detnum =
l1rec->detnum;
960 int32_t scanum =
l1rec->iscan;
961 int32_t ip, ip1, ip2;
962 int32_t
is, is1, is2;
969 if (detnum !=
id)
return;
977 if (detnum == 0) is1 =
is + 1;
978 if (detnum == ndet - 1) is2 =
is - 1;
980 printf(
"%d %d %d %d\n", ib,
id, is1, is2);
985 for (ip = 0; ip <
l1rec->npix; ip++) {
999 for (
i = ip1;
i <= ip2;
i++) {
1000 for (
j = is1;
j <= is2;
j++) {
1001 if (
j == scanum)
continue;
1003 k = (
j - is1) * nx + (
i - ip1);
1011 l1rec->Bt[ipb] =
x / cnt;
1022 static float *
x =
NULL;
1023 static int32_t len = 0;
1027 int32_t ip, ip1, ip2;
1028 int32_t
is, is1, is2;
1034 if (
x ==
NULL || len < nx * ny) {
1037 if ((
x = (
float *) malloc(len *
sizeof (
float))) ==
NULL) {
1038 printf(
"-E- %s %d: Unable to allocate workspace for median\n",
1039 __FILE__, __LINE__);
1052 for (ip = 0; ip <
l1rec->npix; ip++) {
1054 iib = ip *
l1rec->l1file->nbands + ib;
1057 if (
l1rec->mask[ip] ||
l1rec->Lt[iib] == badval)
1070 for (
i = ip1;
i <= ip2;
i++) {
1071 for (
j = is1;
j <= is2;
j++) {
1072 ii =
i *
l1rec->l1file->nbands + ib;
1073 k = (
j - is1) * nx + (
i - ip1);
1080 if (cnt >= minfill) {
1081 qsort(
x, cnt,
sizeof (
float),
1082 (
int (*)(
const void *,
const void *))
compfloat);
1083 l1rec->Lt[iib] =
x[cnt / 2];
1093 static fnode *
x =
NULL;
1094 static int32_t len = 0;
1098 int32_t ip, ip1, ip2;
1099 int32_t
is, is1, is2;
1105 if (
x ==
NULL || len < nx * ny) {
1108 if ((
x = (fnode *) malloc(len *
sizeof (fnode))) ==
NULL) {
1109 printf(
"-E- %s %d: Unable to allocate workspace for median\n",
1110 __FILE__, __LINE__);
1123 for (ip = 0; ip <
l1rec->npix; ip++) {
1125 iib = ip *
l1rec->l1file->nbands + ib;
1128 if (
l1rec->mask[ip] ||
l1rec->Lt[iib] == badval)
1139 for (
i = ip1;
i <= ip2;
i++) {
1140 for (
j = is1;
j <= is2;
j++) {
1141 ii =
i *
l1rec->l1file->nbands + ib;
1142 k = (
j - is1) * nx + (
i - ip1);
1151 if (cnt >= minfill) {
1152 qsort(
x, cnt,
sizeof (fnode),
1153 (
int (*)(
const void *,
const void *))
compfnode);
1166 static fnode *
x =
NULL;
1167 static int32_t len = 0;
1171 int32_t ip, ip1, ip2;
1172 int32_t
is, is1, is2;
1179 if (
x ==
NULL || len < nx * ny) {
1182 if ((
x = (fnode *) malloc(len *
sizeof (fnode))) ==
NULL) {
1183 printf(
"-E- %s %d: Unable to allocate workspace for median\n",
1184 __FILE__, __LINE__);
1197 for (ip = 0; ip <
l1rec->npix; ip++) {
1199 iib = ip *
l1rec->l1file->nbands + ib;
1202 if (
l1rec->mask[ip] ||
l1rec->Lt[iib] == badval)
1213 for (
i = ip1;
i <= ip2;
i++) {
1214 for (
j = is1;
j <= is2;
j++) {
1215 ii =
i *
l1rec->l1file->nbands + ib;
1216 k = (
j - is1) * nx + (
i - ip1);
1225 if (cnt >= minfill) {
1226 qsort(
x, cnt,
sizeof (fnode),
1227 (
int (*)(
const void *,
const void *))
compfnode);
1232 for (
i = cnt / 4;
i < 3 * cnt / 4;
i++) {
1249 static fnode *x1 =
NULL;
1250 static fnode *x2 =
NULL;
1251 static int32_t len = 0;
1255 int32_t ip, ip1, ip2;
1256 int32_t
is, is1, is2;
1264 int ib2 =
l1rec->l1file->nbands - 1;
1267 if (x1 ==
NULL || len < nx * ny) {
1269 if (x1 !=
NULL) free(x1);
1270 if ((x1 = (fnode *) malloc(len *
sizeof (fnode))) ==
NULL) {
1271 printf(
"-E- %s %d: Unable to allocate workspace for median\n",
1272 __FILE__, __LINE__);
1276 if (x2 ==
NULL || len < nx * ny) {
1278 if (x2 !=
NULL) free(x2);
1279 if ((x2 = (fnode *) malloc(len *
sizeof (fnode))) ==
NULL) {
1280 printf(
"-E- %s %d: Unable to allocate workspace for median\n",
1281 __FILE__, __LINE__);
1294 for (ip = 0; ip <
l1rec->npix; ip++) {
1296 iib = ip *
l1rec->l1file->nbands;
1299 if (
l1rec->mask[ip] ||
1300 l1rec->Lt[iib + ib1] <= 0.0 ||
1301 l1rec->Lt[iib + ib2] <= 0.0)
1314 for (
i = ip1;
i <= ip2;
i++) {
1315 for (
j = is1;
j <= is2;
j++) {
1317 k = (
j - is1) * nx + (
i - ip1);
1320 l1que->r[
j].Lt[
i *
l1rec->l1file->nbands + ib1] > 0.0 &&
1321 l1que->r[
j].Lt[
i *
l1rec->l1file->nbands + ib2] > 0.0) {
1324 ii =
i *
l1rec->l1file->nbands + ib1;
1325 La1 = (
l1que->r[
j].Lt[ii]
1333 ii =
i *
l1rec->l1file->nbands + ib2;
1334 La2 = (
l1que->r[
j].Lt[ii]
1342 if (
i == ip &&
j ==
is)
1358 if (cnt >= minfill) {
1360 qsort(x1, cnt,
sizeof (fnode),
1361 (
int (*)(
const void *,
const void *))
compfnode);
1362 qsort(x2, cnt,
sizeof (fnode),
1363 (
int (*)(
const void *,
const void *))
compfnode);
1369 for (
i = cnt / 4;
i <= 3 * cnt / 4;
i++) {
1380 if (La1 > 0.0 && La2 > 0.0 && La1 / La2 < 2.0) {
1381 ii = ip *
l1rec->l1file->nbands + ib1;
1386 *
l1rec->tg_sen[ii];
1398 int32_t
func,
band, nx, ny, minfill;
1401 for (
i = 0;
i < fctl->nfilt;
i++) {
1403 func = fctl->f[
i].func;
1404 band = fctl->f[
i].band;
1407 minfill = fctl->f[
i].minfill;
1436 printf(
"-E- %s %d: unknown filter function %d\n",
1437 __FILE__, __LINE__,
func);
subroutine kernel(is, mu, rm, xpl, psl, bp)
void fEPSiqmean(l1qstr *l1que, int32_t nx, int32_t ny, int ib1, int32_t minfill, char kernel[], l1str *l1rec)
int rdfilter(char *file, fctlstr *fctl, int32_t nbands)
PARAM_TYPE_NONE Default value No parameter is buried in the product name name_prefix is case insensitive string compared to the product name PARAM_TYPE_VIS_WAVE The visible wavelength bands from the sensor are buried in the product name The product name is compared by appending and name_suffix ie aph_412_giop where prod_ix will be set to PARAM_TYPE_IR_WAVE same search method as PARAM_TYPE_VIS_WAVE except only wavelength above are looped through but prod_ix is still based ie aph_2_giop for the second band
void fdilate(l1qstr *l1que, int32_t nx, int32_t ny, int flag, char kernel[], l1str *l1rec)
void viirs_pxcvt_agdel(int, int, int *)
void fLTRiqmean(l1qstr *l1que, int32_t nx, int32_t ny, int ib, int32_t minfill, char kernel[], l1str *l1rec)
this program makes no use of any feature of the SDP Toolkit that could generate such a then geolocation is calculated at that and then aggregated up to Resolved feature request Bug by adding three new int8 SDSs for each high resolution offsets between the high resolution geolocation and a bi linear interpolation extrapolation of the positions This can be used to reconstruct the high resolution geolocation Resolved Bug by delaying cumulation of gflags until after validation of derived products Resolved Bug by setting Latitude and Longitude to the correct fill resolving to support Near Real Time because they may be unnecessary if use of entrained ephemeris and attitude data is turned resolving bug report Corrected to filter out Aqua attitude records with missing status helping resolve bug MOD_PR03 will still correctly write scan and pixel data that does not depend upon the start thereby resolving MODur00108 Changed header guard macro names to avoid reserved name resolving MODur00104 Maneuver list file for Terra satellite was updated to include data from Jecue DuChateu Maneuver list files for both Terra and Aqua were updated to include two maneuvers from recent IOT weekly reports The limits for Z component of angular momentum was and to set the fourth GEO scan quality flag for a scan depending upon whether or not it occurred during one of them Added _FillValue attributes to many and changed the fill value for the sector start times from resolving MODur00072 Writes boundingcoordinate metadata to L1A archived metadata For PERCENT *ECS change to treat rather resolving GSFcd01518 Added a LogReport Changed to create the Average Temperatures vdata even if the number of scans is
void fEPSmean(l1qstr *l1que, int32_t nx, int32_t ny, int ib1, int32_t minfill, char kernel[], l1str *l1rec)
no change in intended resolving MODur00064 Corrected handling of bad ephemeris attitude resolving resolving GSFcd00179 Corrected handling of fill values for[Sensor|Solar][Zenith|Azimuth] resolving MODxl01751 Changed to validate LUT version against a value retrieved from the resolving MODxl02056 Changed to calculate Solar Diffuser angles without adjustment for estimated post launch changes in the MODIS orientation relative to incidentally resolving defects MODxl01766 Also resolves MODxl01947 Changed to ignore fill values in SCI_ABNORM and SCI_STATE rather than treating them as resolving MODxl01780 Changed to use spacecraft ancillary data to recognise when the mirror encoder data is being set by side A or side B and to change calculations accordingly This removes the need for seperate LUTs for Side A and Side B data it makes the new LUTs incompatible with older versions of the and vice versa Also resolves MODxl01685 A more robust GRing algorithm is being which will create a non default GRing anytime there s even a single geolocated pixel in a granule Removed obsolete messages from seed file
int compfloat(float *x, float *y)
double precision function f(R1)
int compfnode(fnode *x, fnode *y)
void fLTRmed(l1qstr *l1que, int32_t nx, int32_t ny, int ib, int32_t minfill, char kernel[], l1str *l1rec)
void fctl_init(fctlstr *fctl)
void fstlight(l1qstr *l1que, int32_t nx, int32_t ny, int32_t dscan, int flag, char kernel[], l1str *l1rec)
subroutine func(x, conec, n, bconecno, bn, units, u, inno, i, outno, o, Input, Targ, p, sqerr)
void fBTdetavg(l1qstr *l1que, int32_t nx, int32_t ny, int ib, int32_t id, char kernel[], l1str *l1rec)
void filter(fctlstr *fctl, l1qstr *l1que, l1str *l1rec, int32_t dscan)
void fLTmed(l1qstr *l1que, int32_t nx, int32_t ny, int ib, int32_t minfill, char kernel[], l1str *l1rec)
void fclean(l1qstr *l1que, int32_t nx, int32_t ny, int flag, char kernel[], l1str *l1rec)
void fLTmean(l1qstr *l1que, int32_t nx, int32_t ny, int ib, int32_t minfill, char kernel[], l1str *l1rec)
PARAM_TYPE_NONE Default value No parameter is buried in the product name name_prefix is case insensitive string compared to the product name PARAM_TYPE_VIS_WAVE The visible wavelength bands from the sensor are buried in the product name The product name is compared by appending and name_suffix ie aph_412_giop where prod_ix will be set to PARAM_TYPE_IR_WAVE same search method as PARAM_TYPE_VIS_WAVE except only wavelength above are looped through but prod_ix is still based ie aph_2_giop for the second and prod_ix set to PARAM_TYPE_INT name_prefix is compared with the beginning of the product name If name_suffix is not empty the it must match the end of the product name The characters right after the prefix are read as an integer and prod_ix is set to that number strncpy(l2prod->name_prefix, "myprod", UNITLEN)
int fctl_set(fctlstr *fctl, int32_t npix, char *fname, int32_t band, int32_t nx, int32_t ny, int32_t minfill, int32_t nbands)
void fLTRreject(l1qstr *l1que, int32_t nx, int32_t ny, int ib, int32_t minfill, char kernel[], l1str *l1rec)
void fLTRmean(l1qstr *l1que, int32_t nx, int32_t ny, int ib, int32_t minfill, char kernel[], l1str *l1rec)
void get_kernel(filstr *f)