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++) {
502 (
l1rec->scn_fmt == 0)) {
503 ip_scan =
l1rec->pixnum[ip];
504 int spix = ip_scan - ip;
524 for (
j = is1;
j <= is2;
j++)
for (
i = ip1;
i <= ip2;
i++) {
525 k = (
j - is1) * nx + (
i - ip1);
539 int32_t ip, ip1, ip2;
540 int32_t
is, is1, is2;
544 uint32_t flagID = pow(2
L, flag);
560 "-E- %s line %d: The specified flag, %d (%d), is not supported\n",
561 __FILE__, __LINE__, flag + 1, flagID);
562 fprintf(
stderr,
"for dilation filtering.\n");
586 for (ip = 0; ip <
l1rec->npix; ip++) {
599 for (
j = is1;
j <= is2;
j++)
for (
i = ip1;
i <= ip2;
i++) {
600 k = (
j - is1) * nx + (
i - ip1);
609 if (tot - cnt == 1) {
620 int32_t ip, ip1, ip2;
621 int32_t
is, is1, is2;
635 for (ip = 0; ip <
l1rec->npix; ip++) {
637 iib = ip *
l1rec->l1file->nbands + ib;
640 if (
l1rec->mask[ip] ||
l1rec->Lt[iib] == badval)
654 for (
i = ip1;
i <= ip2;
i++) {
655 for (
j = is1;
j <= is2;
j++) {
656 ii =
i *
l1rec->l1file->nbands + ib;
657 k = (
j - is1) * nx + (
i - ip1);
677 int32_t ip, ip1, ip2;
678 int32_t
is, is1, is2;
692 for (ip = 0; ip <
l1rec->npix; ip++) {
694 iib = ip *
l1rec->l1file->nbands + ib;
697 if (
l1rec->mask[ip] ||
l1rec->Lt[iib] == badval)
711 for (
i = ip1;
i <= ip2;
i++) {
712 for (
j = is1;
j <= is2;
j++) {
713 ii =
i *
l1rec->l1file->nbands + ib;
714 k = (
j - is1) * nx + (
i - ip1);
746 static fnode *medx =
NULL;
747 static fnode *mad =
NULL;
748 static int32_t len = 0;
752 int32_t ip, ip1, ip2;
753 int32_t
is, is1, is2;
767 if (medx ==
NULL || len < nx * ny) {
769 if (medx !=
NULL) free(medx);
770 if ((medx = (fnode *) malloc(len *
sizeof (fnode))) ==
NULL) {
771 printf(
"-E- %s %d: Unable to allocate workspace for median\n",
776 if (mad ==
NULL || len < nx * ny) {
778 if (mad !=
NULL) free(mad);
779 if ((mad = (fnode *) malloc(len *
sizeof (fnode))) ==
NULL) {
780 printf(
"-E- %s %d: Unable to allocate workspace for median absolute deviation\n",
789 for (ip = 0; ip <
l1rec->npix; ip++) {
791 iib = ip *
l1rec->l1file->nbands + ib;
794 if (
l1rec->mask[ip] ||
l1rec->Lt[iib] == badval)
807 for (
i = ip1;
i <= ip2;
i++) {
808 for (
j = is1;
j <= is2;
j++) {
809 ii =
i *
l1rec->l1file->nbands + ib;
810 k = (
j - is1) * nx + (
i - ip1);
819 if (cnt >= minfill && cnt >= 2) {
820 qsort(medx, cnt,
sizeof (fnode),
821 (
int (*)(
const void *,
const void *))
compfnode);
823 median = medx[cnt / 2].v;
826 for (
i = ip1;
i <= ip2;
i++) {
827 for (
j = is1;
j <= is2;
j++) {
828 ii =
i *
l1rec->l1file->nbands + ib;
829 k = (
j - is1) * nx + (
i - ip1);
832 mad[cnt].v =
fabs(
x);
839 qsort(mad, cnt,
sizeof (fnode),
840 (
int (*)(
const void *,
const void *))
compfnode);
842 madev = 1.4826 * mad[cnt / 2].v;
845 if (
fabs((
l1rec->Lt[iib] -
l1rec->Lr[iib] - median) / madev) >= 3) {
857 int32_t ip, ip1, ip2;
858 int32_t
is, is1, is2;
868 int ib2 =
l1rec->l1file->nbands - 1;
878 for (ip = 0; ip <
l1rec->npix; ip++) {
880 iib = ip *
l1rec->l1file->nbands;
883 if (
l1rec->mask[ip] ||
884 l1rec->Lt[iib + ib1] == badval ||
885 l1rec->Lt[iib + ib2] == badval)
900 for (
i = ip1;
i <= ip2;
i++) {
901 for (
j = is1;
j <= is2;
j++) {
902 k = (
j - is1) * nx + (
i - ip1);
905 ii =
i *
l1rec->l1file->nbands + ib1;
906 if (
l1que->r[
j].Lt[ii] != badval) {
915 ii =
i *
l1rec->l1file->nbands + ib2;
916 if (
l1que->r[
j].Lt[ii] != badval) {
931 if (
i == ip &&
j ==
is) {
938 if (cnt >= minfill) {
939 ii = ip *
l1rec->l1file->nbands + ib1;
942 if (x1 > 0 && x2 > 0) {
961 int32_t detnum =
l1rec->detnum;
962 int32_t scanum =
l1rec->iscan;
963 int32_t ip, ip1, ip2;
964 int32_t
is, is1, is2;
971 if (detnum !=
id)
return;
979 if (detnum == 0) is1 =
is + 1;
980 if (detnum == ndet - 1) is2 =
is - 1;
982 printf(
"%d %d %d %d\n", ib,
id, is1, is2);
987 for (ip = 0; ip <
l1rec->npix; ip++) {
1001 for (
i = ip1;
i <= ip2;
i++) {
1002 for (
j = is1;
j <= is2;
j++) {
1003 if (
j == scanum)
continue;
1005 k = (
j - is1) * nx + (
i - ip1);
1013 l1rec->Bt[ipb] =
x / cnt;
1024 static float *
x =
NULL;
1025 static int32_t len = 0;
1029 int32_t ip, ip1, ip2;
1030 int32_t
is, is1, is2;
1036 if (
x ==
NULL || len < nx * ny) {
1039 if ((
x = (
float *) malloc(len *
sizeof (
float))) ==
NULL) {
1040 printf(
"-E- %s %d: Unable to allocate workspace for median\n",
1041 __FILE__, __LINE__);
1054 for (ip = 0; ip <
l1rec->npix; ip++) {
1056 iib = ip *
l1rec->l1file->nbands + ib;
1059 if (
l1rec->mask[ip] ||
l1rec->Lt[iib] == badval)
1072 for (
i = ip1;
i <= ip2;
i++) {
1073 for (
j = is1;
j <= is2;
j++) {
1074 ii =
i *
l1rec->l1file->nbands + ib;
1075 k = (
j - is1) * nx + (
i - ip1);
1082 if (cnt >= minfill) {
1083 qsort(
x, cnt,
sizeof (
float),
1084 (
int (*)(
const void *,
const void *))
compfloat);
1085 l1rec->Lt[iib] =
x[cnt / 2];
1095 static fnode *
x =
NULL;
1096 static int32_t len = 0;
1100 int32_t ip, ip1, ip2;
1101 int32_t
is, is1, is2;
1107 if (
x ==
NULL || len < nx * ny) {
1110 if ((
x = (fnode *) malloc(len *
sizeof (fnode))) ==
NULL) {
1111 printf(
"-E- %s %d: Unable to allocate workspace for median\n",
1112 __FILE__, __LINE__);
1125 for (ip = 0; ip <
l1rec->npix; ip++) {
1127 iib = ip *
l1rec->l1file->nbands + ib;
1130 if (
l1rec->mask[ip] ||
l1rec->Lt[iib] == badval)
1141 for (
i = ip1;
i <= ip2;
i++) {
1142 for (
j = is1;
j <= is2;
j++) {
1143 ii =
i *
l1rec->l1file->nbands + ib;
1144 k = (
j - is1) * nx + (
i - ip1);
1153 if (cnt >= minfill) {
1154 qsort(
x, cnt,
sizeof (fnode),
1155 (
int (*)(
const void *,
const void *))
compfnode);
1168 static fnode *
x =
NULL;
1169 static int32_t len = 0;
1173 int32_t ip, ip1, ip2;
1174 int32_t
is, is1, is2;
1181 if (
x ==
NULL || len < nx * ny) {
1184 if ((
x = (fnode *) malloc(len *
sizeof (fnode))) ==
NULL) {
1185 printf(
"-E- %s %d: Unable to allocate workspace for median\n",
1186 __FILE__, __LINE__);
1199 for (ip = 0; ip <
l1rec->npix; ip++) {
1201 iib = ip *
l1rec->l1file->nbands + ib;
1204 if (
l1rec->mask[ip] ||
l1rec->Lt[iib] == badval)
1215 for (
i = ip1;
i <= ip2;
i++) {
1216 for (
j = is1;
j <= is2;
j++) {
1217 ii =
i *
l1rec->l1file->nbands + ib;
1218 k = (
j - is1) * nx + (
i - ip1);
1227 if (cnt >= minfill) {
1228 qsort(
x, cnt,
sizeof (fnode),
1229 (
int (*)(
const void *,
const void *))
compfnode);
1234 for (
i = cnt / 4;
i < 3 * cnt / 4;
i++) {
1251 static fnode *x1 =
NULL;
1252 static fnode *x2 =
NULL;
1253 static int32_t len = 0;
1257 int32_t ip, ip1, ip2;
1258 int32_t
is, is1, is2;
1266 int ib2 =
l1rec->l1file->nbands - 1;
1269 if (x1 ==
NULL || len < nx * ny) {
1271 if (x1 !=
NULL) free(x1);
1272 if ((x1 = (fnode *) malloc(len *
sizeof (fnode))) ==
NULL) {
1273 printf(
"-E- %s %d: Unable to allocate workspace for median\n",
1274 __FILE__, __LINE__);
1278 if (x2 ==
NULL || len < nx * ny) {
1280 if (x2 !=
NULL) free(x2);
1281 if ((x2 = (fnode *) malloc(len *
sizeof (fnode))) ==
NULL) {
1282 printf(
"-E- %s %d: Unable to allocate workspace for median\n",
1283 __FILE__, __LINE__);
1296 for (ip = 0; ip <
l1rec->npix; ip++) {
1298 iib = ip *
l1rec->l1file->nbands;
1301 if (
l1rec->mask[ip] ||
1302 l1rec->Lt[iib + ib1] <= 0.0 ||
1303 l1rec->Lt[iib + ib2] <= 0.0)
1316 for (
i = ip1;
i <= ip2;
i++) {
1317 for (
j = is1;
j <= is2;
j++) {
1319 k = (
j - is1) * nx + (
i - ip1);
1322 l1que->r[
j].Lt[
i *
l1rec->l1file->nbands + ib1] > 0.0 &&
1323 l1que->r[
j].Lt[
i *
l1rec->l1file->nbands + ib2] > 0.0) {
1326 ii =
i *
l1rec->l1file->nbands + ib1;
1327 La1 = (
l1que->r[
j].Lt[ii]
1335 ii =
i *
l1rec->l1file->nbands + ib2;
1336 La2 = (
l1que->r[
j].Lt[ii]
1344 if (
i == ip &&
j ==
is)
1360 if (cnt >= minfill) {
1362 qsort(x1, cnt,
sizeof (fnode),
1363 (
int (*)(
const void *,
const void *))
compfnode);
1364 qsort(x2, cnt,
sizeof (fnode),
1365 (
int (*)(
const void *,
const void *))
compfnode);
1371 for (
i = cnt / 4;
i <= 3 * cnt / 4;
i++) {
1382 if (La1 > 0.0 && La2 > 0.0 && La1 / La2 < 2.0) {
1383 ii = ip *
l1rec->l1file->nbands + ib1;
1388 *
l1rec->tg_sen[ii];
1400 int32_t
func,
band, nx, ny, minfill;
1403 for (
i = 0;
i < fctl->nfilt;
i++) {
1405 func = fctl->f[
i].func;
1406 band = fctl->f[
i].band;
1409 minfill = fctl->f[
i].minfill;
1438 printf(
"-E- %s %d: unknown filter function %d\n",
1439 __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)